pic18f4550的usb應(yīng)用例程_第1頁
pic18f4550的usb應(yīng)用例程_第2頁
pic18f4550的usb應(yīng)用例程_第3頁
pic18f4550的usb應(yīng)用例程_第4頁
pic18f4550的usb應(yīng)用例程_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、typedefint.h#define USE_USB_BUS_SENSE_IO/-USB端點(diǎn)定義#define _EP01_OUT 0x01#define _EP01_IN 0x81#define _EP02_OUT 0x02#define _EP02_IN 0x82#define _EP03_OUT 0x03#define _EP03_IN 0x83#define _EP04_OUT 0x04#define _EP04_IN 0x84#define _EP05_OUT 0x05#define _EP05_IN 0x85#define _EP06_OUT 0x06#define _EP06_

2、IN 0x86#define _EP07_OUT 0x07#define _EP07_IN 0x87#define _EP08_OUT 0x08#define _EP08_IN 0x88#define _EP09_OUT 0x09#define _EP09_IN 0x89#define _EP10_OUT 0x0A#define _EP10_IN 0x8A#define _EP11_OUT 0x0B#define _EP11_IN 0x8B#define _EP12_OUT 0x0C#define _EP12_IN 0x8C#define _EP13_OUT 0x0D#define _EP13

3、_IN 0x8D#define _EP14_OUT 0x0E#define _EP14_IN 0x8E#define _EP15_OUT 0x0F#define _EP15_IN 0x8F/-USB各種標(biāo)準(zhǔn)請求類型#define GET_STATUS 0 / 主機(jī)請求一個(gè)設(shè)備、接口或端點(diǎn)的特性狀態(tài)#define CLR_FEATURE 1 / 主機(jī)請求禁止一個(gè)設(shè)備、接口或端點(diǎn)上的特征#define SET_FEATURE 3 / 主機(jī)請求啟用一個(gè)在設(shè)備、接口或端點(diǎn)上的特征#define SET_ADR 5 / 主機(jī)指定一個(gè)地址來與設(shè)備通信#define GET_DSC 6 / 主機(jī)請求一個(gè)指定

4、的描述符#define SET_DSC 7 / 主機(jī)新增一個(gè)描述符,或是更新一個(gè)存在的描述符#define GET_CFG 8 / 主機(jī)請求目前設(shè)備配置的數(shù)值#define SET_CFG 9 / 指示設(shè)備使用選擇的配置#define GET_INTF 10 / 如果設(shè)備支持的配置支持多個(gè)互不相關(guān)設(shè)置的端口,主機(jī)請求目前的設(shè)置#define SET_INTF 11 / 如果設(shè)備支持多個(gè)互不相關(guān)設(shè)置的接口,主機(jī)請求設(shè)備使用一個(gè)指定的設(shè)置#define SYNCH_FRAME 12 / 設(shè)備與報(bào)告一個(gè)端點(diǎn)的同步幀#define DEVICE_REMOTE_WAKEUP 0x01 / 設(shè)備遠(yuǎn)程喚醒#

5、define ENDPOINT_HALT 0x00 / 端點(diǎn)掛起/* Endpoint Transfer Type */#define _CTRL 0x00 /Control Transfer#define _ISO 0x01 /Isochronous Transfer#define _BULK 0x02 /Bulk Transfer#define _INT 0x03 /Interrupt Transfer/* Descriptor Types */#define DSC_DEV 0x01#define DSC_CFG 0x02#define DSC_STR 0x03#define DSC_I

6、NTF 0x04#define DSC_EP 0x05/* Configuration Attributes */#define _DEFAULT 0x017 /Default Value (Bit 7 is set)#define _SELF 0x016 /Self-powered (Supports if set)#define _RWU 0x015 /Remote Wakeup (Supports if set)/-USB類型定義/* MUID = Microchip USB Class ID 用來指明usb的那個(gè)類型獲得EP0數(shù)據(jù)的流通*/#define MUID_NULL 0 /無#

