如何設計LPC2131基于CPLD的CAN接口?
引 言
本文引用地址:http://dyxdggzs.com/article/201808/384962.htmPhilips公司的LPC213l是基于A(yíng)RM7TDMI-S的高性能32位RISC微控制器。
它具有ARM處理器的所有優(yōu)點(diǎn)——低功耗、高性能和較為豐富的片上資源,但LPC2131內部沒(méi)有集成CAN控制器,而無(wú)法利用CAN總線(xiàn)來(lái)進(jìn)行通信。為了使得LPC2131能夠利用CAN總線(xiàn)進(jìn)行通信,可以通過(guò)外部擴展來(lái)實(shí)現其功能。目前,比較普通的方法是在LPC2131的外部采用CAN控制器設計CAN總線(xiàn)接口。LPC2131與CAN控制器的接口電路如圖1所示。
這種方法中,LPC2131是通過(guò)GPIO口與CAN控制器SJA1000相連實(shí)現數據交互的。LPC2131通過(guò)寄存器IOSET/IOCLR來(lái)設定I/O口的高/低狀態(tài),雖然可以同時(shí)置位/拉低選定的引腳,但不能同時(shí)將某些口線(xiàn)拉高而將某些口線(xiàn)拉低。假定P0[15:8]初始狀態(tài)為0xa5,若將P0[15:8]同時(shí)變?yōu)?x5a,則必須通過(guò)IO0SET和IO0CLR兩次進(jìn)行。程序實(shí)現如下:
PINSEL0=0x00000000;
IO0DIR=0x0000FF00;
IO0SET=0x5a00;
IO0CLR=0xa500;
P0[15:8]上會(huì )出現0xFF的中間狀態(tài)。在高速通信系統中,這些中間狀態(tài)可能會(huì )造成損失。雖然可以通過(guò)IO0PIN進(jìn)行操作來(lái)消除這樣的中間狀態(tài),但是Philips公司不推薦這種做法,非必要時(shí)盡量不要使用。
CAN驅動(dòng)器接口芯片與LPC2131的串口接口電平上是相互匹配的,因此理論上可以將二者直接連接,采用串行通信方式實(shí)現。采用CAN總線(xiàn)通信,在長(cháng)距離通信時(shí),CAN總線(xiàn)兩端要加終端電阻。其作用是避免數據傳輸又反射回來(lái),產(chǎn)生反射波而使數據遭到破壞;同時(shí),能提高總線(xiàn)傳輸的抗干擾能力。理論上,在每個(gè)接收數據信號的中點(diǎn)進(jìn)行采樣時(shí),只要反射信號在開(kāi)始采樣時(shí)衰減到足夠低就可以不考慮匹配。通常判斷原則是根據數據速率和電纜長(cháng)度進(jìn)行匹配的,但這在實(shí)際中難以掌握,一般都是依據經(jīng)驗進(jìn)行設計。
可編程邏輯器件(PLD)是20世紀70年代在A(yíng)SIC設計的基礎上發(fā)展起來(lái)的一種新型邏輯器件。20世紀80年代末,美國Altera和Xilinx公司分別推出大規模和超大規模的復雜可編程邏輯器件(CPLD)及現場(chǎng)可編程邏輯門(mén)陣列器件(FPGA)。自從進(jìn)入20世紀90年代以來(lái),可編程邏輯器件得到了飛速發(fā)展,向高度集成、高速度和低價(jià)位方向不斷邁進(jìn);其應用領(lǐng)域不斷擴大,可用于狀態(tài)機、同步、譯碼、解碼、計數、總線(xiàn)接口和串并轉換等很多方面。使用CPLD可以提高系統集成度,降低噪聲,增強系統可靠性并降低成本。
CPLD技術(shù)的出現,為我們提供了一種有效的解決辦法:在CAN驅動(dòng)器接口與LPC2131之間接一塊CPLD,對CPLD進(jìn)行功能編程,使其負責串行總線(xiàn)的數據傳輸和防止CAN發(fā)送反射。
選擇Altera公司MAX3000A系列的型號為EPM3128ATC100-7(簡(jiǎn)稱(chēng)“EPM3128”)的CPLD芯片。此芯片兼容3.3 V和5 V的I/O 口。這樣,LPC2131、EPM3128和TJA1040在I/O電平上是相互匹配的。
1 EPM3128接口定義
EPM3128設置成雙向串行總線(xiàn)通道。其中,2個(gè)I/O口被定義為CANRXD(IN)、CANTXD(OUT),分別連接CAN收發(fā)器TJA1040的RXD和TXD端,構成CAN總線(xiàn)上接收數據和發(fā)送數據通道;另外2個(gè)I/O口被定義為ARMRXD(IN)、ARMTXD(OUT),分別連接LPC2131的RXD1和TXD1端,構成處理器的串口接收數據和發(fā)送數據通道。整個(gè)數據的傳輸過(guò)程中,并不改變串行數據的協(xié)議和格式,接口電路全為T(mén)TL電平,期問(wèn)不需要進(jìn)行任何的處理。通信數據的校驗、報錯均交給通信兩端的處理器完成。LPC2131、EPM3128和TJA1040的接口框圖如圖2所示。
2 EPM3128功能實(shí)現
采用功能塊編程實(shí)現EPM3128的數據傳輸和屏蔽CAN發(fā)送反射的內部邏輯。圖中txArm2、rxCan2定義為輸入變量,分別對應外部的ARMTXD、CANRXD引腳;txCan2、rxArm2定義為輸出變量,分別對應外部的CANTXD、ARMRXD引腳??偩€(xiàn)空閑時(shí),總線(xiàn)上的狀態(tài)一直保持為“1”,即txArm2、rxCan2、txCan2、rxArm2的值全部為“1”。當輸入總線(xiàn)收到一個(gè)狀態(tài)“0”信號時(shí),表示總線(xiàn)開(kāi)始傳輸數據。如果LPC2131要發(fā)送數據,則LPC2131先向ARMTXD端口發(fā)送一個(gè)“0”起始信號,占據總線(xiàn)并在下一個(gè)時(shí)鐘開(kāi)始發(fā)送數據幀;如果TJA1040從現場(chǎng)接收到新數據,則TJA1040先向CANRXD端口發(fā)送一個(gè)“0”起始信號,占據總線(xiàn)并在下一個(gè)時(shí)鐘開(kāi)始發(fā)送數據幀。以此,完成正常通信過(guò)程中數據位從串口到串口的傳輸。
程序屏蔽CAN發(fā)送反射,就是屏蔽CAN總線(xiàn)接收到的從輸出總線(xiàn)上反射的“0”信號,因為接口從高阻態(tài)被喚醒是靠一個(gè)“0”的起始信號。如果LPC2131正在發(fā)送數據,此時(shí)輸人端口A(yíng)RMTXD通過(guò)變量txArm2傳送一位為“0”的信號到變量txCan2,并從輸出口CANTXD送出。受總線(xiàn)輻射影響CANRXD輸入口會(huì )從CAN總線(xiàn)接收到一個(gè)“0”信號,并將“0”信號傳送給變量rxCan2,此時(shí)rXCan2收到的這個(gè)“0”信號是錯誤信號。經(jīng)邏輯判斷,程序將變量rxArm2維持為1,端口A(yíng)RMRXD仍保持高阻態(tài)“1”。反射的“0”信號雖然被接收到,但在CPLD內部被屏蔽處理掉。如果沒(méi)有屏蔽處理,那么這個(gè)錯誤的“0”信號將接收總線(xiàn)從高阻態(tài)喚醒,直接影響數據的通信。程序中D觸發(fā)器的用途有兩方面:一是緩存輸入和輸出,平滑信號的毛刺;二是實(shí)現控制信號的功能,如輸出的復位和同步等。
用QuartusII軟件編譯程序,并用仿真工具仿真。波特率為115 200 bps,編輯輸入點(diǎn)txArm2、rxCan2的波形,查看輸出點(diǎn)txCan2、rxArm2的波形。為方便識圖,仿真中將數據端口傳輸占用的時(shí)間參數置0。
首先,論證輸出波形的有效性。觀(guān)察圖4中的txCan2和rxArm2的波形,可以看出所有時(shí)刻的數值都是確定的,從而證明系統處于穩定狀態(tài),波形是有效的。
然后,論證輸出波形的邏輯性。根據程序的邏輯設計,txArm2通道的數據發(fā)送享有優(yōu)先權,始終保持txCan2=txArm2。從仿真結果可以看出,txCan2的波形與txArm2波形完全一致;當txArm2通道為“0”時(shí),屏蔽rxCan2輸入的數據,并保持rxArm2輸出一直為“1”,觀(guān)察圖4中任何時(shí)刻所有輸入/輸出的波形,可以看出仿真結果正確。
最后,驗證輸出波形的時(shí)序性。這部分程序是一個(gè)組合邏輯的設計,也就是所有的輸出隨著(zhù)相應的輸入的變化而變化。由圖4可知,仿真結果的時(shí)序正確。
評論