基于ARM控制器LPC2294的CAN/PCI智能通信卡設(shè)計(jì)
(2) 帶CAN接口的微控制器實(shí)現(xiàn)
該方法具有代表性的有飛利浦公司的ARM芯片LPC2294,它集成有4路片上CAN總線(xiàn)控制器,能很方便地實(shí)現(xiàn)多路CAN總線(xiàn)接口,減小系統(tǒng)規(guī)模,提高系統(tǒng)穩(wěn)定性。
比較上述兩種方法,在傳統(tǒng)的SJA1000中,接收過(guò)濾只能滿(mǎn)足一些規(guī)律性較高的ID篩選過(guò)濾,或?qū)€(gè)數(shù)較少的ID (一般小于10~15個(gè))進(jìn)行任意篩選過(guò)濾,而難以實(shí)現(xiàn)更復(fù)雜的任意ID進(jìn)行篩選過(guò)濾,這無(wú)疑增加了系統(tǒng)軟件設(shè)計(jì)及運(yùn)行負(fù)擔(dān)。
而第二種設(shè)計(jì)方法相對(duì)較為簡(jiǎn)便。由于LPC2294微控制器中為所有CAN控制器提供了全局的接收標(biāo)識(shí)符查詢(xún)功能,因而能容易地設(shè)計(jì)較復(fù)雜的ID接收過(guò)濾,其工作的重點(diǎn)主要在ARM芯片的軟件設(shè)計(jì)上。本文采用第二種方法來(lái)實(shí)現(xiàn)CAN總線(xiàn)接口,并采用PCA82C250作為CAN總線(xiàn)驅(qū)動(dòng)器,同時(shí)將6N137連入CAN控制器和CAN驅(qū)動(dòng)器之間以降低CAN總線(xiàn)對(duì)網(wǎng)關(guān)卡的電磁干擾。圖3所示是LPC2294中一個(gè)CAN接口的連接圖,其它接口與之類(lèi)似。
1.3 微控制器與PCI9030之間的硬件接口設(shè)計(jì)
微控制器與PCI9030之間的硬件設(shè)計(jì)是該通信卡的核心控制部分。本設(shè)計(jì)采用ALTERA公司的FPGA EPlC6來(lái)實(shí)現(xiàn)微控制器與PCI9030之間的接口。EPlC6是ALTERA公司的一款FPGA芯片,它內(nèi)部集成了20塊128×36 bits的RAM模塊,可以方便地將它編程為所需要的“雙口RAM”,然后將上行數(shù)據(jù)(CAN節(jié)點(diǎn)發(fā)往PC機(jī)的數(shù)據(jù))和下行數(shù)據(jù)(PC機(jī)發(fā)往CAN節(jié)點(diǎn)的數(shù)據(jù))通過(guò)該“雙口RAM”緩存轉(zhuǎn)發(fā)。由于EPlC6擁有豐富的I/O口,故可靈活選擇數(shù)據(jù)格式(32位/16位/8位)以及傳輸方法,本文采用16位復(fù)用傳輸模式。
EPlC6還要編程實(shí)現(xiàn)PCI9030與ARM之間的邏輯控制時(shí)序轉(zhuǎn)換。由于PCI9030與ARM的控制信號(hào)不完全一致,所以需要進(jìn)行邏輯控制時(shí)序轉(zhuǎn)換。同時(shí),本文PCI9030的局部總線(xiàn)一側(cè)采用的是地址/數(shù)據(jù)復(fù)用模式,而ARM控制器采用的是非復(fù)用模式,因此也需要EPlC6進(jìn)行模式轉(zhuǎn)換:在PCI9030的地址周期內(nèi)可利用LALE將16位地址鎖存到EPlC6內(nèi)部寄存器,等到PCI9030的數(shù)據(jù)周期來(lái)臨時(shí),再與數(shù)據(jù)一起送到ARM的地址口與數(shù)據(jù)口上,以方便ARM取用。
2 軟件設(shè)計(jì)
2.1 通信卡軟件設(shè)計(jì)
通信卡上的軟件主要指的是ARM控制器上的軟件程序。本文選用ARM控制器LPC2294來(lái)實(shí)現(xiàn)智能數(shù)據(jù)傳輸路徑選擇。LPC2294是通信卡的控制核心。它集成有4路CAN控制器,每個(gè)CAN控制器都與獨(dú)立CAN控制器SJA1000有著相似的寄存器結(jié)構(gòu),它只是對(duì)器件寄存器訪(fǎng)問(wèn)由原來(lái)的8bit字節(jié)訪(fǎng)問(wèn)轉(zhuǎn)變?yōu)榱?2 bit的雙字訪(fǎng)問(wèn)。LPC2294可實(shí)現(xiàn)CAN網(wǎng)段與上位機(jī)之間的數(shù)據(jù)傳輸控制(包括上行數(shù)據(jù)傳輸和下行數(shù)據(jù)傳輸)以及不同CAN網(wǎng)段間的數(shù)據(jù)傳輸控制(平行數(shù)據(jù)傳輸)。
LPC2294為所有CAN控制器提供了全局接收標(biāo)識(shí)符查詢(xún)功能。它包含一個(gè)512×32 (2 k字節(jié))的RAM,可通過(guò)軟件處理在RAM中存放1~5個(gè)標(biāo)識(shí)符表格。整個(gè)接收濾波RAM可容納1024個(gè)標(biāo)準(zhǔn)標(biāo)識(shí)符或512個(gè)擴(kuò)展標(biāo)識(shí)符,或兩種類(lèi)型的混合標(biāo)識(shí)符。由于允許的表格范圍有2 k字節(jié),故能容易地滿(mǎn)足復(fù)雜的ID接收過(guò)濾要求。LPC2294在FullCAN模式下能自動(dòng)接收并選定網(wǎng)段的標(biāo)準(zhǔn)幀,但本文不采用FullCAN模式。
若在EPlC6的“雙口RAM”中設(shè)置一個(gè)狀態(tài)與控制寄存器組(SOR),那么,上位機(jī)便可通過(guò)訪(fǎng)問(wèn)該寄存器組查詢(xún)通信卡的運(yùn)行狀態(tài)。為了有效管理數(shù)據(jù)傳輸,防止傳輸過(guò)程中的數(shù)據(jù)丟失,本設(shè)計(jì)在ARM內(nèi)部的靜態(tài)RAM區(qū)開(kāi)辟了一個(gè)全局?jǐn)?shù)據(jù)收發(fā)緩存區(qū)(GRTB),其示意圖如圖4所示。
圖4中,對(duì)于標(biāo)準(zhǔn)幀來(lái)說(shuō),它只有11位標(biāo)識(shí)符,因此,圖中的標(biāo)識(shí)符字節(jié)3和4保留不用。而幀格式用來(lái)區(qū)別此幀是標(biāo)準(zhǔn)幀(0)還是擴(kuò)展幀(1)。當(dāng)RTR為1時(shí),表示此幀是遠(yuǎn)程幀。圖中的源段號(hào)和目的段號(hào)用于表明此幀來(lái)自哪個(gè)網(wǎng)段以及將要送往哪個(gè)網(wǎng)段(此處將上位機(jī)也作為其中一段來(lái)處理)。DLC表明傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)目。
評(píng)論