7、define MUID_USB9 1 /USB控制傳輸#define MUID_HID 2 /HID #define MUID_CDC 3 /海量傳輸/- 端點(diǎn)狀態(tài)定義#define OUT 0#define IN 1#define PIC_EP_NUM_MASK 0b#define PIC_EP_DIR_MASK 0b#define EP00_OUT (0x003)|(OUT2)#define EP00_IN (0x003)|(IN2)#define EP01_OUT (0x013)|(OUT2)#define EP01_IN (0x013)|(IN2)#define EP02_OUT (0

8、x023)|(OUT2)#define EP02_IN (0x023)|(IN2)#define EP03_OUT (0x033)|(OUT2)#define EP03_IN (0x033)|(IN2)#define EP04_OUT (0x043)|(OUT2)#define EP04_IN (0x043)|(IN2)#define EP05_OUT (0x053)|(OUT2)#define EP05_IN (0x053)|(IN2)#define EP06_OUT (0x063)|(OUT2)#define EP06_IN (0x063)|(IN2)#define EP07_OUT (0

9、x073)|(OUT2)#define EP07_IN (0x073)|(IN2)#define EP08_OUT (0x083)|(OUT2)#define EP08_IN (0x083)|(IN2)#define EP09_OUT (0x093)|(OUT2)#define EP09_IN (0x093)|(IN2)#define EP10_OUT (0x0A3)|(OUT2)#define EP10_IN (0x0A3)|(IN2)#define EP11_OUT (0x0B3)|(OUT2)#define EP11_IN (0x0B3)|(IN2)#define EP12_OUT (0

10、x0C3)|(OUT2)#define EP12_IN (0x0C3)|(IN2)#define EP13_OUT (0x0D3)|(OUT2)#define EP13_IN (0x0D3)|(IN2)#define EP14_OUT (0x0E3)|(OUT2)#define EP14_IN (0x0E3)|(IN2)#define EP15_OUT (0x0F3)|(OUT2)#define EP15_IN (0x0F3)|(IN2)/-緩沖期描述符狀態(tài)定義/* Buffer Descriptor Status Register Initialization Parameters */#d

11、efine _BSTALL 0x04 /緩沖器停止始能#define _DTSEN 0x08 /數(shù)據(jù)套索同步使能#define _INCDIS 0x10 /地址遞增禁止#define _KEN 0x20 /保持保存所有權(quán)使能#define _DAT0 0x00 /包期待下一個(gè)#define _DAT1 0x40 /包期待下一個(gè)#define _DTSMASK 0x40 /如果DTSEN沒有使能,保持置1#define _USIE 0x80 /SIE擁有緩沖區(qū)#define _UCPU 0x00 /CPU擁有緩沖區(qū)/-控制傳輸常量定義/* Control Transfer States */ 控

12、制傳輸狀態(tài)定義#define WAIT_SETUP 0 / 等待狀態(tài)#define CTRL_TRF_TX 1 / 控制傳輸發(fā)送數(shù)據(jù)狀態(tài)#define CTRL_TRF_RX 2 / 控制傳輸接收數(shù)據(jù)狀態(tài)/* USB PID: Token Types - See chapter 8 in the USB specification */PID 令牌#define SETUP_TOKEN 0b / 主機(jī)到設(shè)備的控制管道設(shè)置事務(wù) #define OUT_TOKEN 0b / 主機(jī)到設(shè)備的數(shù)據(jù)事務(wù)#define IN_TOKEN 0b / 設(shè)備到主機(jī)的數(shù)據(jù)事務(wù)/* bmRequestType Def

13、initions */#define HOST_TO_DEV 0 /主機(jī)到設(shè)備(數(shù)據(jù)方向)#define DEV_TO_HOST 1 /設(shè)備到主機(jī) (數(shù)據(jù)方向) #define STANDARD 0x00 / 標(biāo)準(zhǔn)類別#define CLASS 0x01 / 特定USB類別定義,HID的請求屬于這一類#define VENDOR 0x02 / 廠商自定義請求#define RCPT_DEV 0#define RCPT_INTF 1#define RCPT_EP 2#define RCPT_OTH 3/-HID常量定義/* HID */#define HID_INTF_ID 0x00 /HID接

