第5章 CAN 器件及開發(fā)實例_第1頁
第5章 CAN 器件及開發(fā)實例_第2頁
第5章 CAN 器件及開發(fā)實例_第3頁
第5章 CAN 器件及開發(fā)實例_第4頁
第5章 CAN 器件及開發(fā)實例_第5頁
已閱讀5頁,還剩135頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1第五章CAN器件及開發(fā)實例

與其他現(xiàn)場總線相比,CAN總線得到多家芯片廠商的支持。制造商產(chǎn)品型號器件功能及特點INTEL82526825278XC196CA/CBCAN通信控制器,符合CAN2.0ACAN通信控制器,符合CAN2.0B擴展的8XC196+CAN通信控制器,符合CAN2.0BPHILIP82C200SJA100082C15082C250P51XA-C3CAN通信控制器,符合CAN2.0ACAN通信控制器,符合CAN2.0A/B帶數(shù)字及模擬I/O的CAN擴展器件,符合CAN2.0A高性能的CAN總線收發(fā)器16位微處理器+CAN通信控制器,符合CAN2.0BMOTOROLA68HC05X4系列68HC05X4微控制器+CAN通信控制器,符合CAN2.0ASINMENS81C90/91C167CCAN通信控制器,符合CAN2.0A微控制器+CAN通信控制器,符合CAN2.0A/B2CAN總線控制節(jié)點1控制節(jié)點n傳感器、變送器MMI

TxRx微處理器CAN控制器CAN收發(fā)器圖CAN模塊裝置傳感器、變送器MMITxRx微處理器CAN控制器CAN收發(fā)器35.1獨立CAN控制器SJA1000

SJA1000是適用于汽車和一般工業(yè)環(huán)境的獨立CAN控制器。它是PHILIPS公司生產(chǎn)。SJA1000有兩種工作模式:BasicCAN模式,PeliCAN工作模式。BasicCAN模式是PHILIPS公司生產(chǎn)的PCA82C200的替代產(chǎn)品,引腳兼容,電氣兼容。PeliCAN工作模式支持CAN2.0B協(xié)議。PeliCAN模式下,SJA1000具有與BasicCAN模式下完全不同的寄存器結(jié)構(gòu)。4SJA1000的PeliCAN模式具有以下新增特性:接收和發(fā)送標(biāo)準(zhǔn)和擴展格式報文;達(dá)64字節(jié)的接收FIFO;對于標(biāo)準(zhǔn)和擴展幀都有單/雙接收過濾器;可讀/寫訪問的錯誤計數(shù)器;可編程的錯誤報警限;最近一次錯誤代碼寄存器;對于每一種CAN總線錯誤都能產(chǎn)生不同的出錯中斷;5仲裁丟失中斷,并帶有詳細(xì)丟失仲裁位置的信息;允許單次發(fā)送,當(dāng)出錯或丟失仲裁時不重發(fā);只聽模式(監(jiān)視CAN總線,無應(yīng)答,無出錯標(biāo)志);支持熱插拔;自身發(fā)送報文接收(自接收請求);硬件禁止CLKOUT輸出。6CAN控制模塊SJA1000功能框圖7SJA1000CAN控制器由下述幾部分組成:1.接口管理邏輯(IML)通過SJA1000復(fù)用的地址/數(shù)據(jù)總線,控制讀/寫選通信號等,完成對外部主控制器的連接。并向該控制器提供中斷信息和狀態(tài)信息。解釋來自CPU的命令,控制SJA1000內(nèi)部尋址,向CPU提供中斷信息和狀態(tài)信息。

82.發(fā)送緩沖器(TXB)發(fā)送緩沖器是CPU和位流處理器之間的接口。能夠存儲發(fā)送到CAN總線上的完整報文,緩沖器長13字節(jié),由CPU寫入,位流處理器BSP讀出。93.接收緩沖器(RXB,RXFIFO)是接收過濾器和CPU之間的接口,用于儲存從CAN總線上接收并采用的報文。RXB,長13字節(jié),作為RXFIFO,長64字節(jié),的一個窗口,可被CPU訪問。在RXFIFO的支持下,CPU可以在處理一個報文的同時接收其他報文。10信息2信息3信息1接收緩沖器窗口CAN地址輸入信息釋放接收緩沖器命令接收緩沖器中的當(dāng)前可用信息是信息1圖RXFIFO中信息存儲示例114.接收過濾器(ACF)接收過濾器把接收數(shù)據(jù)和接收識別碼的內(nèi)容相比較,以決定是否接收信息。如果比較的結(jié)果為真,則報文完整地存入RXFIFO中。125.位流處理器:位流處理器是一個序列發(fā)生器,控制發(fā)送緩沖器、RXFIFO和CAN總線之間的數(shù)據(jù)流。完成CAN總線上的錯誤檢測、仲裁、填充和錯誤處理等功能。136.位定時邏輯:位定時邏輯監(jiān)視CAN總線并處理總線位定時。它同步于幀起始的從隱性到顯性電平的跳變(硬同步),并且在接收報文的過程中進行重同步(軟同步)。提供可編程的時間段用于補償傳播延時和相位變化,定義采樣時刻和一位時間內(nèi)的采樣次數(shù)。147.錯誤管理邏輯:負(fù)責(zé)錯誤界定。接收來自位流處理器的出錯報告,并將分析出的出錯狀態(tài)傳達(dá)給位流處理器和接口管理邏輯。15CAN控制模塊SJA1000管腳排列圖:控制線:7地址/數(shù)據(jù):8時鐘:2電源:6復(fù)位:1發(fā)送接收:416符號引腳說明AD7-02,1,28-23多路地址/數(shù)據(jù)總線ALE/AS3ALE輸入信號(Intel模式),AS輸入信號(Motorola模式)/CS4片選輸入,低電平允許訪問SJA1000(/RD)/E5微控制器的/RD信號(Intel模式)或E使能信號(Motorola模式)/WR6微控制器的/WR信號(Intel模式)或RD/(/WR)信號(Motorola模式)CLKOUT7SJA1000產(chǎn)生的提供給微控制器的時鐘輸出信號;時鐘信號來源于內(nèi)部振蕩器,且通過編程驅(qū)動時鐘控制;寄存器的時鐘關(guān)閉位可禁止該引腳VSS18接地XTAL19輸入到振蕩器放大電路;外部振蕩信號由此輸入[注]XTAL210振蕩放大電路輸出;使用外部振蕩信號時左開路輸出[注]MODE11模式選擇輸入:1=Intel模式0=Motorola模式CAN控制模塊SJA1000管腳功能描述17VDD312輸出驅(qū)動的5V電壓源TX013從CAN輸出驅(qū)動器0輸出到物理線路上TX114從CAN輸出驅(qū)動器1輸出到物理線路上VSS315輸出驅(qū)動器接地/INT16中斷輸出,用于中斷微控制器;/INT在內(nèi)部中斷寄存器各位都被置位時低電平有效;/INT是開漏輸出,且與系統(tǒng)中的其它/INT是線或的;此引腳上的低電平可以把IC從睡眠模式中激活/RST17復(fù)位輸入,用于復(fù)位CAN接口(低電平有效);把/RST引腳通過電容連到VSS,通過電阻連到VDD可自動上電復(fù)位(例如C=1μF;R=50kΩ)VDD218輸入比較器的5V電壓源RX0RX11920從物理的CAN總線輸入到SJA1000的輸入比較器;顯性電平將會喚醒SJA1000的睡眠模式;如果RX1比RX0的電平高,就讀回顯性電平,反之讀回隱性電平;如果時鐘分頻寄存器的CBP位被置位,就忽略CAN輸入比較器以減少內(nèi)部延時;這種情況下只有RX0是激活的;高電平被認(rèn)為是隱性,而低電平被認(rèn)為是顯性。VSS221輸入比較器的接地端VDD122邏輯電路的5V電壓源18振蕩器和時鐘:四種不同的振蕩器連接方法。195.2SJA1000的BasicCAN模式5.2.1BasicCAN模式下的地址分配

