久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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 下一頁

評論


技術專區

關閉