14、口號#define HID_UEP UEP1 #define HID_BD_OUT ep1Bo /HID輸出事務(wù)端點(diǎn)#define HID_INT_OUT_EP_SIZE 8 /輸入事務(wù)端點(diǎn)緩沖區(qū)大小#define HID_BD_IN ep1Bi /HID輸入事務(wù)端點(diǎn)#define HID_INT_IN_EP_SIZE 8 /輸出事務(wù)端點(diǎn)緩沖區(qū)大小#define HID_NUM_OF_DSC 1 /HID描述符個(gè)數(shù)#define HID_RPT01_SIZE 47 /HID報(bào)表描述符大小#define HID_INTF 0x03#define HID_INPUT_REPORT_BYTES 2

15、/輸出報(bào)表大小#define HID_OUTPUT_REPORT_BYTES 2 /輸入報(bào)表大小#define HID_FEATURE_REPORT_BYTES 2 /特征報(bào)表大小/* Class Descriptor Types */#define DSC_HID 0x21#define DSC_RPT 0x22#define DSC_PHY 0x23/ HID特定請求#define GET_REPORT 0x01#define GET_IDLE 0x02#define GET_PROTOCOL 0x03#define SET_REPORT 0x09#define SET_IDLE 0x0A

16、#define SET_PROTOCOL 0x0B/-端點(diǎn)數(shù)以及EP0緩沖區(qū)字節(jié)數(shù)定義#define EP0_BUFF_SIZE 8 / 8, 16, 32, or 64#define MAX_NUM_INT 1 / 為跟蹤交替設(shè)置,中斷端點(diǎn)最大個(gè)數(shù)#define MAX_EP_NUMBER 1 / 端點(diǎn)號定義,本例用到端點(diǎn)0和1/-端點(diǎn)N的初始化配置字 #define EP_CTRL 0x06 / 配置SETUP事務(wù)并是能輸入輸出#define EP_OUT 0x0C / 配置使能輸出#define EP_IN 0x0A / 配置使能輸入#define EP_OUT_IN 0x0E / 配置

17、使能輸入輸出#define HSHK_EN 0x10 / 使能握手信號#define _RAM 0 / 數(shù)據(jù)區(qū)區(qū)別定義#define _ROM 1/-USB接入斷開標(biāo)志 #define USB_BUS_ATTACHED 1 /USB上電 #define USB_BUS_DETACHED 0 /USB斷點(diǎn)/* USB Device States - To be used with byte usb_device_stateUSB設(shè)備狀態(tài)定義,最終應(yīng)該達(dá)到CONFIGURED_STATE狀態(tài),算USB與主機(jī)配置完成 */#define DETACHED_STATE 0 /分離狀態(tài)#define A

18、TTACHED_STATE 1 /接入狀態(tài)#define POWERED_STATE 2 /使能狀態(tài)#define DEFAULT_STATE 3 /缺省狀態(tài)#define ADR_PENDING_STATE 4 /地址未決狀態(tài)#define ADDRESS_STATE 5 /地址配置狀態(tài)#define CONFIGURED_STATE 6 /配置狀態(tài)/*#define _PPBM0 0x00 / 乒乓緩沖模式0#define _PPBM1 0x01 / 乒乓緩沖模式1#define _PPBM2 0x02 / 乒乓緩沖模式2#define _LS 0x00 / 低速USB模式#define