SJA1000對于CPU而言,是可編程外圍芯片。SJA1000的地址區(qū)包括控制段、發(fā)送、接收信息緩沖區(qū)三大部分:①控制段:在初始化期間,控制段可被編程來配置通訊參數(shù)。同時CPU通過這個段來控制CAN總線上的通信。20復(fù)位模式:當(dāng)硬件復(fù)位或控制器掉線時會自動進入復(fù)位模式;工作模式:工作模式是通過置零控制寄存器的復(fù)位請求位激活的。

接收碼寄存器、屏蔽碼寄存器、總線定時寄存器0、總線定時寄存器1以及輸出控制寄存器只有在控制寄存器中的復(fù)位請求位(CR.0)被置1才可訪問。21②發(fā)送緩沖區(qū):一個報文在發(fā)送之前必須寫入發(fā)送緩沖器,再向總線上串行送出。③接收緩沖區(qū):在成功接收一個報文后,CPU從接收緩沖器讀取報文并釋放這部分緩存,使其可繼續(xù)用于存儲后續(xù)收到的報文??刂贫?SJA1000在BasicCAN模式下的地址中共有10個字節(jié),偏移地址分別為0~9。發(fā)送緩沖器:位于CAN地址的10~19,占10個字節(jié),接收緩沖器:位于CAN地址的20~29,占10個字節(jié),22CAN地址寄存器名稱(符號)段工作模式復(fù)位模式讀寫讀寫0控制寄存器(CR)控制控制控制控制控制1命令寄存器(CMR)(FFH)命令(FFH)命令2狀態(tài)寄存器(SR)狀態(tài)-狀態(tài)-3中斷寄存器(IR)中斷-中斷-4接收碼寄存器(ACR)(FFH)-接收代碼接收代碼5接收屏蔽寄存器(AMR)(FFH)-接收屏蔽接收屏蔽6總線定時寄存器0(BTR0)(FFH)-總時序0總時序07總線定時寄存器1(BTR1)(FFH)-總時序1總時序18輸出控制寄存器(OCR)(FFH)-輸出控制輸出控制9測試寄存器(TR)測試測試[注2]測試測試[注2]2310識別碼(ID10-3)發(fā)送緩沖器(10-3)(10-3)(FFH)-11識別碼(ID2-0)+RTR和DLC(2-0)+RTR和DLC(2-0)+RTR和DLC(FFH)-12數(shù)據(jù)字節(jié)1數(shù)據(jù)字節(jié)1數(shù)據(jù)字節(jié)1(FFH)-13數(shù)據(jù)字節(jié)2數(shù)據(jù)字節(jié)2數(shù)據(jù)字節(jié)2(FFH)-14數(shù)據(jù)字節(jié)3數(shù)據(jù)字節(jié)3數(shù)據(jù)字節(jié)3(FFH)-15數(shù)據(jù)字節(jié)4數(shù)據(jù)字節(jié)4數(shù)據(jù)字節(jié)4(FFH)-16數(shù)據(jù)字節(jié)5數(shù)據(jù)字節(jié)5數(shù)據(jù)字節(jié)5(FFH)-17數(shù)據(jù)字節(jié)6數(shù)據(jù)字節(jié)6數(shù)據(jù)字節(jié)6(FFH)-18數(shù)據(jù)字節(jié)7數(shù)據(jù)字節(jié)7數(shù)據(jù)字節(jié)7(FFH)-19數(shù)據(jù)字節(jié)8數(shù)據(jù)字節(jié)8數(shù)據(jù)字節(jié)8(FFH)-2420識別碼(ID.10-3)接收緩沖器(10-3)(10-3)(10-3)(10-3)21識別碼(ID.2-0)+RTR和DLC(2-0)+RTR和DLC(2-0)+RTR和DLC(2-0)+RTR和DLC(2-0)+RTR和DLC22數(shù)據(jù)字節(jié)1數(shù)據(jù)字節(jié)1數(shù)據(jù)字節(jié)1數(shù)據(jù)字節(jié)1數(shù)據(jù)字節(jié)123數(shù)據(jù)字節(jié)2數(shù)據(jù)字節(jié)2數(shù)據(jù)字節(jié)2數(shù)據(jù)字節(jié)2數(shù)據(jù)字節(jié)224數(shù)據(jù)字節(jié)3數(shù)據(jù)字節(jié)3數(shù)據(jù)字節(jié)3數(shù)據(jù)字節(jié)3數(shù)據(jù)字節(jié)325數(shù)據(jù)字節(jié)4數(shù)據(jù)字節(jié)4數(shù)據(jù)字節(jié)4數(shù)據(jù)字節(jié)4數(shù)據(jù)字節(jié)426數(shù)據(jù)字節(jié)5數(shù)據(jù)字節(jié)5數(shù)據(jù)字節(jié)5數(shù)據(jù)字節(jié)5數(shù)據(jù)字節(jié)527數(shù)據(jù)字節(jié)6數(shù)據(jù)字節(jié)6數(shù)據(jù)字節(jié)6數(shù)據(jù)字節(jié)6數(shù)據(jù)字節(jié)628數(shù)據(jù)字節(jié)7數(shù)據(jù)字節(jié)7數(shù)據(jù)字節(jié)7數(shù)據(jù)字節(jié)7數(shù)據(jù)字節(jié)729數(shù)據(jù)字節(jié)8數(shù)據(jù)字節(jié)8數(shù)據(jù)字節(jié)8數(shù)據(jù)字節(jié)8數(shù)據(jù)字節(jié)830(FFH)-(FFH)-31時鐘分頻器(CDR)時鐘分頻器時鐘分頻器時鐘分頻器時鐘分頻器25SJA1000有兩種復(fù)位方式:硬件復(fù)位與軟件復(fù)位。硬件復(fù)位是指在芯片的復(fù)位腳上提供一定寬度低電平,硬件復(fù)位需要足夠的時間才能使控制寄存器中的復(fù)位請求位置1;軟件復(fù)位是指通過軟件設(shè)置CR.0為1或由脫離總線引起的復(fù)位。

