AVR單片機(jī)的通用USB接口模塊設(shè)計(jì)
發(fā)布時(shí)間:2008/8/8 0:00:00 訪問次數(shù):591
usb接口以其數(shù)據(jù)傳輸快、連接簡單、易于擴(kuò)展、支持熱插拔等特點(diǎn)已成為外設(shè)與pc通信的主要方式之一。隨著嵌入式系統(tǒng)的發(fā)展,嵌入式微處理器需增加通用的usb接口,以便實(shí)現(xiàn)與pc等usb主機(jī)系統(tǒng)的通信。針對這樣的需求,這里采用philips公司的usb接口器件pdiusbd12和atmel公司的avr系列單片機(jī)atmega8設(shè)計(jì)一種通用的usb接口模塊。該模塊可方便為各種嵌入式微處理器增加usb接口,從而實(shí)現(xiàn)與usb主機(jī)系統(tǒng)的高速通信。
2 系統(tǒng)硬件設(shè)計(jì)
該系統(tǒng)模塊的控制核心是avr高速單片機(jī)atmega8。avr單片機(jī)是新一代基于哈佛結(jié)構(gòu)的高速risc微控制器,具有速度快、價(jià)格低、可靠性高,i/o口線驅(qū)動能力強(qiáng)和片內(nèi)集成外設(shè)資源豐富等特點(diǎn),其內(nèi)部集成有可進(jìn)行isp下載編程的flash,eeprom、熔絲位和鎖定位。avr單片機(jī)的isp下載電纜制作簡單、成本低廉,還有免費(fèi)的下載軟件(例如ponyprog)支持。pdiusbd12是一款高性價(jià)比usb接口器件,完全符合usb1.l規(guī)范,易于與各種微處理器接口。
由于avr單片機(jī)具有高速性,可利用i/o端口線以軟件方式模擬pdiusbd12的時(shí)序,對其讀寫。這種方式可根據(jù)不同的微處理器速度靈活控制pdiusbd12的時(shí)序和地址,無需譯碼電路,從而簡化硬件設(shè)計(jì),降低成本。
由于atmega8片內(nèi)集成了uart,spi,i2c等接口,該接口模塊可利用這些接口與其他系統(tǒng)通信,使得該接口模塊成為通用的接口轉(zhuǎn)換器。
3 usb固件程序設(shè)計(jì)
本系統(tǒng)模塊的usb固件程序采用符合ansi c標(biāo)準(zhǔn)的gcc編譯器設(shè)計(jì),結(jié)合分層次的模塊化結(jié)構(gòu),可移植性強(qiáng),只需稍微修改硬件接口層即可將其移植到別的硬件平臺,可重復(fù)利用代碼。
usb固件程序設(shè)計(jì)是基于狀態(tài)機(jī)和標(biāo)準(zhǔn)的前后臺式程序架構(gòu)。整個(gè)同件程序的模塊化層次結(jié)構(gòu)如圖3所示。首先編寫硬件接口層hal.c和pdiusbd12器件的命令接口層,以供上層模塊調(diào)用。硬件接口層含有對pdiusbd12寫指令和讀寫數(shù)據(jù)的函數(shù),以供上層模塊調(diào)用。當(dāng)cpu不同時(shí),只需修改這些函數(shù)即可。由于cpu訪問pdius-bd12與普通存儲器一樣,只需根據(jù)硬件連接關(guān)系,在硬件抽象層中編寫對pdiusbd12寫指令、寫讀數(shù)據(jù)的函數(shù),供上層調(diào)用即可。實(shí)現(xiàn)pdiusbd12的命令接口層需調(diào)用硬件抽象層函數(shù),供上層模塊調(diào)用。再設(shè)計(jì)前后臺程序及標(biāo)準(zhǔn)設(shè)備請求程序模塊。
先利用c語言的共用體與位域定義一個(gè)全局狀態(tài)變量如下所示:
用戶可根據(jù)需要增加相應(yīng)的狀態(tài)標(biāo)志位,如uart,spi,i2c等接口收發(fā)數(shù)據(jù)完成標(biāo)志來滿足各種情況下的需要,然后定義一個(gè)結(jié)構(gòu)體變量用于存放usb的標(biāo)準(zhǔn)設(shè)備請求。
在前臺主程序中首先初始化全局變量和其他外圍設(shè)備,然后在while(1)的死循環(huán)中檢測狀態(tài)變量值有無變化,根據(jù)不同的狀態(tài)變量值調(diào)用下層的相應(yīng)函數(shù)完成相關(guān)操作。在后臺的中斷服務(wù)程序中,根據(jù)讀取的中斷寄存器值一方面將pdiusbd12接收到的數(shù)據(jù)移入cpu內(nèi)存或?qū)?nèi)存中的數(shù)據(jù)寫入pdiusbd12發(fā)送端點(diǎn)的緩沖區(qū);另一方面根據(jù)具體情況改變狀態(tài)變量值。
以下給出了前臺主程序的程序代碼:以下為后臺中斷服務(wù)程序:
當(dāng)前臺主程序檢測到狀態(tài)變量收到setup包事件bevent_flags.bits.setup_packet為1時(shí),該標(biāo)志位清零,再調(diào)用標(biāo)準(zhǔn)設(shè)備請求模塊stdreq.c的control_handler()函數(shù)完成對usb設(shè)備的枚舉。
設(shè)計(jì)標(biāo)準(zhǔn)設(shè)備請求模塊,首先利用結(jié)構(gòu)體定義usb枚舉所需的各種描述符,以供不同設(shè)備請求使用,其次編寫11個(gè)標(biāo)準(zhǔn)的設(shè)備請求處理函數(shù)。本層請求模塊重要函數(shù)是協(xié)議控制子程序control han-dler(),它根據(jù)controldata中標(biāo)識的不同usb設(shè)備請求類型調(diào)用11個(gè)函數(shù)中的任意一個(gè)。除此之外,本層請示求模塊還實(shí)現(xiàn)中斷服務(wù)程序調(diào)用的控制端點(diǎn)接收與發(fā)送中斷處理函數(shù)。
4 系統(tǒng)集成與應(yīng)用
4.1 pc機(jī)驅(qū)動程序與應(yīng)用程序的設(shè)計(jì)
利用該系統(tǒng)模塊實(shí)現(xiàn)pc機(jī)通訊,需對pc機(jī)編寫相關(guān)驅(qū)動程序和應(yīng)用程序,可利用driverstudio軟件生成該系統(tǒng)模塊在windows環(huán)境下的驅(qū)動程序。應(yīng)用程序的設(shè)計(jì)可使用諸如vb、vc、delphi以及應(yīng)用普遍的虛擬儀器軟件開發(fā)工具labview等軟件開發(fā)工具,直接調(diào)用驅(qū)動程序生成的動態(tài)鏈接庫中的api函數(shù),可根據(jù)
usb接口以其數(shù)據(jù)傳輸快、連接簡單、易于擴(kuò)展、支持熱插拔等特點(diǎn)已成為外設(shè)與pc通信的主要方式之一。隨著嵌入式系統(tǒng)的發(fā)展,嵌入式微處理器需增加通用的usb接口,以便實(shí)現(xiàn)與pc等usb主機(jī)系統(tǒng)的通信。針對這樣的需求,這里采用philips公司的usb接口器件pdiusbd12和atmel公司的avr系列單片機(jī)atmega8設(shè)計(jì)一種通用的usb接口模塊。該模塊可方便為各種嵌入式微處理器增加usb接口,從而實(shí)現(xiàn)與usb主機(jī)系統(tǒng)的高速通信。
2 系統(tǒng)硬件設(shè)計(jì)
該系統(tǒng)模塊的控制核心是avr高速單片機(jī)atmega8。avr單片機(jī)是新一代基于哈佛結(jié)構(gòu)的高速risc微控制器,具有速度快、價(jià)格低、可靠性高,i/o口線驅(qū)動能力強(qiáng)和片內(nèi)集成外設(shè)資源豐富等特點(diǎn),其內(nèi)部集成有可進(jìn)行isp下載編程的flash,eeprom、熔絲位和鎖定位。avr單片機(jī)的isp下載電纜制作簡單、成本低廉,還有免費(fèi)的下載軟件(例如ponyprog)支持。pdiusbd12是一款高性價(jià)比usb接口器件,完全符合usb1.l規(guī)范,易于與各種微處理器接口。
由于avr單片機(jī)具有高速性,可利用i/o端口線以軟件方式模擬pdiusbd12的時(shí)序,對其讀寫。這種方式可根據(jù)不同的微處理器速度靈活控制pdiusbd12的時(shí)序和地址,無需譯碼電路,從而簡化硬件設(shè)計(jì),降低成本。
由于atmega8片內(nèi)集成了uart,spi,i2c等接口,該接口模塊可利用這些接口與其他系統(tǒng)通信,使得該接口模塊成為通用的接口轉(zhuǎn)換器。
3 usb固件程序設(shè)計(jì)
本系統(tǒng)模塊的usb固件程序采用符合ansi c標(biāo)準(zhǔn)的gcc編譯器設(shè)計(jì),結(jié)合分層次的模塊化結(jié)構(gòu),可移植性強(qiáng),只需稍微修改硬件接口層即可將其移植到別的硬件平臺,可重復(fù)利用代碼。
usb固件程序設(shè)計(jì)是基于狀態(tài)機(jī)和標(biāo)準(zhǔn)的前后臺式程序架構(gòu)。整個(gè)同件程序的模塊化層次結(jié)構(gòu)如圖3所示。首先編寫硬件接口層hal.c和pdiusbd12器件的命令接口層,以供上層模塊調(diào)用。硬件接口層含有對pdiusbd12寫指令和讀寫數(shù)據(jù)的函數(shù),以供上層模塊調(diào)用。當(dāng)cpu不同時(shí),只需修改這些函數(shù)即可。由于cpu訪問pdius-bd12與普通存儲器一樣,只需根據(jù)硬件連接關(guān)系,在硬件抽象層中編寫對pdiusbd12寫指令、寫讀數(shù)據(jù)的函數(shù),供上層調(diào)用即可。實(shí)現(xiàn)pdiusbd12的命令接口層需調(diào)用硬件抽象層函數(shù),供上層模塊調(diào)用。再設(shè)計(jì)前后臺程序及標(biāo)準(zhǔn)設(shè)備請求程序模塊。
先利用c語言的共用體與位域定義一個(gè)全局狀態(tài)變量如下所示:
用戶可根據(jù)需要增加相應(yīng)的狀態(tài)標(biāo)志位,如uart,spi,i2c等接口收發(fā)數(shù)據(jù)完成標(biāo)志來滿足各種情況下的需要,然后定義一個(gè)結(jié)構(gòu)體變量用于存放usb的標(biāo)準(zhǔn)設(shè)備請求。
在前臺主程序中首先初始化全局變量和其他外圍設(shè)備,然后在while(1)的死循環(huán)中檢測狀態(tài)變量值有無變化,根據(jù)不同的狀態(tài)變量值調(diào)用下層的相應(yīng)函數(shù)完成相關(guān)操作。在后臺的中斷服務(wù)程序中,根據(jù)讀取的中斷寄存器值一方面將pdiusbd12接收到的數(shù)據(jù)移入cpu內(nèi)存或?qū)?nèi)存中的數(shù)據(jù)寫入pdiusbd12發(fā)送端點(diǎn)的緩沖區(qū);另一方面根據(jù)具體情況改變狀態(tài)變量值。
以下給出了前臺主程序的程序代碼:以下為后臺中斷服務(wù)程序:
當(dāng)前臺主程序檢測到狀態(tài)變量收到setup包事件bevent_flags.bits.setup_packet為1時(shí),該標(biāo)志位清零,再調(diào)用標(biāo)準(zhǔn)設(shè)備請求模塊stdreq.c的control_handler()函數(shù)完成對usb設(shè)備的枚舉。
設(shè)計(jì)標(biāo)準(zhǔn)設(shè)備請求模塊,首先利用結(jié)構(gòu)體定義usb枚舉所需的各種描述符,以供不同設(shè)備請求使用,其次編寫11個(gè)標(biāo)準(zhǔn)的設(shè)備請求處理函數(shù)。本層請求模塊重要函數(shù)是協(xié)議控制子程序control han-dler(),它根據(jù)controldata中標(biāo)識的不同usb設(shè)備請求類型調(diào)用11個(gè)函數(shù)中的任意一個(gè)。除此之外,本層請示求模塊還實(shí)現(xiàn)中斷服務(wù)程序調(diào)用的控制端點(diǎn)接收與發(fā)送中斷處理函數(shù)。
4 系統(tǒng)集成與應(yīng)用
4.1 pc機(jī)驅(qū)動程序與應(yīng)用程序的設(shè)計(jì)
利用該系統(tǒng)模塊實(shí)現(xiàn)pc機(jī)通訊,需對pc機(jī)編寫相關(guān)驅(qū)動程序和應(yīng)用程序,可利用driverstudio軟件生成該系統(tǒng)模塊在windows環(huán)境下的驅(qū)動程序。應(yīng)用程序的設(shè)計(jì)可使用諸如vb、vc、delphi以及應(yīng)用普遍的虛擬儀器軟件開發(fā)工具labview等軟件開發(fā)工具,直接調(diào)用驅(qū)動程序生成的動態(tài)鏈接庫中的api函數(shù),可根據(jù)
熱門點(diǎn)擊
- 周立功推出RSM系列隔離RS-485收發(fā)器芯
- 意法半導(dǎo)體發(fā)布全集成NFC系統(tǒng)芯片ST21N
- ST推出基于STM8內(nèi)核的STM8S系列8位
- 愛特梅爾AVR XMEGA為8位微控制器重新
- 美國微芯推出低成本8位PIC單片機(jī)
- HOLTEK新推出HT46RS03/HT46
- IDT推出基于CPRI的新型功能互連芯片解決
- 恩智浦發(fā)布全球最小的單芯片PCTV解決方案
- 基于單片機(jī)的TM卡水表控制系統(tǒng)設(shè)計(jì)
- 大容量串行E2PROMAT24C512及其應(yīng)
推薦技術(shù)資料
- 硬盤式MP3播放器終級改
- 一次偶然的機(jī)會我結(jié)識了NE0 2511,那是一個(gè)遠(yuǎn)方的... [詳細(xì)]
- 100A全集成電源模塊R
- Teseo-VIC6A GNSS車用精準(zhǔn)定位
- 高效先進(jìn)封裝工藝
- 模數(shù)轉(zhuǎn)換器 (Analog-to-Digit
- 集成模數(shù)轉(zhuǎn)換器(ADC)
- 128 通道20 位電流數(shù)字轉(zhuǎn)換器̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究