亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbdrv.h

?? AVR_Meag8單片機控制三基色的LED
?? H
?? 第 1 頁 / 共 2 頁
字號:
/* Name: usbdrv.h * Project: AVR USB driver * Author: Christian Starkjohann * Creation Date: 2004-12-29 * Tabsize: 4 * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH * License: GNU GPL v2 (see License.txt) or proprietary (CommercialLicense.txt) * This Revision: $Id: usbdrv.h 375 2007-07-07 12:01:52Z cs $ */#ifndef __usbdrv_h_included__#define __usbdrv_h_included__#include "usbconfig.h"#include "iarcompat.h"/*Hardware Prerequisites:=======================USB lines D+ and D- MUST be wired to the same I/O port. D+ must (also) beconnected to INT0. D- requires a pullup of 1.5k to +3.5V (and the devicemust be powered at 3.5V) to identify as low-speed USB device. A pullup of1M SHOULD be connected from D+ to +3.5V to prevent interference when no USBmaster is connected. We use D+ as interrupt source and not D- because itdoes not trigger on keep-alive and RESET states.As a compile time option, the 1.5k pullup resistor on D- can be madeswitchable to allow the device to disconnect at will. See the definition ofusbDeviceConnect() and usbDeviceDisconnect() further down in this file.Please adapt the values in usbconfig.h according to your hardware!The device MUST be clocked at exactly 12 MHz or 16 MHz or at 16.5 MHz +/- 1%.See usbconfig-prototype.h for details.Limitations:============Robustness with respect to communication errors:The driver assumes error-free communication. It DOES check for errors inthe PID, but does NOT check bit stuffing errors, SE0 in middle of a byte,token CRC (5 bit) and data CRC (16 bit). CRC checks can not be performed dueto timing constraints: We must start sending a reply within 7 bit times.Bit stuffing and misplaced SE0 would have to be checked in real-time, but CPUperformance does not permit that. The driver does not check Data0/Data1toggling, but application software can implement the check.Input characteristics:Since no differential receiver circuit is used, electrical interferencerobustness may suffer. The driver samples only one of the data lines withan ordinary I/O pin's input characteristics. However, since this is only alow speed USB implementation and the specification allows for 8 times thebit rate over the same hardware, we should be on the safe side. Even the specrequires detection of asymmetric states at high bit rate for SE0 detection.Number of endpoints:The driver supports up to four endpoints: One control endpoint (endpoint 0),two interrupt-in (or bulk-in) endpoints (endpoint 1 and 3) and oneinterrupt-out (or bulk-out) endpoint (endpoint 1). Please note that the USBstandard forbids bulk endpoints for low speed devices! Most operating systemsallow them anyway, but the AVR will spend 90% of the CPU time in the USBinterrupt polling for bulk data.By default, only the control endpoint 0 is enabled. To get the other endpoints,define USB_CFG_HAVE_INTRIN_ENDPOINT, USB_CFG_HAVE_INTRIN_ENDPOINT3 and/orUSB_CFG_IMPLEMENT_FN_WRITEOUT respectively (see usbconfig-prototype.h fordetails).Maximum data payload:Data payload of control in and out transfers may be up to 254 bytes. In orderto accept payload data of out transfers, you need to implement'usbFunctionWrite()'.USB Suspend Mode supply current:The USB standard limits power consumption to 500uA when the bus is in suspendmode. This is not a problem for self-powered devices since they don't needbus power anyway. Bus-powered devices can achieve this only by putting theCPU in sleep mode. The driver does not implement suspend handling by itself.However, the application may implement activity monitoring and wakeup fromsleep. The host sends regular SE0 states on the bus to keep it active. TheseSE0 states can be detected by wiring the INT1 pin to D-. It is not necessaryto enable the interrupt, checking the interrupt pending flag should suffice.Before entering sleep mode, the application should enable INT1 for a wakeupon the next bus activity.Operation without an USB master:The driver behaves neutral without connection to an USB master if D- readsas 1. To avoid spurious interrupts, we recommend a high impedance (e.g. 1M)pullup resistor on D+. If D- becomes statically 0, the driver may block inthe interrupt routine.Interrupt latency:The application must ensure that the USB interrupt is not disabled for morethan 20 cycles. This implies that all interrupt routines must either bedeclared as "INTERRUPT" instead of "SIGNAL" (see "avr/signal.h") or that theyare written in assembler with "sei" as the first instruction.Maximum interrupt duration / CPU cycle consumption:The driver handles all USB communication during the interrupt serviceroutine. The routine will not return before an entire USB message is receivedand the reply is sent. This may be up to ca. 1200 cycles @ 12 MHz (= 100us) ifthe host conforms to the standard. The driver will consume CPU cycles for allUSB messages, even if they address another (low-speed) device on the same bus.*//* ------------------------------------------------------------------------- *//* --------------------------- Module Interface ---------------------------- *//* ------------------------------------------------------------------------- */#define USBDRV_VERSION  20070707/* This define uniquely identifies a driver version. It is a decimal number * constructed from the driver's release date in the form YYYYMMDD. If the * driver's behavior or interface changes, you can use this constant to * distinguish versions. If it is not defined, the driver's release date is * older than 2006-01-25. */#ifndef USB_PUBLIC#define USB_PUBLIC#endif/* USB_PUBLIC is used as declaration attribute for all functions exported by * the USB driver. The default is no attribute (see above). You may define it * to static either in usbconfig.h or from the command line if you include * usbdrv.c instead of linking against it. Including the C module of the driver * directly in your code saves a couple of bytes in flash memory. */#ifndef __ASSEMBLER__#ifndef uchar#define uchar   unsigned char#endif#ifndef schar#define schar   signed char#endif/* shortcuts for well defined 8 bit integer types */struct usbRequest;  /* forward declaration */USB_PUBLIC void usbInit(void);/* This function must be called before interrupts are enabled and the main * loop is entered. */USB_PUBLIC void usbPoll(void);/* This function must be called at regular intervals from the main loop. * Maximum delay between calls is somewhat less than 50ms (USB timeout for * accepting a Setup message). Otherwise the device will not be recognized. * Please note that debug outputs through the UART take ~ 0.5ms per byte * at 19200 bps. */extern uchar *usbMsgPtr;/* This variable may be used to pass transmit data to the driver from the * implementation of usbFunctionWrite(). It is also used internally by the * driver for standard control requests. */USB_PUBLIC uchar usbFunctionSetup(uchar data[8]);/* This function is called when the driver receives a SETUP transaction from * the host which is not answered by the driver itself (in practice: class and * vendor requests). All control transfers start with a SETUP transaction where * the host communicates the parameters of the following (optional) data * transfer. The SETUP data is available in the 'data' parameter which can * (and should) be casted to 'usbRequest_t *' for a more user-friendly access * to parameters. * * If the SETUP indicates a control-in transfer, you should provide the * requested data to the driver. There are two ways to transfer this data: * (1) Set the global pointer 'usbMsgPtr' to the base of the static RAM data * block and return the length of the data in 'usbFunctionSetup()'. The driver * will handle the rest. Or (2) return 0xff in 'usbFunctionSetup()'. The driver * will then call 'usbFunctionRead()' when data is needed. See the * documentation for usbFunctionRead() for details. * * If the SETUP indicates a control-out transfer, the only way to receive the * data from the host is through the 'usbFunctionWrite()' call. If you * implement this function, you must return 0xff in 'usbFunctionSetup()' to * indicate that 'usbFunctionWrite()' should be used. See the documentation of * this function for more information. If you just want to ignore the data sent * by the host, return 0 in 'usbFunctionSetup()'. * * Note that calls to the functions usbFunctionRead() and usbFunctionWrite() * are only done if enabled by the configuration in usbconfig.h. */USB_PUBLIC uchar usbFunctionDescriptor(struct usbRequest *rq);/* You need to implement this function ONLY if you provide USB descriptors at * runtime (which is an expert feature). It is very similar to * usbFunctionSetup() above, but it is called only to request USB descriptor * data. See the documentation of usbFunctionSetup() above for more info. */#if USB_CFG_HAVE_INTRIN_ENDPOINTUSB_PUBLIC void usbSetInterrupt(uchar *data, uchar len);/* This function sets the message which will be sent during the next interrupt * IN transfer. The message is copied to an internal buffer and must not exceed * a length of 8 bytes. The message may be 0 bytes long just to indicate the * interrupt status to the host. * If you need to transfer more bytes, use a control read after the interrupt. */extern volatile uchar usbTxLen1;#define usbInterruptIsReady()   (usbTxLen1 & 0x10)/* This macro indicates whether the last interrupt message has already been * sent. If you set a new interrupt message before the old was sent, the * message already buffered will be lost. */#if USB_CFG_HAVE_INTRIN_ENDPOINT3USB_PUBLIC void usbSetInterrupt3(uchar *data, uchar len);extern volatile uchar usbTxLen3;#define usbInterruptIsReady3()   (usbTxLen3 & 0x10)/* Same as above for endpoint 3 */#endif#endif /* USB_CFG_HAVE_INTRIN_ENDPOINT */#if USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH    /* simplified interface for backward compatibility */#define usbHidReportDescriptor  usbDescriptorHidReport/* should be declared as: PROGMEM char usbHidReportDescriptor[]; *//* If you implement an HID device, you need to provide a report descriptor. * The HID report descriptor syntax is a bit complex. If you understand how * report descriptors are constructed, we recommend that you use the HID * Descriptor Tool from usb.org, see http://www.usb.org/developers/hidpage/. * Otherwise you should probably start with a working example. */#endif  /* USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH */#if USB_CFG_IMPLEMENT_FN_WRITEUSB_PUBLIC uchar usbFunctionWrite(uchar *data, uchar len);/* This function is called by the driver to provide a control transfer's * payload data (control-out). It is called in chunks of up to 8 bytes. The * total count provided in the current control transfer can be obtained from * the 'length' property in the setup data. If an error occurred during * processing, return 0xff (== -1). The driver will answer the entire transfer * with a STALL token in this case. If you have received the entire payload * successfully, return 1. If you expect more data, return 0. If you don't * know whether the host will send more data (you should know, the total is * provided in the usbFunctionSetup() call!), return 1. * NOTE: If you return 0xff for STALL, 'usbFunctionWrite()' may still be called * for the remaining data. You must continue to return 0xff for STALL in these * calls. * In order to get usbFunctionWrite() called, define USB_CFG_IMPLEMENT_FN_WRITE * to 1 in usbconfig.h and return 0xff in usbFunctionSetup().. */#endif /* USB_CFG_IMPLEMENT_FN_WRITE */#if USB_CFG_IMPLEMENT_FN_READUSB_PUBLIC uchar usbFunctionRead(uchar *data, uchar len);/* This function is called by the driver to ask the application for a control * transfer's payload data (control-in). It is called in chunks of up to 8 * bytes each. You should copy the data to the location given by 'data' and * return the actual number of bytes copied. If you return less than requested, * the control-in transfer is terminated. If you return 0xff, the driver aborts * the transfer with a STALL token. * In order to get usbFunctionRead() called, define USB_CFG_IMPLEMENT_FN_READ * to 1 in usbconfig.h and return 0xff in usbFunctionSetup().. */#endif /* USB_CFG_IMPLEMENT_FN_READ */#if USB_CFG_IMPLEMENT_FN_WRITEOUTUSB_PUBLIC void usbFunctionWriteOut(uchar *data, uchar len);/* This function is called by the driver when data on interrupt-out or bulk- * out endpoint 1 is received. You must define USB_CFG_IMPLEMENT_FN_WRITEOUT * to 1 in usbconfig.h to get this function called. */#endif /* USB_CFG_IMPLEMENT_FN_WRITEOUT */#ifdef USB_CFG_PULLUP_IOPORTNAME#define usbDeviceConnect()      ((USB_PULLUP_DDR |= (1<<USB_CFG_PULLUP_BIT)), \                                  (USB_PULLUP_OUT |= (1<<USB_CFG_PULLUP_BIT)))/* This macro (intended to look like a function) connects the device to the * USB bus. It is only available if you have defined the constants * USB_CFG_PULLUP_IOPORT and USB_CFG_PULLUP_BIT in usbconfig.h. */#define usbDeviceDisconnect()   ((USB_PULLUP_DDR &= ~(1<<USB_CFG_PULLUP_BIT)), \                                  (USB_PULLUP_OUT &= ~(1<<USB_CFG_PULLUP_BIT)))/* This macro (intended to look like a function) disconnects the device from * the USB bus. It is only available if you have defined the constants * USB_CFG_PULLUP_IOPORT and USB_CFG_PULLUP_BIT in usbconfig.h. */#endif /* USB_CFG_PULLUP_IOPORT */extern unsigned usbCrc16(unsigned data, uchar len);#define usbCrc16(data, len) usbCrc16((unsigned)(data), len)/* This function calculates the binary complement of the data CRC used in * USB data packets. The value is used to build raw transmit packets. * You may want to use this function for data checksums or to verify received * data. We enforce 16 bit calling conventions for compatibility with IAR's * tiny memory model. */extern unsigned usbCrc16Append(unsigned data, uchar len);#define usbCrc16Append(data, len)    usbCrc16Append((unsigned)(data), len)/* This function is equivalent to usbCrc16() above, except that it appends * the 2 bytes CRC (lowbyte first) in the 'data' buffer after reading 'len' * bytes. */extern uchar    usbConfiguration;/* This value contains the current configuration set by the host. The driver * allows setting and querying of this variable with the USB SET_CONFIGURATION * and GET_CONFIGURATION requests, but does not use it otherwise. * You may want to reflect the "configured" status with a LED on the device or * switch on high power parts of the circuit only if the device is configured. */#define USB_STRING_DESCRIPTOR_HEADER(stringLength) ((2*(stringLength)+2) | (3<<8))/* This macro builds a descriptor header for a string descriptor given the * string's length. See usbdrv.c for an example how to use it. */#if USB_CFG_HAVE_FLOWCONTROLextern volatile schar   usbRxLen;#define usbDisableAllRequests()     usbRxLen = -1/* Must be called from usbFunctionWrite(). This macro disables all data input * from the USB interface. Requests from the host are answered with a NAK * while they are disabled. */#define usbEnableAllRequests()      usbRxLen = 0/* May only be called if requests are disabled. This macro enables input from * the USB interface after it has been disabled with usbDisableAllRequests(). */#define usbAllRequestsAreDisabled() (usbRxLen < 0)/* Use this macro to find out whether requests are disabled. It may be needed * to ensure that usbEnableAllRequests() is never called when requests are * enabled. */#endif#define USB_SET_DATATOKEN1(token)   usbTxBuf1[0] = token#define USB_SET_DATATOKEN3(token)   usbTxBuf3[0] = token/* These two macros can be used by application software to reset data toggling * for interrupt-in endpoints 1 and 3. */#endif  /* __ASSEMBLER__ */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类综合日韩欧美亚洲| 亚洲第一精品在线| 91精品国产高清一区二区三区蜜臀| 成人动漫视频在线| 国产91丝袜在线播放九色| 久久精品国产亚洲5555| 国产精品你懂的在线欣赏| 国产日韩欧美精品在线| 欧美激情一二三区| 中文字幕免费在线观看视频一区| 欧美国产精品一区二区三区| 欧美激情一区在线观看| 国产精品卡一卡二卡三| 亚洲视频图片小说| 亚洲宅男天堂在线观看无病毒| 亚洲精品亚洲人成人网在线播放| 最新国产精品久久精品| 夜夜爽夜夜爽精品视频| 亚洲高清三级视频| 男人的天堂亚洲一区| 国产美女精品人人做人人爽| 成人免费看片app下载| 色综合久久88色综合天天| 欧美日本视频在线| 精品少妇一区二区三区免费观看| 日韩免费高清视频| 国产偷国产偷精品高清尤物| 17c精品麻豆一区二区免费| 亚洲最大色网站| 激情av综合网| 91一区二区三区在线观看| 欧美艳星brazzers| 精品国精品国产| 国产精品麻豆久久久| 亚洲成在人线在线播放| 国内精品久久久久影院一蜜桃| 99久久精品免费| 日韩色视频在线观看| 中文字幕一区二区三区不卡| 性做久久久久久免费观看欧美| 国内精品国产成人国产三级粉色 | 日韩精品乱码免费| 国产裸体歌舞团一区二区| 91香蕉视频mp4| 日韩精品中文字幕一区二区三区| 欧美高清在线视频| 日本成人中文字幕在线视频| youjizz久久| 日韩区在线观看| 一区二区三区国产精品| 国产精品996| 91精品国产91热久久久做人人| 国产精品久久久久久久蜜臀| 美女视频黄免费的久久| 在线一区二区视频| 日本一区二区三区四区在线视频 | 久久精品国产网站| 色综合久久久久综合99| 久久精品日韩一区二区三区| 日韩av一区二| 一本高清dvd不卡在线观看| 国产嫩草影院久久久久| 成人av第一页| 日韩免费观看2025年上映的电影| 亚洲卡通动漫在线| av一区二区三区四区| 精品日产卡一卡二卡麻豆| 日韩精品成人一区二区三区| 色综合久久中文综合久久牛| 久久久久久夜精品精品免费| 日本中文一区二区三区| 欧美三级在线看| 一区二区三区在线观看国产 | zzijzzij亚洲日本少妇熟睡| 国产无一区二区| 国产一区二区三区在线看麻豆| 日韩一区二区免费电影| 日韩精品乱码av一区二区| 欧美日韩国产高清一区二区| 亚洲一级二级在线| 欧美亚洲国产一区在线观看网站| 亚洲精品免费视频| 色哟哟一区二区| 亚洲国产精品影院| 欧美电影在线免费观看| 日韩av午夜在线观看| 日韩欧美一级二级三级| 欧美aaaaaa午夜精品| 精品国精品国产| 国产精品99久久久久久久vr| 国产日韩欧美电影| 成人免费的视频| 一区二区三区中文字幕在线观看| 在线观看国产精品网站| 午夜精品视频一区| 91精品欧美久久久久久动漫| 捆绑调教美女网站视频一区| 久久久久久久一区| 99久久er热在这里只有精品15 | 欧美综合一区二区| 亚洲第一福利视频在线| 日韩视频免费观看高清在线视频| 国产麻豆精品久久一二三| 国产精品丝袜在线| 欧美视频一区二区在线观看| 美女视频一区二区| 国产欧美日韩视频在线观看| 色综合视频一区二区三区高清| 午夜精品爽啪视频| 久久蜜桃av一区精品变态类天堂| 99久久精品国产导航| 无吗不卡中文字幕| 日本一区二区电影| 欧美色区777第一页| 国产乱子伦视频一区二区三区 | 亚洲午夜羞羞片| 精品第一国产综合精品aⅴ| 丰满放荡岳乱妇91ww| 亚洲成人av中文| 国产精品免费视频观看| 91精品国产91热久久久做人人| 成人精品视频一区二区三区 | 久久99国产精品免费网站| 中文字幕一区二区三中文字幕| 欧美日韩精品一区二区| 国产不卡免费视频| 蜜臀国产一区二区三区在线播放| 国产精品丝袜在线| 精品国产乱码久久久久久蜜臀| 色狠狠一区二区三区香蕉| 国产高清精品久久久久| 日本vs亚洲vs韩国一区三区二区 | 日本少妇一区二区| 亚洲欧美激情在线| 国产日韩精品一区| 日韩欧美专区在线| 欧美伊人久久大香线蕉综合69| 国产成人亚洲综合a∨婷婷图片| 丝袜亚洲另类欧美| 一区二区三区91| 亚洲三级在线看| 国产情人综合久久777777| 日韩一二三区不卡| 欧美精品日韩综合在线| 欧美熟乱第一页| 欧美午夜精品免费| 在线这里只有精品| 色爱区综合激月婷婷| 91在线国内视频| av电影一区二区| 91社区在线播放| 色婷婷激情久久| k8久久久一区二区三区| 国产成人a级片| 国产激情91久久精品导航 | 国产二区国产一区在线观看| 精品亚洲aⅴ乱码一区二区三区| 日韩精品亚洲一区二区三区免费| 午夜欧美2019年伦理| 日韩电影在线免费| 日本一不卡视频| 久久福利视频一区二区| 久久国产精品色| 国产精品18久久久久久久久久久久| 国产精品一卡二卡在线观看| 久久99精品久久久久久| 国产美女视频91| 99视频在线精品| 欧美亚洲动漫制服丝袜| 欧美精品久久久久久久多人混战 | 欧美一区二区在线免费观看| 在线播放/欧美激情| 精品国产一区二区三区四区四| 精品国内片67194| 中文字幕免费观看一区| 中文字幕中文字幕在线一区 | 中文字幕不卡三区| 国产精品久久久久久久岛一牛影视| 中文字幕在线不卡视频| 亚洲一区二区美女| 奇米影视一区二区三区小说| 国模一区二区三区白浆| 99九九99九九九视频精品| 精品视频资源站| 久久综合精品国产一区二区三区 | 亚洲欧美日韩系列| 日韩av中文字幕一区二区| 国产精品影视在线观看| 色综合久久久久| 精品久久久久99| 亚洲欧洲精品一区二区精品久久久 | 精品国产1区2区3区| 亚洲欧美成aⅴ人在线观看| 日韩制服丝袜先锋影音| 丰满少妇久久久久久久| 欧美午夜电影网| 国产精品色婷婷久久58| 天堂影院一区二区| 粉嫩aⅴ一区二区三区四区五区| 欧美色大人视频|