5.2.2復(fù)位值26SJA1000檢測到復(fù)位請求位為1后,將中止當(dāng)前報文的接收/發(fā)送而進入復(fù)位模式。當(dāng)CR.0復(fù)位請求位從1轉(zhuǎn)變到0,SJA1000返回到工作模式。27寄存器名稱位符號名稱值硬件復(fù)位軟件CR.0或總線關(guān)閉復(fù)位控制CR.7-保留00CR.6-保留××CR.5-保留11CR.4OIE溢出中斷使能××CR.3EIE錯誤中斷使能××CR.2TIE發(fā)送中斷使能××CR.1RIE接收中斷使能××CR.0RR復(fù)位請求1(復(fù)位模式)1(復(fù)位模式)命令CMR.7-保留讀命令寄存器的結(jié)果總是“11111111”讀命令寄存器的結(jié)果總是“11111111”CMR.6-保留CMR.5-保留CMR.4GTS睡眠CMR.3CDO清除數(shù)據(jù)溢出CMR.2RRB釋放接收緩沖器CMR.1AT忽略傳送CMR.0TR發(fā)送請求復(fù)位模式下各寄存器的狀態(tài)28狀態(tài)SR.7BS總線狀態(tài)0(在線)×SR.6ES出錯狀態(tài)0(無錯)×SR.5TS發(fā)送狀態(tài)0(空閑)0(空閑)SR.4RS接收狀態(tài)0(空閑)0(空閑)SR.3TCS發(fā)送完畢狀態(tài)1(完畢)×SR.2TBS發(fā)送緩沖器狀態(tài)1(釋放)1(釋放)SR.1DOS數(shù)據(jù)溢出狀態(tài)0(無溢出)0(無溢出)SR.0RBS接收緩沖器狀態(tài)0(空)0(空)中斷IR.7-保留11IR.6-保留11IR.5-保留11IR.4WUI喚醒中斷0(復(fù)位)0(復(fù)位)IR.3DOI數(shù)據(jù)溢出中斷0(復(fù)位)0(復(fù)位)IR.2EI錯誤中斷0(復(fù)位)×[注4]IR.1TI發(fā)送中斷0(復(fù)位)0(復(fù)位)IR.0RI接收中斷0(復(fù)位)0(復(fù)位)295.2.3控制寄存器(CR,地址0)位符號名稱值功能說明CR.7---保留[注1]CR.6---保留[注2]CR.5---保留[注3]CR.4OIE溢出中斷使能1使能:如果置位數(shù)據(jù)溢出位,微控制器接收溢出中斷信號0禁能:微控制器不從SJA1000接收溢出中斷信號CR.3EIE錯誤中斷使能1使能:如果出錯或總線狀態(tài)改變,微控制器接收錯誤中斷信號0禁能:微控制器不從SJA1000接收錯誤中斷信號CR.2TIE發(fā)送中斷使能1使能:當(dāng)信息被成功發(fā)送或發(fā)送緩沖器又可訪問時,微控制器接收SJA1000發(fā)出的一個發(fā)送中斷信號0禁能:微控制器不從SJA1000接收發(fā)送中斷信號CR.1RIE接收中斷使能1使能:信息被無錯接收時,SJA1000發(fā)出一個接收中斷信號到微控制器0禁能:微控制器不從SJA1000接收發(fā)送中斷信號CR.0RR復(fù)位請求[注4]1當(dāng)前:SJA1000檢測到復(fù)位請求后,忽略當(dāng)前發(fā)送/接收的信息,進入復(fù)位模式0空缺:復(fù)位請求位由1變0后,SJA1000回到工作模式30位符號名稱值功能說明CMR.7---保留CMR.6---保留CMR.5---保留CMR.4GTS睡眠1睡眠:如果沒有CAN中斷等待和總線活動,SJA1000進入睡眠模式0喚醒:SJA1000正常工作模式CMR.3CDO清除數(shù)據(jù)溢出1清除:清除數(shù)據(jù)溢出狀態(tài)位0無動作CMR.2RRB釋放接收緩沖器1釋放:接收緩沖器中存放信息的內(nèi)存空間將被釋放0無動作CMR.1AT中止發(fā)送1當(dāng)前:如果不是在處理過程中,等待處理的發(fā)送請求將取消0空缺:無動作CMR.0TR發(fā)送請求1當(dāng)前:信息被發(fā)送0空缺:無動作5.2.4命令寄存器(CMR,地址1)命令寄存器對微控制器來說是只寫存儲器。如果去讀這個地址,返回值是“11111111”31位符號名稱值功能說明SR.7BS總線狀態(tài)1脫離總線:SJA1000退出總線活動0在線:SJA1000加入總線活動SR.6ES出錯狀態(tài)1出錯:至少出現(xiàn)一個錯誤計數(shù)器超過CPU報警限制0Ok:兩個錯誤計數(shù)器都在報警限制以下SR.5TS發(fā)送狀態(tài)1發(fā)送:SJA1000在傳送信息0空閑:沒有要發(fā)送的信息SR.4RS接收狀態(tài)1接收:SJA1000正在接收信息0空閑:沒有正在接收的信息SR.3TCS發(fā)送完畢狀態(tài)1完畢:最近一次發(fā)送請求被成功處理0未完畢:當(dāng)前發(fā)送請求未處理完畢SR.2TBS發(fā)送緩沖器狀態(tài)1釋放:CPU可以向發(fā)送緩沖器寫信息0鎖定:CPU不能訪問發(fā)送緩沖器;有信息正在等待發(fā)送或正在發(fā)送SR.1DOS數(shù)據(jù)溢出狀態(tài)1溢出:信息丟失,因為RXFIFO中沒有足夠的空間來存儲它0自從最后一次清除數(shù)據(jù)溢出命令執(zhí)行無數(shù)據(jù)溢出發(fā)生SR.0RBS接收緩沖器狀態(tài)1滿:RXFIFO中有可用信息0空:無可用信息5.2.5狀態(tài)寄存器(SR地址2):只讀存儲器32位符號名稱值功能說明IR7-5---保留[注1]IR.4WUI喚醒中斷1置位:退出睡眠模式時此位被置位0復(fù)位:微控制器的任何讀訪問將清除此位IR.3DOI數(shù)據(jù)溢出中斷1設(shè)置:當(dāng)數(shù)據(jù)溢出中斷使能位被置為1時向數(shù)據(jù)溢出狀態(tài)位傳送“0-1”,此位被置位0復(fù)位:微控制器的任何讀訪問將清除此位IR.2EI錯誤中斷1置位:錯誤中斷使能時,錯誤狀態(tài)位或總線狀態(tài)位的變化會置位此位0復(fù)位:微控制器的任何讀訪問將清除此位IR.1TI發(fā)送中斷1置位:發(fā)送緩沖器狀態(tài)從0變?yōu)?(釋放)和發(fā)送中斷使能時,置位此位0復(fù)位:微控制器的任何讀訪問將清除此位IR.0RI接收中斷1置位:當(dāng)接收FIFO不空和接收中斷使能時置位此位0復(fù)位:微控制器的任何讀訪問將清除此位5.2.6中斷寄存器(SR地址3):只讀存儲器33名稱地址D7D6D5D4D3D2D1D0發(fā)送緩沖器標(biāo)識符(RTR,DLC)10ID.10ID.9ID.8ID.7ID.6ID.5ID.4ID.311ID.2ID.1ID.0RTRDLC.3DLC.2DLC.1DLC.0數(shù)據(jù)字節(jié)1~812~19數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)5.2.7發(fā)送緩沖器34發(fā)送緩沖器位于CAN地址的10~19。發(fā)送緩沖器的讀/寫只能由微控制器在工作模式下完成。在復(fù)位模式下讀出的值總是“FFH”。(1)識別碼(ID)識別碼有11位(ID.0-ID.10)。ID.10是最高位.在仲裁過程中是最先被發(fā)送到總線上的。識別碼的二進制值越低,其優(yōu)先級越高。在接收過濾器中被用到,在仲裁過程中決定總線訪問的優(yōu)先級。(2)遠(yuǎn)程發(fā)送請求(RTR)如果此位置1,總線將以遠(yuǎn)程結(jié)構(gòu)發(fā)送數(shù)據(jù)。這意味著此段中沒有數(shù)據(jù)字節(jié)。如果沒有置位RTR位,數(shù)據(jù)將以數(shù)據(jù)長度碼規(guī)定的長度來傳送。35(3)數(shù)據(jù)長度碼(DLC)信息數(shù)據(jù)區(qū)的字節(jié)數(shù)根據(jù)數(shù)據(jù)長度碼編制。數(shù)據(jù)字節(jié)數(shù)是0~8,用如下方法計算:數(shù)據(jù)字節(jié)數(shù)=8×DLC.3+4×DLC.2+2×DLC.1+DLC.0如果選擇的值超過8,則按照DLC規(guī)定認(rèn)為是8。(4)數(shù)據(jù)區(qū)傳送的數(shù)據(jù)字節(jié)數(shù)由數(shù)據(jù)長度碼決定。發(fā)送的第一位是地址12單元的數(shù)據(jù)字節(jié)1的最高位365.2.8接收緩沖器名稱地址D7D6D5D4D3D2D1D0接收緩沖器標(biāo)識符(RTR,DLC)20ID.10ID.9ID.8ID.7ID.6ID.5ID.4ID.321ID.2ID.1ID.0RTRDLC.3DLC.2DLC.1DLC.0數(shù)據(jù)字節(jié)1~822~29數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)37SJA1000從總線上接收到的信息存放在RXFIFO共有64字節(jié)的信息空間。接收緩沖器RXB是指在64字節(jié)RXFIFO中可以被CPU直接讀寫的寄存器。共10個字節(jié),偏移地址是20~29。

