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

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

?? usbdrv.h

?? 小日本用mega8 做的軟件模擬USB 轉232
?? 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: Proprietary, free under certain conditions. See Documentation. * This Revision: $Id: usbdrv.h 209 2006-06-26 09:44:15Z 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 12 MHz. This is more than the 10 MHz allowed byan AT90S2313 powered at 4.5V. However, if the supply voltage to maximum clockrelation is interpolated linearly, an ATtiny2313 meets the requirement byspecification. In practice, the AT90S2313 can be overclocked and works well.Limitations:============Compiling:You should link the usbdrv.o module first because it has special alignmentrequirements for the receive buffer (the buffer must not cross a 256 bytepage boundary, it must not even touch it at the end). If you can't link itfirst, you must use other measures to ensure alignment.Note: gcc does not always assign variable addresses in the order as the modulesare linked or the variables are declared. You can choose a memory section forthe receive buffer with the configuration option "USB_BUFFER_SECTION". Thisoption defaults to ".bss". If you use your own section, you can place it atan arbitrary location with a linker option similar to"-Wl,--section-start=.mybuffer=0x800060". Use "avr-nm -ng" on the binary andsearch for "usbRxBuf" to find tbe base address of the 22 bytes rx buffer.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.Sampling jitter:The driver guarantees a sampling window of 1/2 bit. The USB spec requiresthat the receiver has at most 1/4 bit sampling window. The 1/2 bit windowshould still work reliably enough because we work at low speed. If you wantto meet the spec, define the macro "USB_CFG_SAMPLE_EXACT" to 1 in usbconfig.h.This will unroll a loop which results in bigger code size.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 two endpoints: One control endpoint (endpoint 0) andone interrupt-in endpoint (endpoint 1) where the device can send interruptdata to the host. Endpoint 1 is only compiled in ifUSB_CFG_HAVE_INTRIN_ENDPOINT is defined to 1 in usbconfig.h.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 = 100us if the hostconforms to the standard. The driver will consume CPU cycles for all USBmessages, even if they address another (low-speed) device on the same bus.*//* ------------------------------------------------------------------------- *//* --------------------------- Module Interface ---------------------------- *//* ------------------------------------------------------------------------- */#define USBDRV_VERSION  20060626/* 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 __ASSEMBLER__#ifndef uchar#define uchar   unsigned char#endif#ifndef schar#define schar   signed char#endif/* shortcuts for well defined 8 bit integer types */extern void     usbInit(void);/* This function must be called before interrupts are enabled and the main * loop is entered. */extern 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. */extern 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. */#if USB_CFG_HAVE_INTRIN_ENDPOINTvoid    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 schar usbTxLen1;#define usbInterruptIsReady()   (usbTxLen1 == -1)/* 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_ENDPOINT3void    usbSetInterrupt3(uchar *data, uchar len);extern volatile schar usbTxLen3;#define usbInterruptIsReady3()   (usbTxLen3 == -1)/* Same as above for endpoint 3 */#endif#endif /* USB_CFG_HAVE_INTRIN_ENDPOINT */#if USB_CFG_HID_REPORT_DESCRIPTOR_LENGTHextern PROGMEM const 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_WRITEextern 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_READextern 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_WRITEOUTextern 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_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)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲日韩综合一区二区| 国产欧美日韩在线观看| 麻豆精品久久久| 国产婷婷色一区二区三区 | 中文在线免费一区三区高中清不卡| 日韩精品电影在线| 欧美成人精精品一区二区频| 久久国产精品99久久久久久老狼| 久久色视频免费观看| 91小视频在线| 九九**精品视频免费播放| 国产精品嫩草影院av蜜臀| 欧美日韩一区二区在线观看视频 | 成人精品视频一区二区三区| 17c精品麻豆一区二区免费| 欧美精品18+| 色琪琪一区二区三区亚洲区| 狠狠色狠狠色综合系列| 一区二区三区免费| 国产午夜精品一区二区三区嫩草| 欧亚洲嫩模精品一区三区| 国产九色sp调教91| 天堂资源在线中文精品| 欧美国产日韩在线观看| 欧美一区二区三区视频免费| 91蝌蚪porny| 国模套图日韩精品一区二区| 亚洲已满18点击进入久久| 久久久美女艺术照精彩视频福利播放| 欧美在线影院一区二区| 成人午夜私人影院| 麻豆免费精品视频| 亚洲国产精品一区二区尤物区| 国产人成一区二区三区影院| 日韩视频免费观看高清完整版在线观看 | 国产日产亚洲精品系列| 精品视频在线视频| 成人爱爱电影网址| 免费人成在线不卡| 亚洲嫩草精品久久| 欧美精品一区二区三区蜜臀| 7777精品伊人久久久大香线蕉完整版 | 蜜桃传媒麻豆第一区在线观看| 亚洲女人****多毛耸耸8| 中文字幕av一区二区三区免费看 | av在线不卡电影| 国产综合色产在线精品| 日本va欧美va精品发布| 亚洲va韩国va欧美va| 一区二区三区毛片| 亚洲女爱视频在线| 亚洲欧美偷拍卡通变态| 亚洲欧洲av在线| 最新日韩av在线| 自拍偷拍亚洲激情| 亚洲男人都懂的| 夜夜揉揉日日人人青青一国产精品| 亚洲色图欧美偷拍| 国产亚洲女人久久久久毛片| 7777精品久久久大香线蕉| 91老师片黄在线观看| 99精品视频在线免费观看| 国产精品一区免费视频| 精品一区二区免费看| 麻豆国产精品777777在线| 美女一区二区久久| 九九久久精品视频| 国产精品一级黄| av资源网一区| 欧美在线视频日韩| 欧美日韩国产区一| 欧美一区二区三区男人的天堂| 日韩欧美另类在线| 久久免费电影网| 亚洲国产精品黑人久久久| 国产精品你懂的在线欣赏| 亚洲精品欧美激情| 亚洲bt欧美bt精品777| 婷婷丁香久久五月婷婷| 麻豆91精品91久久久的内涵| 韩国v欧美v日本v亚洲v| 国产盗摄精品一区二区三区在线| 成人视屏免费看| 国产另类ts人妖一区二区| 国产精品一区二区三区乱码| 99久久精品国产导航| 欧美日韩在线综合| 欧美成人a∨高清免费观看| 欧美mv和日韩mv国产网站| 国产日韩欧美不卡在线| 亚洲一区二区三区激情| 性做久久久久久| 国内精品国产成人| 色欧美片视频在线观看在线视频| 欧美福利一区二区| 国产亚洲欧美一级| 亚洲国产精品久久久男人的天堂| 极品尤物av久久免费看| 不卡av在线网| 欧美一级在线视频| 欧美国产在线观看| 天涯成人国产亚洲精品一区av| 国产精品亚洲午夜一区二区三区 | 国产一区二区三区四| 国产综合色在线视频区| 91亚洲精品一区二区乱码| 欧美美女黄视频| 中文字幕不卡一区| 日本不卡高清视频| 大胆亚洲人体视频| 欧美午夜视频网站| 国产欧美综合色| 三级久久三级久久| eeuss影院一区二区三区| 日韩欧美在线网站| 亚洲靠逼com| 国产精品1区2区3区在线观看| 欧美色倩网站大全免费| 国产午夜精品久久久久久免费视 | 欧美影院一区二区三区| 久久亚洲精品国产精品紫薇| 亚洲国产你懂的| www.亚洲在线| 久久欧美一区二区| 亚洲成av人片一区二区| 国产精品99精品久久免费| 欧美三级蜜桃2在线观看| 中文字幕免费一区| 激情五月激情综合网| 欧美日韩精品一区二区三区| 中文字幕一区二区三区视频 | 久久97超碰国产精品超碰| 欧美性一级生活| 日韩理论在线观看| 国产成人免费视频一区| 日韩欧美成人午夜| 亚洲成av人片一区二区三区| 一本大道久久a久久精二百| 国产欧美日韩激情| 久久99久久99小草精品免视看| 欧美欧美午夜aⅴ在线观看| 亚洲欧美另类久久久精品 | 久久电影国产免费久久电影| 在线观看欧美黄色| 日韩伦理免费电影| 成人18精品视频| 国产精品区一区二区三| 韩国av一区二区三区在线观看| 欧美一区午夜精品| 亚洲电影第三页| 欧美日韩一区久久| 亚洲一区二区三区视频在线播放| 欧美偷拍一区二区| 亚洲夂夂婷婷色拍ww47| 欧洲精品在线观看| 午夜不卡av免费| 91免费精品国自产拍在线不卡| 国产精品久久久久影院老司| 在线观看亚洲一区| 偷拍与自拍一区| 日韩精品中文字幕一区二区三区 | 激情图片小说一区| 日韩视频一区二区三区| 九九精品视频在线看| 久久毛片高清国产| 国产成人h网站| 亚洲欧洲av另类| 欧美影视一区二区三区| 亚洲一区二区精品视频| 欧美少妇性性性| 久久精品72免费观看| 精品av久久707| 国产成人亚洲综合a∨婷婷图片 | 不卡免费追剧大全电视剧网站| 久久精品视频一区二区| 国产成人综合亚洲网站| 国产精品的网站| 欧美特级限制片免费在线观看| 五月婷婷欧美视频| 欧美不卡在线视频| 成人国产精品免费观看| 亚洲精品国产品国语在线app| 欧美精品粉嫩高潮一区二区| 国产一区在线观看麻豆| 亚洲天堂福利av| 亚洲精品一区二区三区四区高清| 色综合久久天天| 国产综合久久久久影院| 亚洲主播在线播放| 国产免费成人在线视频| 欧美日韩综合色| 不卡免费追剧大全电视剧网站| 久久国产尿小便嘘嘘| 一区二区三区不卡视频| 久久久久久免费网| 在线不卡的av| 色偷偷久久一区二区三区| 九九九精品视频| 日本不卡的三区四区五区| 一区二区三区在线免费播放|