19、_FS 0x04 / 全速USB模式#define _TRINT 0x00 / 使用內(nèi)部收發(fā)器#define _TREXT 0x08 / 使用外部收發(fā)器#define _PUEN 0x10 / 使用內(nèi)部上拉電阻#define _OEMON 0x40 / 使用OE信號監(jiān)視器#define _UTEYE 0x80 / 使能眼圖/*#define MODE_PP _PPBM0#define UCFG_VAL _PUEN|_TRINT|_FS|MODE_PP /USB配置寄存器設(shè)置/-數(shù)據(jù)類型定義typedef unsigned char byte; / 8-bittypedef unsigned i

20、nt word; / 16-bittypedef unsigned long dword; / 32-bit/-USB設(shè)備狀態(tài)類型typedef union _USB_DEVICE_STATUS byte _byte; struct unsigned RemoteWakeup:1;/ 0Disabled 1Enabled: See usbdrv.c,usb9.c unsigned ctrl_trf_mem:1;/ 0RAM 1ROM ; USB_DEVICE_STATUS; /-字節(jié)位定義類型 typedef union _BYTE byte _byte; struct unsigned b0

21、:1; unsigned b1:1; unsigned b2:1; unsigned b3:1; unsigned b4:1; unsigned b5:1; unsigned b6:1; unsigned b7:1; ; BYTE;/-字定義類型typedef union _WORD word _word; struct byte byte0; byte byte1; ; struct BYTE Byte0; BYTE Byte1; ; struct BYTE LowB; BYTE HighB; ; struct byte v2; ; WORD;#define LSB(a) (a).v0) /

22、定義低字節(jié)(如果是WORD型的可以直接用這個(gè)替代高低字節(jié))#define MSB(a) (a).v1) /定義高字節(jié)/-指針類型定義(雙字節(jié)的)typedef union _POINTER struct byte bLow; byte bHigh; /byte bUpper; ; word _word; / bLow & bHigh /pFunc _pFunc; / Usage: ptr.pFunc(); Init: ptr.pFunc = &; byte* bRam; / Ram byte pointer: 2 bytes pointer pointing / to 1 byte of da

23、ta word* wRam; / Ram word poitner: 2 bytes poitner pointing / to 2 bytes of data rom byte* bRom; / Size depends on compiler setting rom word* wRom; /rom near byte* nbRom; / Near = 2 bytes pointer /rom near word* nwRom; /rom far byte* fbRom; / Far = 3 bytes pointer /rom far word* fwRom; POINTER;/-USB

24、緩沖描述符類型定義typedef union _BD_STAT /緩沖描述符狀態(tài)寄存器位定義 byte _byte; struct unsigned BC8:1; unsigned BC9:1; unsigned BSTALL:1; /Buffer Stall Enable unsigned DTSEN:1; /Data Toggle Synch Enable unsigned INCDIS:1; /Address Increment Disable unsigned KEN:1; /BD Keep Enable unsigned DTS:1; /Data Toggle Synch Value

25、 unsigned UOWN:1; /USB Ownership ; struct unsigned BC8:1; unsigned BC9:1; unsigned PID0:1; unsigned PID1:1; unsigned PID2:1; unsigned PID3:1; unsigned :1; unsigned UOWN:1; ; struct unsigned :2; unsigned PID:4; / PID包定義,占4位 unsigned :2; ; BD_STAT; / 緩沖描述狀態(tài)寄存器typedef union _BDT struct BD_STAT Stat; /緩

26、沖描述符狀態(tài) byte Cnt; /緩沖描述符字節(jié)計(jì)數(shù) byte ADRL; /緩沖區(qū)地址低字節(jié) byte ADRH; /緩沖區(qū)地址高字節(jié) ; struct unsigned :8; unsigned :8; byte* ADR; /緩沖區(qū)地址,ADR占兩個(gè)字節(jié),但數(shù)據(jù)是一個(gè)字節(jié) ; BDT; /緩沖描述符表/-控制傳輸配置標(biāo)準(zhǔn)數(shù)據(jù)字節(jié)類型定義typedef union _CTRL_TRF_SETUP / 排列間接地址 struct byte _byteEP0_BUFF_SIZE; /#define EP0_BUFF_SIZE 8 ,8個(gè)字節(jié)的EP0緩沖區(qū) ; / 標(biāo)準(zhǔn)的設(shè)備請求,在USB配置