如何理解RXB與RXFIFO之間的關(guān)系?信息2信息3信息1接收緩沖器窗口CAN地址輸入信息釋放接收緩沖器命令接收緩沖器中的當(dāng)前可用信息是信息1RXFIFO中信息存儲示例38RXFIFO合格的新報文如果RXFIFO中沒有足夠的空間來存儲新的信息,CAN控制器會產(chǎn)生數(shù)據(jù)溢出。數(shù)據(jù)溢出發(fā)生時,已部分寫入

RXFIFO的當(dāng)前信息將被刪除。溢出狀態(tài)位SR.1置“1”如果中斷允許,則數(shù)據(jù)溢出中斷

反應(yīng)到CPU。

64字節(jié)的RXFIFO中最多可以存儲的報文數(shù)?

取決于各條報文的長度

10字節(jié)的RXB中可以存儲一個完整的報文?可以(ID+RTR+DLC+數(shù)據(jù)區(qū))395.2.9接收過濾器注意:ACR、AMR只有在控制寄存器CR的復(fù)位請求位CR.0置“1”時(也就是說SJA1000在復(fù)位狀態(tài)時)才可以(讀/寫)接收過濾器的作用:

使得CAN控制器只接收識別碼和接收過濾器中預(yù)設(shè)值相一致的信息進入到RXFIFO。報文存入FIFO的報文被CAN控制器采用。接收過濾器的組成:

由接收代碼寄存器(ACR)和接收屏蔽寄存器(AMR)組成。

接收代碼寄存器(ACR,地址4)接收屏蔽碼寄存器(AMR,地址5)40接收碼寄存器(ACR)的位分配BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0AC.7AC.6AC.5AC.4AC.3AC.2AC.1AC.0BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0AM.7AM.6AM.5AM.4AM.3AM.2AM.1AM.0接收屏蔽碼寄存器(AMR)的位分配接收屏蔽寄存器定義接收代碼寄存器的相應(yīng)位對接收過濾器是“相關(guān)”的或“不相關(guān)”的。1=“不相關(guān)”,0=“相關(guān)”。{[(ID.10-ID.3)≡(AC.7-AC.0)]或(AM.7-AM.0)}

≡1111111141例:ACR.7ACR.6ACR.5ACR.4ACR.3ACR.2ACR.1ACR.0ACR00110110AMR01010001信息ID0X1X011XXXXID.10ID.9ID.8ID.7ID.6ID.5ID.4ID.3ID.2ID.1ID.042一條信息通過了接收過濾器的測試,而且接收緩沖器有足夠的空間,那么標(biāo)識符和數(shù)據(jù)將被分別順次寫入RXFIFO;同時:接收緩沖器狀態(tài)SR.0位置1(非空);如果接收中斷允許位CR.1為1(允許),則接收中斷IR.0位置1(產(chǎn)生中斷)。如果接收緩沖區(qū)的空間已滿:狀態(tài)寄存器SR的數(shù)據(jù)溢出狀態(tài)位SR.1置“1”已部分寫入RXFIFO的當(dāng)前信息將被刪除。如果溢出中斷允許(CR.4=1),產(chǎn)生數(shù)據(jù)溢出中斷。

435.2.10其它寄存器總線定時寄存器0(BTR0,地址6)總線定時寄存器1(BTR1,地址7)3.輸出控制寄存器(OCR,地址8)4.時鐘分頻寄存器(CDR,地址31)以上寄存器是在BasicCAN與PeliCAN兩種模式下共有的寄存器。

偏移地址相同各個位的功能定義不完全相同441.總線定時寄存器0(BTR0,地址6)總線定時寄存器0定義了比特率預(yù)設(shè)值(BRP)和同步跳轉(zhuǎn)寬度(SJW)的值。復(fù)位模式下:總線定時寄存器0是可以被訪問(讀/寫)的工作模式下:

如果選擇的是PeliCAN模式,那么此寄存器是只讀的;如果選擇的是BasicCAN模式,那么讀回的值總是FFH??偩€定時寄存器0各位的功能如下:

BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0SJW.1SJW.2BRP.5BRP.4BRP.3BRP.2BRP.1BRP.045(1)比特率預(yù)引比例因子BRPCAN系統(tǒng)時鐘tSCL的周期是可編程的,而且決定了本系統(tǒng)的位定時CAN系統(tǒng)時鐘由如下公式計算:tSCL=2×tCLK×(32×BRP.5+16×BRP.4+8×BRP.3

+4×BRP.2+2×BRP.1+BRP.0+1)式中tCLK=XTAL的頻率周期=1/fXTAL46(2)同步跳轉(zhuǎn)寬度SJWtSJW=tSCL×(2×SJW.1+SJW.0+1)

為了補償不同總線控制器的時鐘振蕩器之間的相位偏移,任何總線控制器必須在當(dāng)前傳送的相關(guān)信號沿進行重同步。

同步跳轉(zhuǎn)寬度SJW定義了每一個位周期可以被重同步過程縮短或延長的時間長度,以時鐘周期的數(shù)目來計算,計算公式如下:472.總線定時寄存器1(BTR1,地址7)復(fù)位模式下:總線定時寄存器1是可以被訪問(讀/寫)的工作模式下:

如果選擇的是PeliCAN模式,那么此寄存器是只讀的;如果選擇的是BasicCAN模式,那么讀回的值總是FFH??偩€定時寄存器1定義了每個位周期的長度、采樣點的位置和在每個采樣點的采樣數(shù)目。BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0SAMTSEG2.2TSEG2.1TSEG2.0TSEG1.3TSEG1.2TSEG1.1TSEG1.0總線定時寄存器1各位的功能如下:

時間段TSEG1時間段TSEG2采樣位48(1)采樣SAMTSEG1和TSEG2決定了每一個位周期包含的時鐘周期的數(shù)目和采樣點的位置。tSYNCSEG=1×tSCLtTSEG1=tSCL×(8×TSEG1.3+4×TSEG1.2+2×TSEG1.1+TSEG1.0+1)tTSEG2=tSCL×(4×TSEG2.2+2×TSEG2.1+TSEG2.0+1)采樣位:

SAM=1時,總線采樣3次,建議在低/中速總線上使用。

SAM=0時,總線采樣1次,建議用在高速總線上。(2)時間段1(TSEG1)和時間段2(TSEG2)返回49一個位周期的總體結(jié)構(gòu)CAN系統(tǒng)時鐘與振蕩周期關(guān)系依據(jù)公式50波特率計算方法舉例如下:假如外部晶振為16MHz時,如設(shè)定SJA1000總線定時寄存器0的值為#D3H=11010011

,設(shè)定SJA1000總線定時寄存器1的值為#0AFH=10101111,求系統(tǒng)時鐘為多少?系統(tǒng)的波特率為多少?tscl=2×(16+2+1+1)/

16×1000000=2.5us每個位周期時間

=2.5×

[(8+4+2+1+1)+(2+1)+1]=50us波特率=1/50us=20KbpsTSEG1TSEG2TSYN513.輸出控制寄存器(OCR,地址8)輸出控制寄存器實現(xiàn)了軟件對輸出驅(qū)動器的不同配置。復(fù)位模式下:輸出控制寄存器是可以被訪問(讀/寫)的。工作模式下:

如果選擇的是PeliCAN模式,那么此寄存器是只讀的;如果選擇的是BasicCAN模式,那么讀回的值總是FFH。52BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0OCTP1OCTN1OCPOL1OCTP0OCTN0OCPOL0OCMODE1OCMODE0輸出控制寄存器在復(fù)位模式下可讀/寫訪問。

該寄存器各位功能如下:OCTP1控制輸出晶體管P1;OCTN1控制輸出晶體管N1;OCPOL1控制輸出極性1;OCTP0控制輸出晶體管P0;OCTN0控制輸出晶體管N0;OCPOL0控制輸出極性0;控制輸出模式四種狀態(tài)53當(dāng)SJA1000在睡眠模式中時,TX0和TX1引腳根據(jù)輸出控制寄存器的內(nèi)容輸出隱性的電平。

在復(fù)位狀態(tài)(復(fù)位請求=1)或外部復(fù)位引腳/RST被拉低時,輸出TX0和TX1懸空。54發(fā)送的輸出階段可以有不同的模式。OCMODE1OCMODE0說明00雙相輸出模式01測試輸出模式[注]10正常輸出模式11時鐘輸出模式55①正常輸出模式正常模式中位序列(TXD)通過TX0和TX1送出。輸出驅(qū)動引腳TX0和TX1的電平取決于被OCTPx,OCTNx,OCPOLx編程的輸出端極性。56②時鐘輸出模式

TX0引腳功能和正常模式中相同。

TX1上的數(shù)據(jù)流為發(fā)送時鐘(TXCLK)。發(fā)送時鐘的上升沿標(biāo)志著一位的開始。時鐘脈沖寬度是1×tscl。57③雙相輸出模式

輪流使用TX0或TX1電平發(fā)送,例如,第一位在TX0上發(fā)送,第二位在TX1上發(fā)送,第三位在TX0上發(fā)送等等依此類推。58④測試輸出模式在測試輸出模式中,RX上的電平在下一個系統(tǒng)時鐘的上升沿反映到TXX上。59時鐘分頻寄存器控制CLKOUT的頻率、屏蔽CLKOUT引腳。控制TX1上的專用接收中斷脈沖輸出??刂平邮毡容^器旁路??刂艬asicCAN模式與PeliCAN模式的選擇。硬件復(fù)位后,該寄存器的默認(rèn)狀態(tài)在Motorola模式(00000101)12分頻,而在Intel模式(00000000)2分頻。該寄存器各位的功能如下:4.時鐘分頻寄存器(CDR,地址31)60BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0CAN模式CBPRXINTEN(0)[注]關(guān)閉時鐘CD.2CD.1CD.0注:此位不能被寫,讀值總為0。

61(1)CD.2-CD.0復(fù)位模式和工作模式中一樣,CD.2-CD.0是可以無限制訪問的。這些位是用來定義外部CLKOUT引腳上的頻率的??蛇x的頻率一覽表見表CD.2CD.1CD.0時鐘頻率000fosc/2001fosc/4010fosc/6011fosc/8100fosc/10101fosc/12110fosc/14111fosc62(2)時鐘關(guān)閉(BIT3)復(fù)位模式中才可以寫訪問。設(shè)置此位可禁能SJA1000的外部CLKOUT引腳。如果置位此位,CLKOUT引腳在睡眠模式中是低,而其它情況下是高。(3)RXINTEN(BIT5)復(fù)位模式中可寫。此位允許TX1輸出用來做專用接收中斷輸出。當(dāng)一條已接收的信息成功的通過接收過濾器,一位時間長度的接收中斷脈沖就會在TX1引腳輸出。發(fā)送輸出應(yīng)該工作在正常輸出模式。極性和輸出驅(qū)動可以通過輸出控制寄存器編程。63(4)CBP(BIT6)只可在復(fù)位模式中寫入。置位CBP,忽略CAN輸入比較器,只有RX0被激活。沒有被使用的RX1輸入應(yīng)被連接到一個確定的電平VSS.(5)CAN模式(BIT7)只有在復(fù)位模式中是可以寫的。

