<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌人式操作系統(tǒng)中USB雙向通信的設(shè)計(jì)與實(shí)現(xiàn)

          嵌人式操作系統(tǒng)中USB雙向通信的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2013-11-08 來(lái)源:網(wǎng)絡(luò) 收藏

            (3)嵌入式操作系統(tǒng)端應(yīng)用程序讀寫(xiě)過(guò)程

            讀函數(shù):void Read(unsigned char * ReadBuffer, DWORD size)函數(shù):

            功能:嵌入式系統(tǒng)應(yīng)用程序通過(guò)接口讀取上位機(jī)(PC)的數(shù)據(jù)。

            參數(shù)說(shuō)明:unsigned char*ReadBuffer存放數(shù)據(jù)的指針,DWORD size為要讀出的數(shù)據(jù)的尺寸(單位:B)。

            實(shí)現(xiàn)過(guò)程:首先判斷循環(huán)隊(duì)列是否為空,不為空則判斷自身信號(hào)量是否可用,若可用,則從隊(duì)列中讀取一字節(jié),每讀一字節(jié)后向USB任務(wù)中的BulkOutGet函數(shù)(直接讀取OUT的FIFO函數(shù))發(fā)出一個(gè)信號(hào)量,通知BulkOutGet函數(shù)隊(duì)列此時(shí)可以向OUT循環(huán)隊(duì)列中寫(xiě)入數(shù)據(jù),接著重新判斷,依次逐字節(jié)從OUT循環(huán)隊(duì)列中讀取數(shù)據(jù),直到讀完要求數(shù)據(jù)大小為止。當(dāng)循環(huán)隊(duì)列為空時(shí),首先發(fā)一個(gè)信號(hào)量,通知BulkOutGet函數(shù)應(yīng)向本隊(duì)列中寫(xiě)入數(shù)據(jù)了,然后復(fù)位自身信號(hào)量,接著調(diào)用等待信號(hào)量的函數(shù),直到信號(hào)量到時(shí)才接著讀取。若超時(shí),則向嵌入式操作系統(tǒng)發(fā)出超時(shí)通知,同時(shí)通過(guò)向控制包中寫(xiě)入超時(shí)狀態(tài)(0x01)來(lái)向上位機(jī)(PC)發(fā)出超時(shí)信號(hào)。

            寫(xiě)函數(shù):void WriteUSB(unsigned char*Write Buffer,DWORD size)函數(shù):

            功能:嵌入式系統(tǒng)應(yīng)用程序通過(guò)USB接口向上位機(jī)(PC)發(fā)送數(shù)據(jù)。

            參數(shù)說(shuō)明:unsigned char * WriteBuffer 存放數(shù)據(jù)的指針,DWORD size為要寫(xiě)入的數(shù)據(jù)的尺寸(單位:B)。

            實(shí)現(xiàn)過(guò)程:首先判斷循環(huán)隊(duì)列是否滿,不為滿則判斷自身信號(hào)量是否可用,若可用,則向隊(duì)列中寫(xiě)入一字節(jié),每寫(xiě)入一字節(jié)后向USB任務(wù)中的BulkInDataSet(直接寫(xiě)IN的FIFO函數(shù))函數(shù)發(fā)出一個(gè)信號(hào)量通知此函數(shù)此時(shí)可以從IN循環(huán)隊(duì)列中讀取數(shù)據(jù);然后接著重新判斷依次逐字節(jié)向IN循環(huán)隊(duì)列寫(xiě)入數(shù)據(jù),直到寫(xiě)完要求數(shù)據(jù)大小的數(shù)據(jù)為止。當(dāng)循環(huán)隊(duì)列滿時(shí),先發(fā)一個(gè)信號(hào)量通知BulkInDataSet函數(shù)應(yīng)從隊(duì)列中取走數(shù)據(jù),再?gòu)?fù)位自身信號(hào)量,接著調(diào)用等待信號(hào)量的函數(shù),直到信號(hào)量到時(shí)才接著寫(xiě)入,若超時(shí),則向嵌入式操作系統(tǒng)發(fā)出超時(shí)通知,同時(shí)通過(guò)向控制包中寫(xiě)入超時(shí)狀態(tài)(0x02)來(lái)向上位機(jī)(PC)發(fā)出超時(shí)信號(hào)。

            (4) USB塊傳輸函數(shù)

            USB塊傳輸函數(shù)是直接和USB硬件打交道的函數(shù),他們直接讀取IN和OUT傳輸通道的FIFO。voi d BulkInDataSet(void):其功能是IN傳輸過(guò)程,即從IN循環(huán)隊(duì)列中讀取數(shù)據(jù)并向IN FIFO中寫(xiě)入數(shù)據(jù),再對(duì)嵌入式操作系統(tǒng)信號(hào)量做相應(yīng)處理。

            void BulkOutDataGet(void)其功能是OUT傳輸過(guò)程,即從OUT FIFO中讀出數(shù)據(jù)并向OUT循環(huán)隊(duì)列中寫(xiě)入數(shù)據(jù),再對(duì)嵌入式操作系統(tǒng)信號(hào)量做相應(yīng)處理。

            (5) 嵌入式操作系統(tǒng)USB 任務(wù)調(diào)用函數(shù)

            void SystemInit(void):MCU初始化(微處理器各控制寄存器和狀態(tài)初始化過(guò)程)

            void USBInit(void):USB初始化(包括對(duì)循環(huán)隊(duì)列分配內(nèi)存等)

            void USBThread(void):USB運(yùn)行體(USB工作過(guò)程對(duì)USB中斷進(jìn)行處理主要包括USB塊傳輸函 數(shù)、USB中斷狀態(tài)分析處理等)。

            void FreeUSB(void):關(guān)閉USB和釋放由malloc函數(shù)分配的循環(huán)隊(duì)列所占內(nèi)存

            3.2上位機(jī)(PC)部分

            USB函數(shù)層(USBD及HCD)由Windows98提供,負(fù)責(zé)管理USB設(shè)備驅(qū)動(dòng)程序與USB控制器之間的通信、加載及卸載USB驅(qū)動(dòng)程序等。具體方法是通過(guò)DriverWorks軟件生成上位機(jī)(PC)機(jī)端USB驅(qū)動(dòng)程序模板[3],根據(jù)下位機(jī)的情況處理相應(yīng)的讀寫(xiě)部分,最后通過(guò)封裝基本API函數(shù)ReadFile,WriteFile來(lái)實(shí)現(xiàn)用戶態(tài)應(yīng)用程序與PC機(jī)USB驅(qū)動(dòng)程序的隔離,使PC的應(yīng)用層對(duì)USB的使用如同對(duì)串口的使用一樣方便,給用戶態(tài)應(yīng) 用程序提供有了3個(gè)接口函數(shù):

            unsigned char Read(void *pReadBuffer,DWORD Size):從下位機(jī)中讀取數(shù)據(jù)

            參數(shù)說(shuō)明:void *pBuffer:存放讀取數(shù)據(jù)的緩沖,DWORD Size:需讀取數(shù)據(jù)的大小(字節(jié)數(shù))

            返回值:

            0x10:驅(qū)動(dòng)出錯(cuò)(指Windows USB 驅(qū)動(dòng)程序出錯(cuò))

            0x20:內(nèi)存空間不足?

            0x30:請(qǐng)求的數(shù)據(jù)大小為0 B

            0x02:下位機(jī)發(fā)送軟超時(shí)

            0x08:讀取成功

            unsigned char Write(void *pWriteBuffer,DWORD Size):發(fā)送數(shù)據(jù)到下位機(jī)

            參數(shù)說(shuō)明:void *pBuffer; 存放寫(xiě)入數(shù)據(jù)的緩沖,DWORD Size; 需寫(xiě)入數(shù)據(jù)的大小(字節(jié)數(shù))。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();