基于FPGA的CAN總線通信接口的設(shè)計(jì)
2 FPGA邏輯控制程序
2.1 SJA1000邏輯控制
由于SJA1000地址線與數(shù)據(jù)總線復(fù)用,FPGA不僅僅要產(chǎn)生SJA1000讀寫控制引腳的信號(hào)邏輯,還需要模擬單片機(jī)等處理器產(chǎn)生對(duì)SJA1000的尋址信號(hào),實(shí)際上是一個(gè)向SJA1000寫地址的過程。根據(jù)SJA1000技術(shù)手冊(cè)的時(shí)序要求,要完成對(duì)SJA1000內(nèi)寄存器的正確讀寫,接口邏輯必須在地址鎖存信號(hào)ALE為高電平時(shí)將SJA1000的寄存器地址當(dāng)作數(shù)據(jù)寫入,然后在ALE和片選信號(hào)為低電平后使能SJA1000的讀寫控制信號(hào)(WR或RD)。SJA1000的邏輯控制采用狀態(tài)機(jī)的方式完成,狀態(tài)機(jī)流程圖如圖4所示。起始態(tài)為IDLE態(tài),當(dāng)接收到數(shù)據(jù)讀寫等命令時(shí),進(jìn)入ADDR-ESS態(tài),向SJA1000寫入相應(yīng)寄存器的地址值。然后根據(jù)命令類型決定下一個(gè)態(tài)是寫寄存器狀態(tài)(WR1~WR3)還是讀寄存器狀態(tài)(RD1~RD4)。以寫寄存器為例,在WR1態(tài)ALE、、等信號(hào)置為非有效態(tài)。將置為有效狀態(tài);在WR2態(tài)ALE、為非有效態(tài).而將信號(hào)置為有效態(tài),在時(shí)鐘的下降沿將數(shù)據(jù)寫入寄存器。WR3狀態(tài)保持有效,WR信號(hào)變?yōu)闊o效,進(jìn)入IDLE態(tài),一次寫周期完成。本文引用地址:http://m.butianyuan.cn/article/191443.htm
2.2 SJA1000讀寫數(shù)據(jù)流程控制
FPGA對(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)間的正常通信。FPGA上電后需要延時(shí)一段時(shí)間.等待SJA1000復(fù)位完成才能進(jìn)行SJA1000初始化。初始化仿真波形如圖5(a)所示。SJA1000內(nèi)部有一個(gè)接收緩沖器和一個(gè)發(fā)送緩沖器。FPGA對(duì)SJA1000的讀寫操作,實(shí)際上對(duì)這兩個(gè)緩沖器的讀寫控制。當(dāng)FPGA接收CAN總線數(shù)據(jù)時(shí)首先讀取SJA1000中斷寄存器IR判斷是否有接收中斷。如果有接收中斷到來則開始讀取緩沖器內(nèi)的8字節(jié)數(shù)據(jù),然后釋放接收緩沖器(寫命令寄存器CMR)。使用Xilinx公司的Chipseope軟件進(jìn)行板上測(cè)試,測(cè)試數(shù)據(jù)為(E0,E1,……E7),抓取到的波形如圖5(b)所示。FPGA讀寫SJA1000的流程控制圖如圖6所示。
評(píng)論