如果CDR.7是0,CAN控制器工作于BasicCAN模式。如果CDR.7是1,

CAN控制器工作于PeliCAN模式。645.3SJA1000的PeliCAN模式

CAN控制器SJA1000的內(nèi)部寄存器對于CPU而言,表現(xiàn)為片上內(nèi)存映射的外設(shè)寄存器,共128字節(jié)。從偏移地址32起的所有內(nèi)部RAM(80字節(jié))被直接映射到CPU接口。65在工作和復(fù)位模式下,SJA1000具有不同的內(nèi)部地址定義,因此必須予以區(qū)分。見教材P138表5-18。需要著重說明的是:從偏移地址11到15是PeliCAN功能的擴展從偏移地址16到28在復(fù)位模式與工作模式下功能完全不同,使用時要特別注意。665.3.3模式寄存器675.3.4命令寄存器685.3.5狀態(tài)寄存器695.3.6中斷寄存器:地址3705.3.6中斷寄存器:地址3715.3.7中斷允許寄存器:地址4725.3.7中斷允許寄存器:地址4735.3.8仲裁丟失捕捉寄存器ALC(偏移地址11)

這個寄存器包括了丟失仲裁的位置信息。仲裁丟失捕捉寄存器對CPU來說是只讀存儲器。保留位的讀回值為0。寄存器各位含義如下:BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0ALC.7

ALC.6ALC.4ALC.3ALC.2ALC.1ALC.0ALC.5顯示了仲裁丟失位置,其值表示丟失仲裁位在一幀報文中所處位置的二進制編碼

保留位

74仲裁丟失舉例圖仲裁丟失時,如果中斷允許會產(chǎn)生相應(yīng)的仲裁丟失中斷。讀中斷寄存器時,中斷寄存器中相應(yīng)的中斷標(biāo)志位被清除。75同時,位流處理器的當(dāng)前位位置被捕捉送入仲裁丟失捕捉寄存器。寄存器中的內(nèi)容將不會改變,直到用戶通過軟件讀出這個值。隨后,捕捉機制再次被激活。仲裁丟失位解釋765.3.9錯誤代碼捕捉寄存器ECC(偏移地址12)

這個寄存器包含了總線錯誤類型和位置的信息錯誤代碼捕捉寄存器對CPU來說是只讀存儲器。BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0ECC.7

ECC.6ECC.5ECC.4ECC.3ECC.2ECC.1ECC.0總線錯誤類型

錯誤位置的信息見P153表5-2900位錯誤01格式錯誤10填充錯誤11其他錯誤錯誤方向1接收錯誤0發(fā)送錯誤77

發(fā)送緩沖器的布局:無論是標(biāo)準(zhǔn)幀格式SFF或擴展幀格式EFF配置,發(fā)送緩沖器允許定義長達(dá)8個數(shù)據(jù)字節(jié)的發(fā)送報文。

5.3.13發(fā)送緩沖器

78(1)發(fā)送緩沖器組成發(fā)送緩沖器被分為描述符區(qū)和數(shù)據(jù)區(qū)發(fā)送緩沖器長13字節(jié),對應(yīng)偏移地址16~28。(2)發(fā)送緩沖器的描述符區(qū)BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0FF

RTRXDLC.3DLC.2DLC.1DLC.0XTX幀信息SFF(偏移地址16)0標(biāo)準(zhǔn)幀0數(shù)據(jù)幀79注意:1.無論是標(biāo)準(zhǔn)幀格式還是擴展幀格式,標(biāo)識符連續(xù)放置。發(fā)送的數(shù)據(jù)字節(jié)數(shù)由數(shù)據(jù)長度碼決定。2.在SFF中最先發(fā)送的是偏移地址19,在EFF中最先發(fā)送的是在偏移地址21的數(shù)據(jù)字節(jié)的最高位。3.在BASICCAN中標(biāo)識符的標(biāo)記為ID.10~ID.0,

在PELICAN中標(biāo)識符的標(biāo)記在標(biāo)準(zhǔn)幀格式為ID.28~ID.18,在擴展幀格式為ID.28~ID.0

805.3.14接收緩沖器

接收緩沖器的布局與發(fā)送緩沖器很相似。接收緩沖器是RXFIFO的可訪問部分,位于偏移地址的16~28之間

?

與發(fā)送緩沖器地址相同,依據(jù)是讀還是寫命令來區(qū)分,讀接收緩沖器

,寫發(fā)送緩沖器

815.3.15接收過濾器

接收過濾器的作用是使SJA1000能夠只讓標(biāo)識符與接收過濾器中預(yù)設(shè)值相一致的報文傳給RXFIFO。報文存入FIFO被CAN控制器采用。接收過濾器由接收碼寄存器ACRn和接收屏蔽碼寄存器AMRn定義。要接收的報文的位組合格式在接收碼寄存器中定義。相應(yīng)的接收屏蔽碼寄存器可定義某些位為“不相關(guān)”(即可為任意值)的。有兩種不同的過濾器模式可在模式寄存器中(MOD.3,AFM)選擇:單過濾器模式(AFM位是1);雙過濾器模式(AFM位是0)。821.單過濾器配置

這種過濾器配置可以定義一個長度為4字節(jié)的過濾器。過濾器字節(jié)和報文字節(jié)之間位的對應(yīng)關(guān)系取決于當(dāng)前接收幀格式。(1)標(biāo)準(zhǔn)幀

當(dāng)接收到的是標(biāo)準(zhǔn)幀報文時,不僅可以對報文ID進行過濾,還可以對接收到有效數(shù)據(jù)的前2個字節(jié)進行過濾。雖然過濾器可以對這2個數(shù)據(jù)字節(jié)進行過濾,但如果此次發(fā)送的報文沒有數(shù)據(jù)字節(jié)或不足2個數(shù)據(jù)字節(jié)報文仍可能成功通過接收過濾。

83或與比較單過濾器接收標(biāo)準(zhǔn)幀報文的過濾(P151圖5-12)84當(dāng)收到的是擴展幀報文時,過濾器對29位的標(biāo)識符和RTR位進行過濾。為了成功接收一條報文,要求所有逐位的比較結(jié)果都滿足接收的條件。應(yīng)該注意的是,AMR3和ACR3的最低兩位是未使用的。為了和將來的產(chǎn)品兼容,最低兩位AMR3.1和AMR3.0應(yīng)該設(shè)置為1(不相關(guān))。(2)擴展幀85單過濾器接收擴展幀報文862.雙過濾器配置當(dāng)模式寄存器(MOD)中的AFM(MOD.3)位為0時,SJA1000有兩個過濾器。只要報文可以通過其中的一個過濾器,SJA1000就接收該報文。標(biāo)準(zhǔn)幀:當(dāng)接收到的報文為標(biāo)準(zhǔn)幀時,兩個過濾器的作用是不同的。過濾器1不僅可以對標(biāo)識符(包括RTR)進行過濾,還可以對接收到的第一個字節(jié)進行過濾;過濾器2僅可對標(biāo)識符(包括RTR)進行過濾。報文的接收與否,由兩個過濾器過濾的結(jié)果相“或”決定。87雙過濾器配置接收標(biāo)準(zhǔn)幀報文(P163圖5-14)88(2)擴展幀

