新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 32 位ARM 嵌入式系統擴展USB 接口設計

        32 位ARM 嵌入式系統擴展USB 接口設計

        作者: 時間:2010-04-08 來源:網絡 收藏

        采用PDID12 標準組件與S3C44B0X,減小了開發的時間、風險以及費用,是最快捷、最經濟的方法實現的解決方案之一。PDIUSBD12與S3C44B0X 7處理器的電路圖見圖2。因7用存儲器影射方法I/O,一般按16bit方式尋址,所以U2的A0連到U1的Addr1引腳, 片選信號nGCS1的基地址是0x0200_0000。

        本文引用地址:http://www.104case.com/article/151956.htm

        3 ARM 端USB 設備程序
        設備端程序主要完成:ARM BIOS 和ucLinux 的加載、啟動通信進程、USB 控制器初始化、響應主控制器標準PnP 及其他命令、建立USB 端點(End point)邏輯通道、數據傳輸操作等功能,圖3 是基于ARM 的USB 設備與PC 間音頻通信的程序功能結構圖。

        操作USB 芯片的函數的宏定義為:
        typedef unsigned short int U16 ;
        #define pD12_CMD ( ( U16 *) 0x02000002 ) //指向D12 命令寄存器指針
        #define pD12_DAT ( ( U16 *) 0x02000000 ) //指向D12 數據寄存器指針
        #define D12WriteCmd( data ) (*p D12_CMD = (U16)(data) 0xff )
        #define D12WriteData( data ) (* pD12_DAT = (U16)(data) 0xff )
        #define D12ReadData() (* pD12_DAT 0xff )

        4 音頻碼流USB 設備驅動程序
        Windows2000 中各種USB 設備客戶驅動程序結構框架基本相同,可以從Windows2000DDK 中獲得USB 設備驅動程序范例代碼,對范例代碼作少量修改就可以滿足特定功能需要。圖1 顯示了驅動程序各層間的數據傳遞關系,底層USB 主控制器驅動程序(USB Host Driver)由操作提供支持,設備驅動程序只需要對USB Host Driver 上傳的I/O 數據包IRP 作出響應,并把要輸出數據以IRP 形式下傳給USB Host Driver 即可。
        在ISO(實時型)模式下傳輸音頻碼流,USB 客戶程序除了WDM(Windows Driver Model)驅動常規處理外,必須計算好帶寬,并為驅動程序在非分頁存儲區內分配好環行緩沖區(Ringbuffer),以便USB 主控制器可以不間斷輸出實時數據。RingBuffer 的大小按下式
        計算:
        每幀字節數 × 每緩沖幀數 × 緩沖區數 ;
        每傳完一緩沖區,USB Host Driver 回調(CallBack)一次客戶驅動程序,USB 帶寬按每1ms 傳送1 幀數據來分配,要實現8kHz 采樣頻率、8bits 編碼的音頻PCM 碼流傳輸,幀數據包大小必須設為8Bytes,若設置4 個緩沖區交替工作,每緩沖區分20 幀傳送, 則RingBuffer 的大小為640Bytes,那么USB 主控制器每20ms 的頻率中斷回調一次客戶驅動程序是合適的。
        驅動程序通過IoSetCompletionRoutine()函數給每個IRP 設置回調函數入口地址,每完成一個IRP 緩沖區數據傳送操作,回調一次該地址指向的函數,以便把下一緩沖包數據壓入到IRP 棧,直到全部數據流傳送完畢或人為終止傳送。

        5 結束語
        USB 接口,大幅提升了32 位ARM 數據通信的吞吐能力,有即插即用特性和多種數據傳輸模式,方案適合于系統的多種應用。文章具體闡述了方案硬件、軟件的關鍵問題,并討論了如何分配USB 總線帶寬,實現恒速音頻PCM 碼流傳送,實驗結果表明該方案能流暢地接收Windows2000 通過USB 接口輸出話音編碼信號,方案可行,具有較高參考價值

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
        隔離器相關文章:隔離器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阳谷县| 财经| 洮南市| 偏关县| 元江| 文昌市| 永和县| 泸水县| 张家口市| 安岳县| 宜川县| 仙游县| 怀宁县| 镇平县| 彰化县| 紫阳县| 怀化市| 武川县| 南江县| 莲花县| 高清| 独山县| 渝中区| 诏安县| 绥棱县| 贺州市| 大连市| 东兰县| 乌海市| 铅山县| 乐山市| 临猗县| 隆安县| 广河县| 涞水县| 固阳县| 温州市| 炎陵县| 洛阳市| 宁化县| 郯城县|