該設計只要對usbconfig.h的內容進行配置,便可減小代碼量。其主要參數配置如表2所列。
一般情況下,每種USB設備都有一個PID和VID。其中VID是生產商的代號,PID是產品的代號,每個代號都是一個雙字節的整數。PID和VID不能隨意設置,它是由USB標準協會進行分配的(0x16C0、0x05DC),并在用戶配置文件中要遵循低位在前高位在后的原則。
2.3 USB數據傳輸的接口函數
(1)初始化函數
使用AVRUSB前,通常都要通過調用初始化函數usbInit ()來對USB端口進行初始化,調用該函數之前,考慮到該程序可能由其他程序段跳轉而來,因此,初始化之前,一般要將USB端口進行重新復位,復位只需要將D-和D+端口的電平拉低即可,利用如下語句便可實現上述功能:
DDRD=0x14;PORTD=0x00;
通常可在程序其他部分初始化完成后再調用函數usbInit (),最后再調用sei ()函數允許中斷。在main.c文件中的實現代碼如下:
(2)事件處理函數
用戶程序的主循環中需要定期調用USB事件處理函數usbPoll ()。USB事件處理函數usbPoll ()在沒有USB事件需要處理時將直接返回,否則將調用內部函數來進行相應的事件處理,最后再將數據傳遞到用戶接口函數中。通常的方法是:
一次USB通信的超時時間是50ms。所以,在編程時應注意其他事件不要占用太長的時間,以勉usbPoll ()函數不能及時執行。