PC機并口與現(xiàn)場總線CAN通訊的實現(xiàn)
本文采用pc機并行端口epp(enhanced parallel port)協(xié)議在windows98系統(tǒng)下通過對并口操作完成對can控制器sja1000的控制,從而與同一網(wǎng)絡(luò)的其他can節(jié)點的通訊。
1轉(zhuǎn)換端口電路框圖
由于sja1000的訪問時間在40ns以內(nèi),所以pc在訪問sja1000時完全可以不用插入等待周期。/wait可以由/addrstrobe和/datastrobe信號經(jīng)過一個與非門后產(chǎn)生(圖1)。由于sja1000的a l e時下降沿鎖存地址信號,所以將/addrstrobe反相后與ale相連。在epp的數(shù)據(jù)讀/寫周期時,sja1000的/rd和/wr控制信號有效,而在地址讀/寫周期時無效。sja1000的/reset腳與并行端口的/reset腳相連,由pc機向sja1000提供復位信號,如果并行端口的/reset腳不用做s j a1000的復位,則可以用作外設(shè)16位地址高低字節(jié)的選通信號。sja1000的片選/cs腳接地,始終處于選通狀態(tài)。
2epp端口寄存器

(表2)

上表中irqen:中斷使能位(1有效);astrb:地址選通位(0有效);init:初始化(1有效);dstrb:數(shù)據(jù)選通位(0有效);write:讀/寫狀態(tài)位(0:寫,1:讀)。讀取接口狀態(tài)和控制接口都只須對相應(yīng)的端口寄存器進行操作。以下為windows環(huán)境下采用vc++嵌入?yún)R編的收和發(fā)的子程序(基地址為378h)。

3對can節(jié)點sja1000的操作
在進行通訊之前應(yīng)先對sja1000進行初始化,其初始化步驟依次為:a)檢測硬件連接是否正確,b)進入復位狀態(tài),c)設(shè)置時鐘分頻寄存器,d)設(shè)置輸出控制寄存器,e)設(shè)置通訊波特率,f)設(shè)置代碼驗收寄存器,g)設(shè)置代碼屏蔽寄存器,h)設(shè)置工作模式,i)設(shè)置中斷使能寄存器,j)退出復位狀態(tài)完成初始化。
通訊過程中can數(shù)據(jù)格式為:一幀can報文分為信息頭和信息內(nèi)容兩部分。前5個字節(jié)為信息頭部分(如下表地址16~20),其前29位(id0~id28)為標示符(4個字節(jié)),包含本信息包的目的地址。第5個字節(jié)是幀信息,ff為幀格式(0為標準幀,1為擴展幀格式),rtr為遠程幀發(fā)送請求(0表示發(fā)送數(shù)據(jù)幀,1表示發(fā)送遠程幀),x表示無關(guān)位,最后4位dlc是數(shù)據(jù)長度,即所發(fā)數(shù)據(jù)的實際字節(jié)數(shù)。其余8個字節(jié)是數(shù)據(jù)內(nèi)容部分,即為實際所發(fā)的數(shù)據(jù)。表3說明了can報文數(shù)據(jù)格式(擴展幀)。

4通訊實現(xiàn)過程
pc機采用visual c++建立對話框發(fā)送對象,采用主動發(fā)送方式,此時can網(wǎng)絡(luò)中一定要有接收方存在,否則sja1000將由于無應(yīng)答而一直處于發(fā)送狀態(tài)。接收數(shù)據(jù)則采用查尋方法(vc++采用工作線程方法很容易實現(xiàn))。以下為創(chuàng)建線程及線程執(zhí)行函數(shù)(在執(zhí)行函數(shù)體中以接收數(shù)據(jù)并輸出為例,不考慮can總線遠程幀請求,sja1000的基地址為0)。

5結(jié)束語
can總線以高抗干擾性,高速率,實時性強等優(yōu)點,被廣大顧客所青睞。本文介 紹了基于并口與can總線的轉(zhuǎn)換及通訊辦法,這些都是筆者在學習和實踐中得來,相信能對 從事相關(guān)工作的人員有一定的啟發(fā)。
評論