27、設(shè)備時(shí)用到的各個(gè)位下面都有定義,具體見USB標(biāo)準(zhǔn)請求 struct byte bmRequestType; /設(shè)置數(shù)據(jù)的格式(標(biāo)準(zhǔn)的數(shù)據(jù)請求) byte bRequest; /一個(gè)字節(jié)用來指定請求 word wValue; /主機(jī)用來傳輸信息給設(shè)備。每一個(gè)請求都可以自己定義這兩個(gè)字節(jié)的意義 word wIndex; /主機(jī)用來傳送信息給設(shè)備一般用來傳送索引值或偏移 word wLength; /包含數(shù)據(jù)階段中接下來的數(shù)據(jù)字節(jié)的數(shù)目,如果是主機(jī)設(shè)備的傳輸,表示主機(jī)設(shè)備傳輸?shù)恼_字節(jié)數(shù)目 /如果是設(shè)備到主機(jī)的傳輸,則是一個(gè)最大值,如果是0,表示沒有數(shù)據(jù)階段 ; struct unsigned :8

28、; unsigned :8; WORD W_Value; WORD W_Index; WORD W_Length; ; struct unsigned Recipient:5; /設(shè)備 接口 端點(diǎn) 其他,接收者定義,一般是00設(shè)備接收 unsigned RequestType:2; /是否是標(biāo)準(zhǔn)請求的標(biāo)志 unsigned DataDir:1; /標(biāo)志 主機(jī)到設(shè)備還是設(shè)備到主機(jī) unsigned :8; byte bFeature; /DEVICE_REMOTE_WAKEUP,ENDPOINT_HALT unsigned :8; unsigned :8; unsigned :8; unsign

29、ed :8; unsigned :8; ; struct unsigned :8; unsigned :8; byte bDscIndex; /描述符值 byte bDscType; /Device,Configuration,String,驅(qū)動,配置,字符串,描述符類型 word wLangID; /Language ID,語言ID號 unsigned :8; unsigned :8; ; struct unsigned :8; unsigned :8; BYTE bDevADR; /Device Address 0-127,驅(qū)動地址 byte bDevADRH; /Must equal z

30、ero 必須=0 unsigned :8; unsigned :8; unsigned :8; unsigned :8; ; struct unsigned :8; unsigned :8; byte bCfgValue; /Configuration Value 0-255,配置取值范圍 byte bCfgRSD; /Must equal zero (Reserved) unsigned :8; unsigned :8; unsigned :8; unsigned :8; ; struct unsigned :8; unsigned :8; byte bAltID; /Alternate S

31、etting Value 0-255 byte bAltID_H; /Must equal zero byte bIntfID; /Interface Number Value 0-255接口值 byte bIntfID_H; /Must equal zero unsigned :8; unsigned :8; ; struct unsigned :8; unsigned :8; unsigned :8; unsigned :8; byte bEPID; /Endpoint ID (Number & Direction) byte bEPID_H; /Must equal zero unsig

32、ned :8; unsigned :8; ; struct unsigned :8; unsigned :8; unsigned :8; unsigned :8; unsigned EPNum:4; /Endpoint Number 0-15 unsigned :3; unsigned EPDir:1; /Endpoint Direction: 0-OUT, 1-IN unsigned :8; unsigned :8; unsigned :8; ; /標(biāo)準(zhǔn)設(shè)備請求的數(shù)據(jù)定義 CTRL_TRF_SETUP;/-USB數(shù)據(jù)類型定義typedef union _CTRL_TRF_DATA /共8個(gè)字

