新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 無線USB的設計與實現

        無線USB的設計與實現

        作者: 時間:2013-10-26 來源:網絡 收藏


        后臺D12中斷服務程序和nRF401中斷服務程序與前臺主循環程序之間的數據交換,通過事件標志和數據緩沖區來實現。后臺中斷服務程序由中斷觸發,通過標志位與主模塊通信。主模塊循環掃描各標志位,對相應的標志位做出處理。例如,nRF401 接受到有效數據后,送入串口觸發串口中斷,進入nRF401中斷服務程序,將數據接收后放入數據緩沖區,然后設置UART_DATA標志,退出子模塊。主模塊查詢到UART_DATA被置位,則調用 writendpoint()程序將數據發往PC。

        值得注意的是,nRF401在接受狀態下即使沒有數據接受,也會有隨機碼輸出。因此需要在所需傳輸的數據前加入標識頭,如55AAH。當檢測到從串口進入的數據為55AAH時,再開始有效數據的接受。

        對PC而言,傳輸模塊是它的一個USB外設,因此必須提供USB設備的驅動程序。驅動程序的設計采用WDM模型[5],使用DriverStudio 進行開發。DriverStudio是一款優秀的驅動程序開發軟件。啟動DriverStudio中DriverWizard,填寫USB設備的端點配置,便會自動生成驅動程序原代碼和相應的測試程序原代碼,只需稍做改動便可用VC6.0編譯運行[5]。驅動程序向用戶程序提供標準的IO接口:WriteFile ()、 ReadFile() 、DeviceIoControl ()。用戶程序調用相應的函數,即可實現對USB設備的訪問。下面的例子是實現向USB總線寫數據的功能。

        hFile = open_file(threadParam->pipe_name); //打開需要使用的端點

        ……

        bResult = WriteFile(hFile,

        threadParam->pcIoBuffer,

        //等待傳送的數據緩沖區地址

        threadParam->uiLength, //數據長度

        nBytes,

        NULL); //向該端點寫入數據
        if (bResult != TRUE) { //出錯處理

        DeviceIoControl(hFile, //復位該端點

        IOCTL_D12_RESET_PIPE,

        0, 0, 0, 0,

        nBytes,

        NULL);}

        編程過程中要注意串口波特率要一致,否則會造成接受數據錯誤。nRF401周圍的布線和天線的設計很有講究,一定要按照手冊的要求進行設計。

        參考文獻:

        [1] Universal Serial Bus Specification Revision 1.1. http:/
        /www.usb.org/developers/docs.html , 1998.

        [2] Philips Semiconductors PDIUSBD12 Specification. http://www.semiconductors.philips.com /, 1999.

        [3] Nordic 433Mhz Single Chip RF Transceiver nRF401 datasheet. http:// www.nvlsi.no/thenRF401.htm, 2000.

        [4] 徐愛鈞.單片機高級語言C51 Windows環境編程與應用[M].北京: 電子工業出版社, 2001.

        [5] KRULINSKI D J. Programming Microsoft Visual C++6. 0技術內幕[M].北京: 希望電子出版社,1999.

        [6]PDIUSBD12 datasheethttp://www.dzsc.com/datasheet/PDIUSBD12+_544412.html.


        [7]PCBdatasheethttp://www.dzsc.com/datasheet/PCB_1201640.html.


        [8]nRF401datasheethttp://www.dzsc.com/datasheet/nRF401_521026.html.


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 迭部县| 临泽县| 拜城县| 吉木乃县| 鹰潭市| 寻乌县| 邵阳县| 德化县| 长兴县| 昔阳县| 古交市| 牟定县| 海南省| 同江市| 丰原市| 黄山市| 聂荣县| 通辽市| 应城市| 荥经县| 体育| 苍溪县| 澎湖县| 页游| 黑龙江省| 大英县| 长顺县| 介休市| 安新县| 右玉县| 前郭尔| 黔南| 耿马| 宝鸡市| 孝昌县| 尚志市| 南投市| 鱼台县| 清涧县| 栖霞市| 石嘴山市|