新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ATmega8515的USB-CAN適配器的實現

        基于ATmega8515的USB-CAN適配器的實現

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


        圖2  USB2CAN數據傳輸處理框圖

        2  的軟件設計

           軟件包括兩部分:中的固件和PC機內USB2CAN適配器的驅動軟件.

        2. 1  適配器固件編程
          良好的開發環境是開發單片機軟件質量和速度的保證.USB2CAN 適配器采用GNU AVR 的最新版本WinAVR 編程,它能夠對所有AVR 單片機用C 或C + + 語言進行編程,且能在WIN2000 下運行.

          USB-CAN 適配器固件設計成完全的中斷驅動,當處理前臺任務時,USB 和CAN 的傳輸可以在后臺同時進行,大大提高了實際傳輸效率,編程和調試亦很方便. 后臺的中斷處理子程序通過設置事件標志和數據緩沖區來實現和前臺主程序之間的數據交換(如圖2 所示) .當檢測到CAN 控制器的狀態寄存器而得知接收緩沖CANRX-Buffer有數據,就會把數據傳到USB 控制器空閑發送緩沖區TXFIFO-1或TXFIFO-2中; 同樣, 當USB控制器的接收緩沖區RXFIFO-1或RXFIFO-2充滿數據時,ATmega8515就會把RXFIFO-1或RXFIFO-2的數據讀到內部一個連續的RAM空間,當CAN總線控制器發送緩沖區CAN-TX-Buffer 為空時,再把數據從RAM傳到CAN-TX-Buffer.

          USB -CAN適配器固件設計中采用乒乓緩存法提高實際傳輸速率. USBN9603有7個端點, 通常FIFO內的數據進行傳送或接收時每個端點對應一個管道,但是,兩個同方向傳輸數據的端點也可以利用一個管道,這樣可以有效地提高數據的傳輸率,因為當第一個端點的FIFO傳輸數據時,微處理器可以對第二個端點的FIFO進行數據讀或寫,反之亦然.

          USBN9603 在進行批量傳輸時,其實際傳輸率大約是512kb/s ,這往往是由于主機的控制器最大每幀數據包數量限制造成的,而并非USBN9603本身傳輸性能. 其它傳輸方式,如中斷傳輸、同步傳輸、控制傳輸的最高傳輸速率為1.5Mb/s. 采用乒乓緩存法后,可使傳輸速率提高一倍,從而使傳輸速率為1Mb/s 的CAN總線控制器沒有等待接收數據和發送數據空間的情況,解決了數據傳輸中的“瓶頸”問題.在USB-CAN 適配器中,端點EP1 (TXFIFO-1) 和EP3 (TXFIFO-2)發送數據到主機,EP2(RXFIFO-1) 和EP4(RXFIFO-2)從主機接收數據(如圖2 所示) ,其FIFO中的數據長度都是64字節. 在主機進行枚舉過程中,當節點接收到配置設備請求,固件程序就可以把EP1/EP3和EP2/EP4分別分配到同一個端點地址.USBN9603 內置有一個優先級表,如果多個端點編程指定為同一個端點號,具有較低號的端點(利用TOGGL 標志區分高低)首先得到響應和數據.

        2. 1. 1  數據上傳
          當主機發送一個IN 令牌給USB-CAN 適配器,適配器就開始向PC機發送數據. 圖3 為數據上傳的流程圖. 通過兩個標志UPDATE1 和UPDATE2 把主程序和Tx 中斷子程序緊密聯系起來,體現了前臺后臺程序設計思想. 當UPDATE1 清0 ,上傳數據完畢;當置1 時,開始傳輸下一批數據. 圖4為EP1的Tx中斷子程序流程圖,UPDATE1 在該中斷子程序置1.UPDATE2的運行和UPDATE1相似.

        圖3  主程序處理上傳送FIFO 數據流程

        圖4  EP1 的Tx 中斷子程序流程


        2. 1. 2  數據下傳
          當主機發送一個OUT令牌給USB2CAN適配器,適配器就開始接收PC發送的數據,并將其暫存在ATmega8515 的RAM中,然后傳到CAN總線控制器的數據發送緩沖區CAN.TX.Buffer. 圖5 為EP2的Rx中斷子程序流程,顯示了PC的數據如何傳到CAN總線的發送緩沖區. 端點EP4 的Rx 中斷子程序流程和EP2的相似.


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 友谊县| 惠东县| 温宿县| 虹口区| 饶河县| 老河口市| 连南| 大宁县| 平江县| 尼勒克县| 松潘县| 河北区| 高阳县| 永吉县| 武宁县| 连平县| 大悟县| 册亨县| 宜宾县| 驻马店市| 邵东县| 集安市| 收藏| 乌鲁木齐县| 南皮县| 西吉县| 仁布县| 渝中区| 桐乡市| 河北省| 西昌市| 东海县| 永胜县| 临安市| 鄂州市| 桑日县| 山阴县| 宿州市| 临高县| 墨竹工卡县| 舒兰市|