33、節(jié) /* Array for indirect addressing */ struct byte _byteEP0_BUFF_SIZE; ; / 8個(gè)字節(jié)的間接地址 */ struct byte _byte0; byte _byte1; byte _byte2; byte _byte3; byte _byte4; byte _byte5; byte _byte6; byte _byte7; ; struct word _word0; word _word1; word _word2; word _word3; ; CTRL_TRF_DATA;/*USB 描述符定義*/* USB 描述符定義*

34、 * */1.USB設(shè)備描述符類型定義typedef struct _USB_DEV_DSC byte bLength; /描述符大小 byte bDscType; /常數(shù) 0x01 word bcdUSB; /USB 版本號碼 1.0是0100H,1.1是0110H,2.0是0200H byte bDevCls; /類別碼 byte bDevSubCls; /子類別 byte bDevProtocol; /協(xié)議碼 byte bMaxPktSize0; /端點(diǎn)0的最大信息包大小 word idVendor; /廠商ID word idProduct; /產(chǎn)品ID word bcdDevice;

35、 /設(shè)備版本號碼 (BCD) byte iMFR; /制造者的字符串描述符的索引值 byte iProduct; /產(chǎn)品的字符串描述符的索引值 byte iSerialNum; /序號的字符串描述符的索引值 byte bNumCfg; /可能配置的數(shù)目 USB_DEV_DSC;/ end USB_DEV_DSC/2.USB配置描述符定義/每一個(gè)配置描述符都有其附屬屬性,包括一個(gè)或多個(gè)接口描述符,以及選擇性的端點(diǎn)描述符typedef struct _USB_CFG_DSC byte bLength; / 描述符大小 byte bDscType; / 常數(shù) 0x02 word wTotalLeng

36、th; / 此配置符傳回的所有數(shù)據(jù)大小(字節(jié)) byte bNumIntf; / 此配置支持的接口數(shù)目 byte bCfgValue; / SET_Configuration與Get_Configuration請求的標(biāo)識符。 / 如果SET_Configurationq請求值為0,設(shè)備會進(jìn)入無配置狀態(tài) byte iCfg; / 此配置的字符串描述符 byte bmAttributes; / 位圖自身電源/總線電源以及遠(yuǎn)程喚醒設(shè)置 byte bMaxPower; / 需要總線電源,表示法為(最大毫安/2) USB_CFG_DSC;/ end USB_CFG_DSC/3.USB接口描述符定義typ

37、edef struct _USB_INTF_DSC byte bLength; / 描述符大小 byte bDscType; / 常數(shù)0x04 byte bIntfNum; / 識別此接口的數(shù)字 byte bAltSetting; / 用來選擇一個(gè)替代設(shè)置的數(shù)值 byte bNumEPs; / 除了端點(diǎn)0外,支持的端點(diǎn)數(shù)目 byte bIntfCls; / 類別碼 byte bIntfSubCls; / 子類別碼 byte bIntfProtocol; / 協(xié)議碼 byte iIntf; / 此接口的字符串描述符的索引值 USB_INTF_DSC;/4.USB 端點(diǎn)描述符typedef str

38、uct _USB_EP_DSC byte bLength; / 描述符大小 byte bDscType; / 常數(shù)0x05 byte bEPAdr; / 端點(diǎn)數(shù)目與方向 byte bmAttributes; / 支持的傳輸類型 word wMaxPktSize; / 支持的最大信息包大小 byte bInterval; / 最大延遲/輪詢時(shí)距/NAK速率 USB_EP_DSC;/5.HID/由于HID類別描述符最后有重復(fù)字節(jié),最后部分可選(在使用多個(gè)描述符的設(shè)備)typedef struct _USB_HID_HEADER byte bDescriptorType; word wDescriptorLength;USB_HID_HEADER;typedef struct _USB_HID_DSC byte bLength; byte bDscType; word bcdHID; byte bCountryCode; byte bNumDsc; USB_HID_HEADER header1; /此例只使用一個(gè) USB_HID_DSC;/這個(gè)是配置描述符定義(包含附屬描述符)#define CFG01 rom struct USB_CFG_DSC cd01; USB_INTF_DSC i00a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論