<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于A(yíng)RM控制器LPC2294的CAN/PCI智能通信卡設計

基于A(yíng)RM控制器LPC2294的CAN/PCI智能通信卡設計

作者: 時(shí)間:2009-08-27 來(lái)源:網(wǎng)絡(luò ) 收藏

若在EPlC6的“雙口RAM”中設置一個(gè)狀態(tài)與控制寄存器組(SOR),那么,上位機便可通過(guò)訪(fǎng)問(wèn)該寄存器組查詢(xún)卡的運行狀態(tài)。為了有效管理數據傳輸,防止傳輸過(guò)程中的數據丟失,本內部的靜態(tài)RAM區開(kāi)辟了一個(gè)全局數據收發(fā)緩存區(GRTB),其示意圖如圖4所示。

圖4中,對于標準幀來(lái)說(shuō),它只有11位標識符,因此,圖中的標識符字節3和4保留不用。而幀格式用來(lái)區別此幀是標準幀(0)還是擴展幀(1)。當RTR為1時(shí),表示此幀是遠程幀。圖中的源段號和目的段號用于表明此幀來(lái)自哪個(gè)網(wǎng)段以及將要送往哪個(gè)網(wǎng)段(此處將上位機也作為其中一段來(lái)處理)。DLC表明傳輸的數據字節數目。

2.2 卡的運行流程

系統上電復位后,系統將首先運行初始化程序。的初始化主要是初始化全局接收和發(fā)送緩沖區以及清除狀態(tài)寄存器中的值等;PCI9030的初始化主要是從EEPROM中加載初始數據以進(jìn)行初始設置,初始化包括設置模式、總線(xiàn)時(shí)序、中斷使能、標識符表格,這些設置均可通過(guò)給芯片的內部寄存器賦值來(lái)實(shí)現。初始化成功之后,卡將進(jìn)行自檢,并在確定啟動(dòng)正常之后進(jìn)入工作狀態(tài)。這一部分的程序流程圖如圖5的A部分所示。

系統進(jìn)入工作狀態(tài)后(圖5中的B部分)將等待中斷產(chǎn)生,如有,則進(jìn)人相應的中斷服務(wù)程序。如果是數據傳輸,則轉入數據傳輸子程序,數據傳輸子程序主要包括3個(gè)部分:

(1) 下行數據傳輸

下行數據傳輸指的是上位機向網(wǎng)段發(fā)送數據。即上位機把數據寫(xiě)入到“雙口RAM”中以等待將數據取走。將上位機發(fā)來(lái)的數據暫時(shí)存放在全局數據收發(fā)緩存區(GRTB)中,然后檢查匹配的目的段是否有空閑的發(fā)送區(CANSR中的TBS位為1),若有則將數據分別寫(xiě)入每個(gè)網(wǎng)段的發(fā)送區并發(fā)送。如果匹配網(wǎng)段的3個(gè)發(fā)送緩沖器全為忙,則循環(huán)等待,直到有一個(gè)以上的發(fā)送緩沖器為空再進(jìn)行發(fā)送。

(2) 上行數據傳輸

上行數據傳輸指的是CAN網(wǎng)段向上位機發(fā)送數據。當程序檢測到某個(gè)網(wǎng)段X的CAN中斷/捕獲寄存器(CANICR)中的接收中斷位(RI)置位后,它將進(jìn)入接收中斷服務(wù)程序。此時(shí)程序將到標識符表格中查找匹配的標識符,CAN會(huì )在接收時(shí)自動(dòng)搜索接收濾波器的RAM中的表格并進(jìn)行匹配,只要找到匹配值則產(chǎn)生接收中斷并通知用戶(hù)保留信息,否則自動(dòng)放棄這一幀信息而不產(chǎn)生接收中斷,如果它只找到一個(gè)匹配值(源網(wǎng)段中),則說(shuō)明此數據是只傳輸給上位機的,此時(shí)程序會(huì )將接收到的數據信息按上面介紹的格式保存到全局數據收發(fā)緩沖區(GRTB),以等待LPC2294將其發(fā)送給EPlC6的“雙口RAM”,以便上位機讀取。

(3) 平行數據傳輸

當出現接收中斷時(shí),程序也會(huì )到標識符表格中查找匹配的標識符,如果找到一個(gè)以上的匹配值,則說(shuō)明還有其他網(wǎng)段需要這些數據。此時(shí)程序會(huì )將接收到的數據信息讀入到全局數據收發(fā)緩沖區(GRTB)中去,然后把數據發(fā)往匹配網(wǎng)段。

在調用相應的數據傳輸子程序后,程序將置標志位并返回。如果是其它一些中斷,則轉入相應的中斷服務(wù)程序。若沒(méi)有中斷產(chǎn)生,則檢查PC機是否有參數配置需要,最后進(jìn)行系統自檢。本系統會(huì )在系統閑暇時(shí)進(jìn)行自檢并上傳狀態(tài)報表,這樣可以使用戶(hù)隨時(shí)了解通信卡的工作情況,對于提高系統的工作可靠性以及出現故障時(shí)的查錯效率具有重要的意義。

2.3 上位機程序

中,上位機軟件設計程序主要包括通信卡底層驅動(dòng)程序和用戶(hù)服務(wù)程序。其設計框圖圖6所示。

通信卡底層驅動(dòng)程序的功能主要是配置CAN總線(xiàn)接口、收發(fā)CAN總線(xiàn)上的數據、對CAN總線(xiàn)進(jìn)行實(shí)時(shí)監測、執行用戶(hù)程序的收發(fā)命令等。CAN總線(xiàn)和PCI總線(xiàn)錯誤均采用中斷處理,并通過(guò)事件(Event)內核對象直接通知給用戶(hù)程序。

PCI的用戶(hù)服務(wù)程序則通過(guò)PCI通信程序與系統PCIDI (PCI device interface)進(jìn)行通信,并由系統完成PCI協(xié)議的處理與數據傳輸。用戶(hù)可以在設計好的上位機界面上方便的設定節點(diǎn)參數,查詢(xún)節點(diǎn)狀態(tài)信息。

3 結束語(yǔ)

本文設計的CAN/PCI通信卡采用功能強大的芯片LPC2294作為核心控制芯片,因此,該通信卡能夠同時(shí)處理4路CAN總線(xiàn)向上位機的數據傳輸。對于CAN網(wǎng)段之間的通信需求,本通信卡也能夠很好地滿(mǎn)足,并可使工業(yè)現場(chǎng)的CAN網(wǎng)絡(luò )組網(wǎng)更為簡(jiǎn)單。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>