當(dāng)接收到的報文為擴展幀時,兩個過濾器的作用是一樣的,都對標(biāo)識符域的前16位進行過濾。為了成功接收一條報文,要求逐位比較后,至少其中一個過濾器表示“采用”。89雙過濾器接收擴展幀報文(P164圖5-15)905.4CAN驅(qū)動器82C250/82C25182C250是CAN控制器和物理總線間的接口器件,也稱為總線驅(qū)動器。提供對總線的差動發(fā)送和差動接收能力。9182C250主要特性:與ISO11898標(biāo)準(zhǔn)完全兼容速度最高可達(dá)1Mbps具有抗瞬間干擾,保護總線能力降低射頻干擾(RFI)的斜率控制過熱保護對電源或地的短路保護支持低電流待機方式某一個節(jié)點掉電不會影響總線可連接110個節(jié)點925.4.182C250的硬件結(jié)構(gòu)及引腳定義基本性能參數(shù)見P167表5-499382C250基本性能數(shù)據(jù)如表945.4.282C250的功能描述PCA82C250器件向總線提供差動發(fā)送能力和向CAN控制器提供差動接收能力。它與ISO11898標(biāo)準(zhǔn)完全兼容。引腳8(Rs)允許選擇3種不同的工作方式:高速、斜率控制和待機。95引腳8(RS)允許選擇三種不同的工作方式:高速、斜率控制和待機。96通過將引腳8接地可選擇高速方式。發(fā)送器輸出晶體管盡可能快地啟動和關(guān)閉。在這種模式下沒有措施用于限制信號上升和下降的斜率。應(yīng)使用屏蔽電纜避免射頻干擾問題。97對于速度較低或長度較短的總線,可用非屏蔽雙絞線或平行線。為降低射頻干擾,應(yīng)限制上升和下降斜率。上升和下降斜率可通過由引腳8至地連接的電阻進行控制。斜率正比于引腳8上的電流輸出。若引腳8接高電平,則電路進入低電流待機方式。在這種方式下,發(fā)送器被關(guān)閉,而接收器轉(zhuǎn)至低電流。由于在待機方式下,接收器比較慢,因此,第一個報文將被丟失。98CAN收發(fā)器真值表995.4.382C250的應(yīng)用實例CAN收發(fā)器不采用和采用電流隔離時的兩種情況。圖5-18

CAN收發(fā)器不采用電流隔離時的應(yīng)用實例100圖5-19

CAN收發(fā)器采用電流隔離時的應(yīng)用實例1015.5基于CAN總線的遠(yuǎn)程工業(yè)電表抄表系統(tǒng)開發(fā)實例

5.5.1遠(yuǎn)程抄表系統(tǒng)概述

基于CAN總線的遠(yuǎn)程抄表系統(tǒng)分為兩個層次,一個是中央控制室的中央監(jiān)控單元,一個是現(xiàn)場的遠(yuǎn)程采集單元。

102遠(yuǎn)程采集單元負(fù)責(zé)對現(xiàn)場的電能表進行實時脈沖采集,同時完成數(shù)據(jù)的統(tǒng)計、存儲;中央監(jiān)控單元可以定期或不定期地從遠(yuǎn)程采集單元獲取所需數(shù)據(jù),并完成數(shù)據(jù)統(tǒng)計、報表打印及數(shù)據(jù)庫的管理。中央監(jiān)控單元與遠(yuǎn)程采集單元之間通過CAN總線連接在一起。中央監(jiān)控單元處于主控位置,遠(yuǎn)程采集單元可以隨時響應(yīng)中央監(jiān)控單元的命令。103基于CAN總線的遠(yuǎn)程抄表系統(tǒng)結(jié)構(gòu)圖104遠(yuǎn)程采集單元遠(yuǎn)程采集單元涉及CAN通信方面的一些功能特點如下:手動設(shè)定遠(yuǎn)程采集單元地址;用電量和時段可以通過中央監(jiān)控單元設(shè)置,每個遠(yuǎn)程采集單元各自具有內(nèi)部實時時鐘,可以通過通信方式統(tǒng)一校正時鐘;可隨時響應(yīng)中央監(jiān)控單元的查詢命令,在與上位機進行數(shù)據(jù)通信的同時不影響脈沖計數(shù)。遠(yuǎn)程采集單元主要由單片機80C552及采集、存儲、顯示、遙控和通信接口等模塊組成,每個采集單元能采集和處理16塊電表的電脈沖信號。105CAN通信模塊的硬件設(shè)計1065.5.3基于CAN的通信協(xié)議

遠(yuǎn)程抄表系統(tǒng)只用了CAN4種幀類型中的數(shù)據(jù)幀。假設(shè)系統(tǒng)將數(shù)據(jù)幀分為16種,有16個控制命令,中央監(jiān)控單元向遠(yuǎn)程采集單元發(fā)送的數(shù)據(jù)幀格式為:

標(biāo)識符的內(nèi)容為遠(yuǎn)程采集單元的編號;命令號,范圍是1~16;第4~10數(shù)據(jù)字節(jié)為命令參數(shù)。字節(jié)1字節(jié)2字節(jié)3字節(jié)4~10目的采集器號數(shù)據(jù)長度命令號參數(shù)107遠(yuǎn)程采集單元向中央監(jiān)控單元發(fā)送的數(shù)據(jù)幀格式為:字節(jié)1字節(jié)2字節(jié)3字節(jié)4~10源采集器號數(shù)據(jù)長度幀號返回數(shù)據(jù)108

可以看到,對于一個數(shù)據(jù)幀,除了數(shù)據(jù)域可以攜帶用戶信息外,仲裁域(標(biāo)識符)和控制域(數(shù)據(jù)長度)同樣可用于用戶信息的傳遞。在本例中,標(biāo)識符不僅僅是報文的編號,體現(xiàn)報文的優(yōu)先級,同時也說明了該報文的來源或目的地。1095.5.5通信實例【例5.1】中央監(jiān)控單元設(shè)置地址為15的遠(yuǎn)程采集單元的系統(tǒng)時鐘,命令號為1:該命令無須遠(yuǎn)程采集單元返回任何數(shù)據(jù),因而發(fā)送成功即認(rèn)為命令已執(zhí)行。110【例5.2】中央監(jiān)控單元讀取地址為15的遠(yuǎn)程采集單元的當(dāng)前小時用電數(shù)據(jù),命令號為4:遠(yuǎn)程采集單元返回33字節(jié)有效數(shù)據(jù),共需5幀。每個表高字節(jié)表示整數(shù)部分,低字節(jié)表示小數(shù)部分。1115.6CAN通信軟件設(shè)計

