新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種基于FPGA的CAN總線通信接口的設(shè)計(jì)

一種基于FPGA的CAN總線通信接口的設(shè)計(jì)

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

  2.2 SJA1000讀寫數(shù)據(jù)流程控制

  對(duì)SJA1000控制程序包括SJA1000初始化、SJA1000讀數(shù)據(jù)、SJA1000寫數(shù)據(jù)等部分。SJA1000的初始化是在復(fù)位模式下進(jìn)行的,在復(fù)位模式下分別設(shè)置時(shí)鐘分頻器CDR、總線定時(shí)器(BTR0、BTR1)、輸出控制寄存器(OCR)等重要寄存器。SJA1000通信波特率由總線定時(shí)器決定,需要與后端節(jié)點(diǎn)的波特率相同才能進(jìn)行節(jié)點(diǎn)間的正常通信。上電后需要延時(shí)一段時(shí)間.等待SJA1000復(fù)位完成才能進(jìn)行SJA1000初始化。初始化仿真波形如圖5(a)所示。SJA1000內(nèi)部有一個(gè)接收緩沖器和一個(gè)發(fā)送緩沖器。對(duì)SJA1000的讀寫操作,實(shí)際上對(duì)這兩個(gè)緩沖器的讀寫控制。當(dāng)FPGA接收數(shù)據(jù)時(shí)首先讀取SJA1000中斷寄存器IR判斷是否有接收中斷。如果有接收中斷到來(lái)則開(kāi)始讀取緩沖器內(nèi)的8字節(jié)數(shù)據(jù),然后釋放接收緩沖器(寫命令寄存器CMR)。使用Xilinx公司的Chipseope軟件進(jìn)行板上測(cè)試,測(cè)試數(shù)據(jù)為(E0,E1,……E7),抓取到的波形如圖5(b)所示。FPGA讀寫SJA1000的流程控制圖如圖6所示。

仿真波形

FPGA讀寫SJA1000的流程控制圖

  2.3 CY7C68013A通信控制程序

  CY7C68013A提供一種量子FIFO的處理架構(gòu),使USB接口和應(yīng)用環(huán)境直接共享內(nèi)部含有的4 K FIF0空間。本文CY7C68013A的控制是以異步SLAVE FIFO方式實(shí)現(xiàn)的,F(xiàn)PGA對(duì)CY7C68013A的邏輯控制實(shí)際上是對(duì)CY7C68013A內(nèi)部FIFO的異步讀寫控制。設(shè)置CY7C68013A端點(diǎn)2為批量輸入端點(diǎn)(FIF0地址為00),端點(diǎn)6為批量輸出端點(diǎn)(FIF0地址為1O)。FPGA判斷CY7C68013A的PA[1:0]端口電平,當(dāng)PA[1:0]為01時(shí),F(xiàn)PGA將接收到的數(shù)據(jù)寫入端點(diǎn)2對(duì)應(yīng)的FIF0空間并上傳給上位機(jī),PA[1:0]為10時(shí),F(xiàn)PGA讀取端點(diǎn)6對(duì)應(yīng)的FIFO內(nèi)數(shù)據(jù)。FPGA對(duì)CY7C68013A的時(shí)序控制嚴(yán)格按照芯片手冊(cè)完成。

  由于USB數(shù)據(jù)包與CAN數(shù)據(jù)幀是基于兩種不同協(xié)議的數(shù)據(jù)格式,因此在FPGA內(nèi)開(kāi)辟了2個(gè)512x8bit的FIFO緩存,并要進(jìn)行必要的格式轉(zhuǎn)換。例如,當(dāng)從USB總線端注入的數(shù)據(jù)大于8字節(jié)時(shí),需要將數(shù)據(jù)分成多幀傳送給;當(dāng)數(shù)據(jù)小于8字節(jié)時(shí)則在數(shù)據(jù)后填充0。另外,在數(shù)據(jù)傳送給CAN總線之前還需要添加適當(dāng)?shù)膸畔⑴c幀識(shí)別碼。



關(guān)鍵詞: FPGA CAN總線 通信接口

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