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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于WINCE的CAN總線設備驅動研究

          基于WINCE的CAN總線設備驅動研究

          作者: 時間:2016-12-20 來源:網絡 收藏

          SJA1000工作流程

          圖4 SJA1000工作流程

          4.2 WINCE下流接口驅動的接口函數實現

          WINCE下每個流接口驅動都必須實現一組標準的接口函數,以下僅重點介紹部分接口函數及其實現.

          a.DWORD CAN—Init(DWORD dwContext):設備管理器初始化CAN設備時調用這個函數.CAN—Init的實現原理是:初始化CAN控制器SJA1000,創(chuàng)建一個WINCE的系統(tǒng)中斷用來響應SJAl000的硬件中斷,創(chuàng)建中斷服務線程,此線程等待WINCE對應的系統(tǒng)中斷發(fā)生,然后響應中斷.圖5是CAN—Init函數的實現流程.

          CAN-Init函數的實現流程

          圖5 CAN-Init函數的實現流程

          b.WORD CAN—Open(DWORD hDeviceContext.DWORD AccessCode,DWORD ShareMode):打開一個CAN設備驅動程序時應用程序通過createFile()來調用此函數.

          c. BOOL CAN—IOControl (DWORD hopenContext,DWORD dwCode,PBYTE pBufIn, DWoRDDwLenIn, PBYTE pBufOut,DWoRD dwLenout,PDWoRD pdwActualOut):應用程序通過DeviceIocontrol()函數來調用此函數.

          d.DWORD CAN—Write(DWORD hOpenContext, LPCVOID DSourceBvtes, DWORD NumberOfBytes):當cAN設備驅動程序處于打開狀態(tài)時由應用程序通過writeFile()來調用這個函數.

          e.中斷服務線程(Can Thread)的實現原理:硬件中斷后,觸發(fā)ISR(中斷服務例程),ISR只做部分處理工作(發(fā)送事件消息),IST(中斷服務線程)收到觸發(fā)消息后才開始工作.中斷服務線程Can-Thread的實現流程如圖6所示.

          中斷服務線程工作流程

          圖6中斷服務線程工作流程

          一個具體的流接口驅動程序跟注冊表部分是分不開的,因此代碼編制完成后,要建立一個can.reg文件保存到流接口驅動程序的目錄里.

          4.3應用程序對硬件設備的操作

          應用程序直接通過文件操作來訪問硬件設備,文件操作會自動調用系統(tǒng)的流接口驅動程序的函數.比如:文件操作的ReadFile函數會自動調用底層的Can-Read等函數.本研究完成了基于WINCE嵌入式車載網絡的CAN總線管理單元的設計,實現了CAN網絡的連接,并成功地運用到嵌入式車載網絡上,實踐證明這種實現方式具有良好的特性和一定的使用價值.


          上一頁 1 2 下一頁

          關鍵詞: CAN總線WINCE操作系統(tǒng)流接口驅

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();