通信軟件一般由三部分組成:初始化程序、發(fā)送程序和接收程序。

5.6.1初始化程序

三種方法進入初始化程序:①上電復(fù)位;②硬件復(fù)位;③軟件復(fù)位:運行期間通過給CAN控制器發(fā)一個復(fù)位請求(置復(fù)位請求位為1)。CAN控制器SJA1000必須在復(fù)位,并運行初始化程序后才能用于CAN通訊。

112113在復(fù)位模式中,主控制器必須配置SJA1000控制段的有關(guān)寄存器有:時鐘分頻寄存器(CDR):BasicCAN或PeliCAN模式禁能CLKOUT管腳旁路CAN輸入比較器TX1被用作專門的接收中斷輸出114驗收代碼和驗收屏蔽寄存器(ACR、AMR)總線定時寄存器(BTR)定義總線上的位速率定義位周期上的采樣點定義在一個位周期里采樣的數(shù)目輸出控制寄存器(OCR)定義CAN總線輸出管腳TX0和TX1的輸出模式定義TX0和TX1輸出管腳配置1155.6.2數(shù)據(jù)發(fā)送程序發(fā)送程序只需要被發(fā)送的信息幀傳送到CAN控制器的發(fā)送緩沖器。將命令寄存器里的“發(fā)送請求”標(biāo)志置位——啟動發(fā)送命令即可。發(fā)送程序可采用SJA1000的中斷請求或查詢狀態(tài)標(biāo)志兩種控制方式來實現(xiàn)。

1165.6.2.1中斷控制發(fā)送

采用中斷控制的發(fā)送方式,發(fā)送程序分為兩部分:一是主程序,二是中斷服務(wù)程序。主程序主要用于控制信息的發(fā)送,同時當(dāng)發(fā)送區(qū)滿時,把要發(fā)送的信息暫存到臨時存儲區(qū);中斷發(fā)送程序負(fù)責(zé)把臨時存儲區(qū)中的暫存信息發(fā)送出去。1171185.6.2.2查詢控制發(fā)送CAN控制器的發(fā)送中斷被屏蔽。1195.6.2.3忽略發(fā)送

如果對一條發(fā)送的信息請求中止,可置位命令寄存器“中止發(fā)送”位,執(zhí)行中止發(fā)送命令。例如,為了發(fā)送一個比當(dāng)前信息更緊急的信息??芍兄拱l(fā)送當(dāng)前信息。

1201215.6.3數(shù)據(jù)接收程序5.6.3.1查詢控制接收1225.6.3.2中斷控制接收1235.6CAN通信軟件設(shè)計將所有信息一次讀出的過程:在釋放了接收緩沖器后,SJA1000會檢查狀態(tài)寄存器中接收緩沖器狀態(tài)“RBS”看是否有更多信息,而所有有效的信息都會被循環(huán)讀出。

1241255.6.3.3數(shù)據(jù)溢出處理

萬一接收緩沖區(qū)FIFO滿了,但還在接收其他信息,就會通過置位狀態(tài)寄存器中的數(shù)據(jù)溢出狀態(tài)位,通知主控制器有數(shù)據(jù)溢出。如果數(shù)據(jù)溢出中斷使能,SJA1000會產(chǎn)生一個數(shù)據(jù)溢出中斷。檢測到數(shù)據(jù)溢出后,可以根據(jù)“數(shù)據(jù)溢出”原則啟動一個相應(yīng)的處理程序。1265.6.4中斷SJA1000在BasicCAN模式里有5個中斷源,在PeliCAN模式里被擴展到8個。一旦CAN產(chǎn)生中斷,SJA1000會將中斷輸出設(shè)為低電平,直到主控制器通過讀SJA1000的中斷寄存器對中斷采取相應(yīng)措施。中斷被處理的次序取決于系統(tǒng)。由整個系統(tǒng)的設(shè)計者決定。127PeliCAN模式128CS BITP2.7;片選信號

;CAN寄存器描述

C0_CR EQU 00 ;控制寄存器

C0_CMR EQU 01 ;命令寄存器

C0_SREQU 02 ;狀態(tài)寄存器

C0_IR EQU 03 ;中斷寄存器

C0_ACR EQU 04 ;接收碼寄存器

C0_AMR EQU 05 ;接收屏蔽寄存器

C0_BTR0 EQU 06 ;總線定時寄存器0 C0_BTR1 EQU 07 ;總線定時寄存器1 C0_OCR EQU 08 ;輸出控制寄存器

C0_CDR EQU 31 ;時鐘分頻寄存器

RECSTART EQU 40H;存放接收數(shù)據(jù)RAM區(qū)首地址程序?qū)嵗?29 ORG 0000H LJMPMAIN ORG 0013H LJMPEXINT1 ;------------------------------------------ ;初始化SJA1000寄存器;------------------------------------------ORG 0030H MAIN:CLR EA;關(guān)中斷WC0_CR:MOVR1,#C0_CR;設(shè)定控制寄存器

MOVA,#01H;復(fù)位請求位置1LCALLWCAN LCALLRCAN;讀出SJA1000控制寄存器值130;------------------------------------------ ;讀寫SJA1000寄存器;------------------------------------------WCAN:CLR P2.7 MOVX@R1,A SETBP2.7 RET RCAN:CLRP2.7 MOVXA,@R1 SETBP2.7 RET131ANLA,#01H;該值與#01H數(shù)值相與JZWC0_CR;非復(fù)位模式,繼續(xù)設(shè)定CRMOVR1,#C0_CDR;設(shè)定時鐘分頻寄存器MOVA,#48H;BasicCAN模式,禁能時鐘引腳LCALLWCANMOVR1,#C0_ACR;設(shè)定ACRMOVA,#55;置接收代碼為00110111(55)LCALLWCANMOVR1,#C0_AMR;設(shè)定AMRMOVA,#0FFHLCALLWCAN132MOVR1,#C0_BTR0;設(shè)定BTR0MOVA,#0D3H ;系統(tǒng)時鐘2.5usLCALLWCANMOVR1,#C0_BTR1;設(shè)定BTR1MOVA,#0AFH ;位周期時間50us,波特率20KLCALLWCAN MOVR1,#C0_OCR;設(shè)定OCRMOVA,#00011010B;正常模式,推挽方式LCALLWCAN 133RC0_CR:MOV R1,#C0_CR;設(shè)定CR MOV A,#06H;允許發(fā)送、接收中斷,

LCALLWCAN LCALLRCANANL A,#01H;與#01H數(shù)值相與

JNZ RC0_CR;非工作模式繼續(xù)設(shè)定

SETBIT1;外部中斷1后沿觸發(fā)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論