USB數(shù)據(jù)通信接□模塊的程序設(shè)計
發(fā)布時間:2008/11/25 0:00:00 訪問次數(shù):786
本文主要介紹pdiusbd12的固件編程問題。
usb通信固件設(shè)計的目標(biāo)為使pdiusbd12在usb上達(dá)到最大的傳輸速率。
1.總體規(guī)劃
cpu忙于處理許多設(shè)備控制和數(shù)據(jù)處理等任務(wù)。通信固件設(shè)計成完全的中斷驅(qū)動方式,當(dāng)cpu處理前臺任務(wù) 時,usb的傳輸可在后臺進行,這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時簡化了編程和調(diào)試。
后臺中斷服務(wù)程序和前臺主程序循環(huán)之間的數(shù)據(jù)交換通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實現(xiàn),例如,pdiusbd12 的批量輸出端點可使用循環(huán)的數(shù)據(jù)緩沖區(qū),當(dāng)diusbd12從usb收到一個數(shù)據(jù)包時,就對cpu產(chǎn)生一個中斷請求 ,cpu立即響應(yīng)中斷。
在中斷服務(wù)程序中固件將數(shù)據(jù)包從pdiusbd12內(nèi)部緩沖區(qū)移到循環(huán)數(shù)據(jù)緩沖區(qū),并在隨后清除diusbd12的內(nèi) 部緩沖區(qū),以使其能接收新的數(shù)據(jù)包,cpu可以繼續(xù)它當(dāng)前的前臺任務(wù)直到完成。
然后返回到主循環(huán),檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù),若有就對其進行處理,否則開始其他的前臺任務(wù) 。中斷服務(wù)程序與前臺主循環(huán)通過事件標(biāo)志eppflags和數(shù)據(jù)緩沖區(qū)conrol xfer進行通信,eppflags的定義 如下:
usb通信固件采用層次結(jié)構(gòu),如圖1所示
圖1 usb通信模塊層次圖
2 分別介紹各層子模塊的設(shè)計
。1)底層函數(shù)。
最底層為兩個面向硬件電路的函數(shù):outpodb(uchar addr, uchar dm)和inpofib(uchar addr) 用以 完成cpu和d12之間的數(shù)據(jù)傳輸,這是所li其他函數(shù)的基礎(chǔ),具體代碼如下:
。2)命令接口.
在d12的數(shù)據(jù)手冊中定義了一套壓縮了所有訪問pdiusbd12功能的命令集,命令接口部分就是將各命令用函 數(shù)的形式加以實現(xiàn),對應(yīng)的函數(shù)主要有:
以ushort readlnterruptregister(void)函數(shù)為例,代碼如下:
3 中斷服務(wù)程序
這部分代碼處理由pdiusbdl2產(chǎn)生的中斷,它將數(shù)據(jù)從pdiusbdi2的內(nèi)部fifo取回到cpu存儲器,并建立正 確的事件標(biāo)志以通知主循環(huán)程序進行處理。在isr函數(shù)的入口固件使用readlntemjptregister()來決定中 斷源,根據(jù)中斷源進入相應(yīng)的子程序進行處理。
中斷服務(wù)處理函數(shù)代碼如下
4.主端點操作
這部分代碼較多,包括各個端口的發(fā)送/接收函數(shù),端點1和主端點(端點2)的收發(fā)函數(shù)相對較簡單。
(2)主端點接收函數(shù)。
5.程序說明
在端點0的發(fā)送函數(shù)中,mcu首先需要通過讀di2的最后處理狀態(tài)寄存器,清0control_in中斷標(biāo)志位,接著 mcu在確認(rèn)di2處于傳輸模式后進行數(shù)據(jù)所的發(fā)送。由于d12的控件端點只有16bit,如果傳輸?shù)拈L度大于 16bit,mcu在傳輸階段就必須控制數(shù)據(jù)的數(shù)量,其流程如圖2所示。mcu必須檢查要發(fā)送到主機的當(dāng)前和剩余 的數(shù)據(jù)大小,如果剩下的字節(jié)數(shù)大于16,mcu將先發(fā)送16字節(jié)并減去參考長度(要求的長度)16。
當(dāng)下一個control_in標(biāo)志來時,mcu將確定剩余的字節(jié)是否為0,如果已經(jīng)沒有數(shù)據(jù)要發(fā)送,mcu需要發(fā)送一 個空的包以指示主機數(shù)據(jù)已發(fā)送完畢。
圖2 控制點發(fā)送函數(shù)流程
· 如果是一個有效的請求,mcu必須向控制輸出端點發(fā)送應(yīng)答建立命令,以重新使能下一個建立階段。接 下來,mcu需要證實控制傳輸是控制讀還是寫,這可以通過讀建立包中bmrequesttype的第8位來實現(xiàn)。
· 如果控制傳輸是一個控制讀類型,那就是說器件需要在下一個數(shù)據(jù)階段向主機發(fā)回數(shù)據(jù)包。mcu需要設(shè) 置一個標(biāo)志以指示usb設(shè)備現(xiàn)在正處于傳輸模式,即準(zhǔn)備在主機發(fā)送請求時發(fā)送數(shù)據(jù)。建立階段結(jié)束之后, 主機會執(zhí)行數(shù)據(jù)階段,d12等待接收control in包。
· 如果建立包為setesdescriptor()請求,那么建立包中的控制傳輸將指示此包為控制寫類型。在執(zhí)行 完setpescnptor請求過程后,mcu等待數(shù)據(jù)階段主機發(fā)送一個controlout標(biāo)志,mcu從d12緩沖區(qū)中減去數(shù)據(jù) 。流程現(xiàn)在處于controleout處理程序的右端,mcu首先確認(rèn)d12是否處于usb receive模式,然后mcu
本文主要介紹pdiusbd12的固件編程問題。
usb通信固件設(shè)計的目標(biāo)為使pdiusbd12在usb上達(dá)到最大的傳輸速率。
1.總體規(guī)劃
cpu忙于處理許多設(shè)備控制和數(shù)據(jù)處理等任務(wù)。通信固件設(shè)計成完全的中斷驅(qū)動方式,當(dāng)cpu處理前臺任務(wù) 時,usb的傳輸可在后臺進行,這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時簡化了編程和調(diào)試。
后臺中斷服務(wù)程序和前臺主程序循環(huán)之間的數(shù)據(jù)交換通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實現(xiàn),例如,pdiusbd12 的批量輸出端點可使用循環(huán)的數(shù)據(jù)緩沖區(qū),當(dāng)diusbd12從usb收到一個數(shù)據(jù)包時,就對cpu產(chǎn)生一個中斷請求 ,cpu立即響應(yīng)中斷。
在中斷服務(wù)程序中固件將數(shù)據(jù)包從pdiusbd12內(nèi)部緩沖區(qū)移到循環(huán)數(shù)據(jù)緩沖區(qū),并在隨后清除diusbd12的內(nèi) 部緩沖區(qū),以使其能接收新的數(shù)據(jù)包,cpu可以繼續(xù)它當(dāng)前的前臺任務(wù)直到完成。
然后返回到主循環(huán),檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù),若有就對其進行處理,否則開始其他的前臺任務(wù) 。中斷服務(wù)程序與前臺主循環(huán)通過事件標(biāo)志eppflags和數(shù)據(jù)緩沖區(qū)conrol xfer進行通信,eppflags的定義 如下:
usb通信固件采用層次結(jié)構(gòu),如圖1所示
圖1 usb通信模塊層次圖
2 分別介紹各層子模塊的設(shè)計
(1)底層函數(shù)。
最底層為兩個面向硬件電路的函數(shù):outpodb(uchar addr, uchar dm)和inpofib(uchar addr) 用以 完成cpu和d12之間的數(shù)據(jù)傳輸,這是所li其他函數(shù)的基礎(chǔ),具體代碼如下:
。2)命令接口.
在d12的數(shù)據(jù)手冊中定義了一套壓縮了所有訪問pdiusbd12功能的命令集,命令接口部分就是將各命令用函 數(shù)的形式加以實現(xiàn),對應(yīng)的函數(shù)主要有:
以ushort readlnterruptregister(void)函數(shù)為例,代碼如下:
3 中斷服務(wù)程序
這部分代碼處理由pdiusbdl2產(chǎn)生的中斷,它將數(shù)據(jù)從pdiusbdi2的內(nèi)部fifo取回到cpu存儲器,并建立正 確的事件標(biāo)志以通知主循環(huán)程序進行處理。在isr函數(shù)的入口固件使用readlntemjptregister()來決定中 斷源,根據(jù)中斷源進入相應(yīng)的子程序進行處理。
中斷服務(wù)處理函數(shù)代碼如下
4.主端點操作
這部分代碼較多,包括各個端口的發(fā)送/接收函數(shù),端點1和主端點(端點2)的收發(fā)函數(shù)相對較簡單。
。2)主端點接收函數(shù)。
5.程序說明
在端點0的發(fā)送函數(shù)中,mcu首先需要通過讀di2的最后處理狀態(tài)寄存器,清0control_in中斷標(biāo)志位,接著 mcu在確認(rèn)di2處于傳輸模式后進行數(shù)據(jù)所的發(fā)送。由于d12的控件端點只有16bit,如果傳輸?shù)拈L度大于 16bit,mcu在傳輸階段就必須控制數(shù)據(jù)的數(shù)量,其流程如圖2所示。mcu必須檢查要發(fā)送到主機的當(dāng)前和剩余 的數(shù)據(jù)大小,如果剩下的字節(jié)數(shù)大于16,mcu將先發(fā)送16字節(jié)并減去參考長度(要求的長度)16。
當(dāng)下一個control_in標(biāo)志來時,mcu將確定剩余的字節(jié)是否為0,如果已經(jīng)沒有數(shù)據(jù)要發(fā)送,mcu需要發(fā)送一 個空的包以指示主機數(shù)據(jù)已發(fā)送完畢。
圖2 控制點發(fā)送函數(shù)流程
· 如果是一個有效的請求,mcu必須向控制輸出端點發(fā)送應(yīng)答建立命令,以重新使能下一個建立階段。接 下來,mcu需要證實控制傳輸是控制讀還是寫,這可以通過讀建立包中bmrequesttype的第8位來實現(xiàn)。
· 如果控制傳輸是一個控制讀類型,那就是說器件需要在下一個數(shù)據(jù)階段向主機發(fā)回數(shù)據(jù)包。mcu需要設(shè) 置一個標(biāo)志以指示usb設(shè)備現(xiàn)在正處于傳輸模式,即準(zhǔn)備在主機發(fā)送請求時發(fā)送數(shù)據(jù)。建立階段結(jié)束之后, 主機會執(zhí)行數(shù)據(jù)階段,d12等待接收control in包。
· 如果建立包為setesdescriptor()請求,那么建立包中的控制傳輸將指示此包為控制寫類型。在執(zhí)行 完setpescnptor請求過程后,mcu等待數(shù)據(jù)階段主機發(fā)送一個controlout標(biāo)志,mcu從d12緩沖區(qū)中減去數(shù)據(jù) 。流程現(xiàn)在處于controleout處理程序的右端,mcu首先確認(rèn)d12是否處于usb receive模式,然后mcu
熱門點擊
- PWM信號發(fā)生模塊的設(shè)計思路
- 交流電壓測量模塊的設(shè)計思路
- 多功能波形信號發(fā)生模塊設(shè)計的元器件選型
- USB數(shù)據(jù)通信接□模塊的程序設(shè)計
- 頻率濕測模塊的設(shè)計思路
- 交流電壓測量模塊的程序設(shè)計
- 正弦信號發(fā)生模塊的電路設(shè)計
- 多功能波形信號發(fā)生模塊電路設(shè)計
- PWM信號發(fā)生模塊的程序設(shè)計
- 正弦信號發(fā)生模塊的程序設(shè)計
推薦技術(shù)資料
- DS2202型示波器試用
- 說起數(shù)字示波器,普源算是國內(nèi)的老牌子了,F(xiàn)QP8N60... [詳細(xì)]
- 電源管理 IC (PMIC)&
- I2C 接口和 PmBUS 以及 OTP/M
- MOSFET 和柵極驅(qū)動器單
- 數(shù)字恒定導(dǎo)通時間控制模式(CO
- Power Management Buck/
- 反激變換器傳導(dǎo)和輻射電磁干擾分析和抑制技術(shù)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究