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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于WINCE的CAN驅動的研究與實現(xiàn)

          基于WINCE的CAN驅動的研究與實現(xiàn)

          作者: 時間:2012-03-24 來源:網(wǎng)絡 收藏

          4 接口設計

          4.1軟硬件環(huán)境

          驅動的開發(fā)依托于北京昆侖通態(tài)公司現(xiàn)有的軟硬件平臺進行項目設計,具體平臺環(huán)境描述如下:

          ①硬件軟件平臺:北京昆侖通態(tài)公司的nTouch HMI TB33H和TD33H;嵌入式組態(tài)軟件:Mcgsce.exe。

          控制器:SJA1000。 SJA1000是PHILIPS公司早期控制器PCA82C200的替代品,功能更強。

          ③實時操作系統(tǒng):WINCE。WINCE是一個高效率的實時操作系統(tǒng),擁有多線程、多任務、確定的實時性和完全搶占式優(yōu)先級的環(huán)境,專門面向只有有限的資源的硬件系統(tǒng)。

          4.2 接口設計

          下面列舉了主要的用戶接口和外部接口,外部接口提供給父設備調用,完成CAN控制功能:

          (1)SvrGetCanID( )得到當前設置的Can ID,成功返回0,失敗返回-1。

          (2)SvrClearCanInBuff( )讀Can卡數(shù)據(jù)并清空Can卡輸入緩沖區(qū),成功返回0,失敗返回-1。

          (3)SvrWriteAndRead( )寫并且讀Can卡操作,發(fā)送一個消息包,然后接收指定長度數(shù)據(jù)。成功返回接收到的字節(jié)數(shù),失敗返回-1。

          (4)SvrRegisterID( ),注冊用戶ID。只有注冊了ID的用戶,父設備才會收到接收緩沖中。在子設備開發(fā)時,必須先注冊,才能做接收數(shù)據(jù)的操作。

          (5)SvrUnregisterID( )注銷用戶ID。

          用戶只需要學會使用上面的五個接口,就可以開發(fā)驅動了。

          SvrGetCanID接口可以得到父設備的地址ID。象串口操作一樣,發(fā)送前需要清空Can卡緩沖區(qū),需要調用SvrClearCanInBuff接口。發(fā)送子設備數(shù)據(jù)需要調用SvrWriteAndRead接口。先把目的子站ID放入dwID變量中,要發(fā)送的數(shù)據(jù)放入緩沖區(qū)buf中,通過dwLen 設置需要讀數(shù)據(jù)長度,通過dwDelayTime設置延時時間(單位為毫秒)。

          第一步:組態(tài)初始化設置,在_DLL_FUNC 的SvrGetDevInfo( )函數(shù)中,定義Can卡子設備驅動:devType = DEV_CHILD定義為子設備;devStyle = DEV_CAN定義為父設備。

          第二步:得到接口的指針。

          第三步:清空Can卡緩沖區(qū):調用SvrClearCanInBuff( )。

          第四步:發(fā)送子設備數(shù)據(jù)(發(fā)子設備數(shù)據(jù)可能需要父設備地址:調用SvrGetCanID),并得到它的返回:調用SvrWriteAndRead( )。

          第五步:解析上面的返回數(shù)據(jù),按照子設備協(xié)議繼續(xù)進行處理。

          4.3 工作方式

          驅動程序由三部分組成:在Windows內核中工作的windows設備驅動程序、中的CAN父設備、中的CAN子設備。

          windows設備驅動程序:由于使用多主通訊,通訊的發(fā)生時間是不可預知的,而且sja1000的通訊緩沖區(qū)有限(64字節(jié)),因此最好在中斷中處理通訊事務。建議將大部分工作在windows設備驅動程序中完成??梢越⒁粔K內存如:unsigned char can_data[60][2][64][4]。將所有收到的I/O模塊的寄存器數(shù)據(jù)解包后保存到該內存中,數(shù)組下標依次是模塊地址(實際應減4)、過程或參數(shù)、寄存器編號、寄存器數(shù)據(jù)字節(jié)序號。MCGS可以通過windows設備驅動程序直接用讀文件操作函數(shù)讀出寄存器值,用寫文件操作函數(shù)將可寫的參數(shù)寄存器值寫入windows設備驅動程序,windows設備驅動程序將其打包為命令數(shù)據(jù)幀發(fā)出。windows設備驅動程序還要完成對設備狀態(tài)的監(jiān)視,可使用一個60個元素的char數(shù)組來標識I/O設備(最大60個設備)的狀態(tài),值0為正常,其它為異常。當6秒內未收到模塊的節(jié)拍幀時,應將模塊對應的狀態(tài)置成1。MCGS應能通過windows設備驅動程序讀出設備狀態(tài)。

          MCGS中的CAN父設備:建議在MCGS中的CAN父設備中做改變通訊速率的工作。父設備通過windows設備驅動程序的ioctl函數(shù)來改變通訊速率。

          MCGS中的CAN子設備:建議為了簡化組態(tài)工作,為每一種不同類型的I/O模塊定制不同的CAN子設備。Can子設備包含了模塊名稱、生產廠家、版本等信息,其中最重要的是模塊的過程和參數(shù)寄存器的數(shù)量和數(shù)據(jù)類型。



          評論


          相關推薦

          技術專區(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); })();