CAN總線的使用_第1頁
CAN總線的使用_第2頁
CAN總線的使用_第3頁
CAN總線的使用_第4頁
CAN總線的使用_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、CAN總線的使用1、硬件連接方式硬件電路如下圖所示:圖中,D1(IL712)是磁隔離器件,其作用為了使各下井儀之間實(shí)現(xiàn)電氣隔離。各下井儀需要為D1提供兩組5V電源,圖中標(biāo)為VCC1和VCC2。其中,VCC1為儀器內(nèi)部數(shù)字電源,提供給單片機(jī)C8051F041和其它數(shù)字電路;VCC2是隔離電源,用于給IL712和TJA1050供電,電源電流應(yīng)大于75mA。C1、C2為兩組電源的濾波電容。D1的2腳與C8051F041(圖中未畫)的7腳(CANTX)直接連接,D1的3腳與C8051F041的6腳(CANRX)直接連接。D2(TJA1050)為CAN總線收發(fā)器,該器件應(yīng)用VCC2供電。C3為該器件的濾

2、波電容。D2的輸出CANH(6腳)、CANL(7腳)直接連接到下井儀的總線上。R1、R2、C4為CAN總線終端匹配電阻的接法,這三個(gè)器件只需要在處在下井儀串上下兩端的儀器中需要。即:在某儀器中,如果CAN總線是貫通線,則不能連接這三個(gè)器件,反之,如果在該儀器中,如果CAN總線不是貫通線,則需要連接這三個(gè)器件。輸出的CANH和CANL應(yīng)雙絞。2、軟件使用方法編程者應(yīng)該熟悉以下兩本資料:C8051F040/1/2/3/4/5/6/7混合信號(hào)ISP FLASH微控制器數(shù)據(jù)手冊(cè)Boschs C_CAN Users Manual在下井儀中建議采用C8051F041或C8051F040單片機(jī),該單片機(jī)內(nèi)部

3、集成了Bosch CAN控制器。以下簡要介紹C8051F04x單片機(jī)和Bosch CAN控制器及其軟件編程方法。2.1 C8041F04x單片機(jī)SFR的分頁機(jī)制C8051F04x系列MCU對(duì)CIP51內(nèi)核和外設(shè)有幾項(xiàng)關(guān)鍵性的改進(jìn),提高了整體性能。其中與編程密切相關(guān)的一點(diǎn)是使用了SFR(特殊功能寄存器)分頁機(jī)制,允許器件將很多SFR映射到0X800XFF這個(gè)存儲(chǔ)器空間。C8051F04x器件使用了5個(gè)SFR頁:0、1、2、3和F。使用特殊功能寄存器頁選擇寄存器SFRPAGE來選擇SFR頁。因此,讀、寫一個(gè)SFR的步驟為:1. 用SFRPAGE寄存器選擇相應(yīng)的SFR頁號(hào)。2. 用直接尋址方式讀、寫

4、特殊功能寄存器。(與以前的用法相同)。使用CAN控制器時(shí),需要將SFRPAGE設(shè)置為1(用指令mov sfrpage,#1)。編程中用到的其它特殊功能寄存器可參看數(shù)據(jù)手冊(cè)說明。2.2 C8041F04x單片機(jī)中CAN相關(guān)特殊功能寄存器參看數(shù)據(jù)手冊(cè)第201203頁。2.2.1 CAN控制器寄存器的訪問方式可以直接通過訪問一般SFR方式訪問的寄存器共有6個(gè):CAN0CN CAN控制寄存器CAN0STA CAN狀態(tài)寄存器CAN0TST CAN測(cè)試寄存器CAN0ADR 寄存器索引地址CAN0DATH 數(shù)據(jù)字高字節(jié)CAN0DATL 數(shù)據(jù)字低字節(jié)其它CAN控制器寄存器只能通過CAN0ADR、CAN0DAT

5、H、CAN0DATL訪問。訪問方式:先向CAN0ADR中寫入待訪問CAN控制器寄存器的索引號(hào),然后通過CAN0DATH寫入或讀出高字節(jié),通過CAN0DATL寫入或讀出低字節(jié)。例如:0X5號(hào)寄存器其中寫入0X1234h,可采用以下三條指令: mov can0adr,#0x5 mov can0dath,#12h mov can0datl,#34h對(duì)于某些索引地址,在向can0datl進(jìn)行寫入或讀出操作后,can0adr有自動(dòng)加1功能,因此必須向操作can0dath,再操作can0datl。CAN0CN、CAN0STA、CAN0TST也有索引地址,也可以通過地址索引方式訪問。2.2.3 CAN控制器

6、寄存器組成CAN控制器寄存器可分為以下幾類:2.2.3.1 CAN控制器協(xié)議相關(guān)寄存器1 CAN控制寄存器(索引地址0x00)1514131211109876543210resresresresresresresresTestCCEDARCANIFEIESIEIEInitrrrrrrrrrwrwrwrrwrwrwrwTest1 測(cè)試模式 Test0 正常工作模式 一般將Test位置0CCE1時(shí)可以控制更改位定時(shí)寄存器 一般將CCE位置0DAR 禁止自動(dòng)重發(fā)功能 使用中將該位置1CANIF CAN中斷標(biāo)志EIE 錯(cuò)誤中斷使能SIE 狀態(tài)中斷使能IE CAN中斷使能Init 初始化時(shí)將該位置1,正

7、常工作時(shí)將該位置02 CAN狀態(tài)寄存器(索引地址0x01)1514131211109876543210resresresresresresresResBOffEWarnEPassRxOKTxOKLECrrrrrrrRrrrrwrwrw該寄存器反映CAN控制器的狀態(tài)。BOff 處于離線狀態(tài)(1)EWarn 警告狀態(tài)(1說明錯(cuò)誤計(jì)數(shù)器中至少有一個(gè)達(dá)到錯(cuò)誤警告的極限值)EPass 處于被動(dòng)錯(cuò)誤狀態(tài)RxOK 自上次這位被清0后,又成功地收到一條消息TxOK 自上次這位被清0后,又成功地發(fā)送一條消息LEC CAN總線上最后一次錯(cuò)誤的類型3 CAN錯(cuò)誤計(jì)數(shù)器(索引地址0x02)15141312111098

8、76543210RPREC60TEC70rRrRP 接收被動(dòng)錯(cuò)誤達(dá)到CAN協(xié)議規(guī)定的被動(dòng)錯(cuò)誤水平(1)REC60 接收錯(cuò)誤計(jì)數(shù)器,記錄接收錯(cuò)誤的次數(shù)TEC70 發(fā)送錯(cuò)誤計(jì)數(shù)器,記錄發(fā)送錯(cuò)誤的次數(shù)4 CAN位定時(shí)寄存器(索引地址0x03)1514131211109876543210resTseg2Tseg1SJWBRPrrwrwrwrw該寄存器的設(shè)置與CAN總線通訊的波特率有關(guān),各下井儀需統(tǒng)一設(shè)定,各位含義可參看CAN控制器用戶手冊(cè)。5 CAN測(cè)試寄存器(索引地址0x04)1514131211109876543210resresresresresresresResRxTx1Tx0LbackSil

9、entBasicresresrrrrrrrRrrwrwrwrwrwrr該寄存器只有在CAN控制寄存器中的Test位1時(shí)才有效,用于測(cè)試CAN總線的通訊功能,在正常工作時(shí)不使用。6 CAN位定時(shí)擴(kuò)展寄存器(索引地址0x06)1514131211109876543210resresresresresresresresresresresresBRPErrrrrrrrrrrrrw該寄存器的設(shè)置與CAN總線通訊的波特率有關(guān),各下井儀需統(tǒng)一設(shè)定,各位含義可參看CAN控制器用戶手冊(cè)。2.2.3.2 消息對(duì)象接口寄存器CAN控制器中有一塊消息RAM,可以存儲(chǔ)32條消息對(duì)象,每條消息對(duì)象中包含8字節(jié)有用數(shù)據(jù)及其

10、它協(xié)議相關(guān)控制信息。CPU訪問消息RAM中任何一條消息對(duì)象都必須通過消息對(duì)象接口寄存器完成。CAN控制器中共有兩套消息對(duì)象接口寄存器IF1和IF2。IF1和IF2除了在測(cè)試模式下的用法有所不同外,在正常工作時(shí)用法相同。可以將一套用于將數(shù)據(jù)寫入消息RAM,另一套用于從消息RAM中讀取數(shù)據(jù)。在此,只介紹IF1寄存器組的用法。1 IF1命令請(qǐng)求寄存器(索引地址0x08)Message Number為消息對(duì)象的編號(hào),有效值為0x010x20,分別對(duì)應(yīng)32個(gè)消息對(duì)象,用于設(shè)定要訪問的消息對(duì)象的編號(hào)。CPU向命令請(qǐng)求寄存器中寫入消息編號(hào)后,消息就在IF1寄存器組與消息RAM之間開始傳送。隨著寫操作,Bus

11、y位自動(dòng)置1,傳送過程完成后,Busy自動(dòng)清0。因此,必須在完成IF1寄存器組中其它寄存器的設(shè)置后,再向IF1命令請(qǐng)求寄存器寫入消息編號(hào)。2 IF1命令掩碼寄存器(索引地址0x09)IF1命令掩碼寄存器中的控制位指定傳輸方向,并選擇消息對(duì)象的哪些位作為數(shù)據(jù)傳輸?shù)哪康幕蛟?。WR/RD 讀/寫 1 寫:數(shù)據(jù)從IF1送到消息RAM中 0 讀:數(shù)據(jù)從消息送到IF1Mask 存取Mask位 1 傳輸Identifier MaskMdirMXtd位 0 屏蔽位不變化Arb 存取仲裁位 1 傳輸Identifier MaskDirXtdMsgval位0 仲裁位不變化Control 存取控制位 1 傳輸控制位

12、到消息RAM中0 控制位不變化ClrIntPnd 清除中斷請(qǐng)求位 讀操作時(shí) 1 清除消息RAM中的IntPnd位 0 不改變IntPnd位 在寫操作時(shí),此位被忽略TxRqst/NewDat 存取傳輸請(qǐng)求位 讀操作時(shí) 1 清除消息對(duì)象中的NewDat位0 不改變NewDat位 寫操作時(shí) 1 將傳輸請(qǐng)求位置10 不改變傳輸請(qǐng)求位Data A 存取數(shù)據(jù)字節(jié)031 傳輸數(shù)據(jù)字節(jié)03 0 不改變數(shù)據(jù)字節(jié)03Data B 存取數(shù)據(jù)字節(jié)471 傳輸數(shù)據(jù)字節(jié)47 0 不改變數(shù)據(jù)字節(jié)473 IF1掩碼1(索引地址0x0a)、IF1掩碼2(索引地址0x0b)Msk28Msk0 1 相應(yīng)的位使用接受過濾0 消息對(duì)象

13、的ID號(hào)中對(duì)應(yīng)位不用于接受過濾MXtd 1 在接受過濾中使用擴(kuò)展ID號(hào) 0 不使用擴(kuò)展ID號(hào)MDir 1 消息方向位Dir用于接受過濾中 0 消息方向位Dir在接受過濾中不使用4 IF1仲裁1(索引地址0x0c)、IF1仲裁2(索引地址0x0d)ID28ID0 消息對(duì)象的ID號(hào) 標(biāo)準(zhǔn)幀只使用ID28ID18MsgVal 1 該消息對(duì)象已經(jīng)配置,消息處理器納入處理 0 消息處理器不考慮該消息對(duì)象Xtd 1 使用29位ID號(hào)(擴(kuò)展幀) 0 使用11位ID號(hào)(標(biāo)準(zhǔn)幀) 下井儀器中一律采用標(biāo)準(zhǔn)幀Dir 1 消息對(duì)象方向?yàn)榘l(fā)送,消息對(duì)象作為數(shù)據(jù)幀傳送 0 消息對(duì)象方向?yàn)榻邮眨盏狡ヅ銲D號(hào)的數(shù)據(jù)幀時(shí),存

14、儲(chǔ)在該消息對(duì)象中4 IF1消息控制(索引地址0x0e)NewDat 1 消息處理器或CPU向消息對(duì)象中寫入了新的數(shù)據(jù)MsgLst 1 CPU丟失了消息IntPnd 1 該消息對(duì)象是中斷源UMask 1 使用屏蔽(Msk28Msk0,MXtd,Mdir)作為接受過濾TxIE 1 成功地發(fā)送一條消息RxIE 1 成功地接收一條消息RmtEn 1 遠(yuǎn)程幀使能 下井儀中不使用遠(yuǎn)程幀TxRqst 1 該消息對(duì)象請(qǐng)求發(fā)送,尚未完成Eob 1 單個(gè)的消息對(duì)象或一個(gè)FIFO緩存的最后一個(gè)消息對(duì)象DLC3-0 數(shù)據(jù)長度 085 IF1數(shù)據(jù)A1、A2、B1、B2 8字節(jié)有效數(shù)據(jù)2.2.3.3 消息處理器寄存器這些

15、只讀寄存器用于向CPU提供有關(guān)消息對(duì)象的信息消息RAM中可以存儲(chǔ)32條消息對(duì)象,每個(gè)消息對(duì)象都包含了2.2.3.2中說明的可與IF1交互的信息位。消息處理器寄存器的所有信息都是32位,每位分別對(duì)應(yīng)一條消息對(duì)象。1 發(fā)送請(qǐng)求1、發(fā)送請(qǐng)求21 說明該消息對(duì)象被請(qǐng)求發(fā)送,還沒有完成發(fā)送2 新數(shù)據(jù)1、新數(shù)據(jù)21 說明該消息對(duì)象中寫入了新數(shù)據(jù)CPU可以通過讀取該位,檢查哪個(gè)消息對(duì)象的數(shù)據(jù)部分被更新了。3 中斷標(biāo)志1、中斷標(biāo)志21 指明該消息對(duì)象是一個(gè)中斷源4 消息有效1、消息有效21 該消息已經(jīng)配置好,消息處理器予以考慮3、軟件編程示例軟件編程需要實(shí)現(xiàn)三個(gè)功能:1 初始化(設(shè)定位定時(shí)寄存器及消息對(duì)象)2

16、 發(fā)送消息3 讀取接收的消息3.1 初始化位定時(shí)寄存器示例 mov sfrpage,#1 ; 將Sfrpage指向can0page頁 mov can0cn,#41h ; init位1 CCE1 允許寫位定時(shí)寄存器 mov can0adr,#3 ; 地址寄存器指向位定時(shí)寄存器 mov can0dath,#18h ; 先寫高字節(jié) mov can0datl,#40h ; 位定時(shí)寄存器設(shè)為0x18403.2 初始化接收消息對(duì)象示例初始化對(duì)象的作用是設(shè)置消息對(duì)象需要實(shí)現(xiàn)的功能,即設(shè)置CAN控制器內(nèi)部的消息RAM中某個(gè)消息對(duì)象的各個(gè)位域值。 設(shè)定該對(duì)象用于發(fā)送還是接收; 設(shè)定該對(duì)象接收或發(fā)送的ID號(hào),如用

17、于接收還需要設(shè)定是否使用接受過濾功能;初始化對(duì)象通過IF1或IF2寄存器組完成設(shè)置,首先確定要設(shè)置的消息對(duì)象的性質(zhì)。在此,假設(shè)初始化消息RAM(共20個(gè)消息對(duì)象)中的第一個(gè)對(duì)象,作用是只接受ID11的數(shù)據(jù)。假設(shè)我們用IF1寄存器組設(shè)置消息對(duì)象。首先確定消息對(duì)象的各個(gè)位域的值:ID11 轉(zhuǎn)換為2進(jìn)制數(shù)為1011b以下根據(jù)要求確定IF1各個(gè)寄存器的值:IF1 Mask1(掩碼)的值為 0000h (因?yàn)槲覀兗s定使用11位ID的標(biāo)準(zhǔn)幀,所以有用的ID位僅為ID28ID18,Mask150為未用位,設(shè)為0)IF1 Mask2 的值為 1FFCh (含義:MXtd0 表示在接受過濾中不使用擴(kuò)展ID號(hào),M

18、Dir0 表示在接受過濾中不考慮數(shù)據(jù)傳輸方向,后面為11位1表示只接受與IDIF1Arb中設(shè)定ID號(hào)的數(shù)據(jù)幀,最后兩位對(duì)應(yīng)與ID17、ID16因未使用設(shè)為0)IF1 Arb1(仲裁)的值為0000h(理由同)IF1 Arb2的值為 802Ch (含義:MsgVal1表示設(shè)置該消息RAM有效,如該位0,相當(dāng)與該消息RAM不在使用中;Dir0表示設(shè)定為接受消息;后面為ID號(hào)4的二進(jìn)制數(shù),因?yàn)樽畹蛢晌粸镮D17、ID16)IF1消息控制值為 1088h (含義:UMask1表示設(shè)置消息過濾功能;Eob1表示該消息對(duì)象不屬于一個(gè)FIFO;DLC3-0=8表示發(fā)送8字節(jié)數(shù)據(jù),不影響接收過程,接收完成后,

19、自動(dòng)填充接收到的有效字節(jié)數(shù))。 IF1命令掩碼寄存器值為00F0h (含義:WR1表示從IF1向消息RAM寫;Mask1表示傳輸ID MaskMdirMXtd到消息對(duì)象中;Arb1表示傳輸IDDirXtdMsgval到消息對(duì)象中;Control1表示傳輸控制位到消息對(duì)象中)IF1命令請(qǐng)求寄存器值為0001h(含義傳送IF1寄存器組內(nèi)容到第一個(gè)報(bào)文對(duì)象中;這個(gè)寄存器必須在設(shè)置完IF1的其它寄存器后再寫,因?yàn)橐坏┫蜻@個(gè)寄存器中寫入值后,IF1寄存器組與消息RAM就開始交換數(shù)據(jù)了。以下是程序代碼: mov sfrpage,#1 mov can0adr,#9 mov can0dath,#00h ; 這

20、句可以省略 mov can0datl,0f0h ; 執(zhí)行完后can0adr自動(dòng)加1 mov can0dath,#0 mov can0datl,#0 mov can0dath,ifxmask2h mov can0datl,ifxmask2l mov can0dath,#0 mov can0datl,#0 mov can0dath,1fh mov can0datl,fch mov can0dath,00h mov can0datl,00h mov can0dath,#80h mov can0datl,#2ch mov can0dath,#10h mov can0datl,#08h mov can0

21、adr,#8 mov can0dath,#00h ; 這句可以省略 mov can0datl,#01h3.3 讀取消息示例在此,假設(shè)上述設(shè)置中,消息RAM中的第一個(gè)對(duì)象中收到了新的數(shù)據(jù),可通過以下程序讀取。 在此,我們只通過IF2寄存器組讀取數(shù)據(jù),而不考慮其它位的讀取。將讀取的8字節(jié)數(shù)據(jù)放在30h37h單元中,有效字節(jié)個(gè)數(shù)放在38h單元中。mov sfrpage,#1mov can0adr,#21hmov can0dath,#00h ; 這句可省略mov can0datl,#1fhmov can0adr,#20hmov can0dath,#00h ; 這句可省略mov can0datl,# 0

22、1hhere:mov a,can0dathjb acc.7,here ; 等待傳送完成mov can0adr,#26hmov a,can0datlanl a,#0fhmov 30h,can0dathmov 31h,can0datlmov 32h,can0dathmov 33h,can0datlmov 34h,can0dathmov 35h,can0datlmov 36h,can0dathmov 37h,can0datl3.4 初始化發(fā)送消息對(duì)象示例在此,假設(shè)初始化消息RAM(共20個(gè)消息對(duì)象)中的第一個(gè)對(duì)象,作用是發(fā)送ID11的數(shù)據(jù)。假設(shè)我們需要發(fā)送8字節(jié)數(shù)據(jù),用IF1寄存器組設(shè)置消息對(duì)象。首

23、先確定消息對(duì)象的各個(gè)位域的值:ID11 轉(zhuǎn)換為2進(jìn)制數(shù)為1011b以下根據(jù)要求確定IF1各個(gè)寄存器的值:IF1 Mask1(掩碼)的值對(duì)于發(fā)送無作用,可以不設(shè)置IF1 Mask2的值對(duì)于發(fā)送無作用,可以不設(shè)置IF1 Arb1(仲裁)的值為0000h(理由同)IF1 Arb2的值為 A02Ch (含義:MsgVal1表示設(shè)置該消息RAM有效,如該位0,相當(dāng)與該消息RAM不在使用中;Dir1表示設(shè)定為發(fā)送消息;后面為ID號(hào)4的二進(jìn)制數(shù),因?yàn)樽畹蛢晌粸镮D17、ID16)IF1消息控制值為 0088h (含義: Eob1表示該消息對(duì)象不屬于一個(gè)FIFO;DLC3-0=8表示發(fā)送8字節(jié)數(shù)據(jù),如果發(fā)送小于8字節(jié)數(shù)據(jù),則該為相應(yīng)值)。 IF1命令掩碼寄存器值為00b0h (含義:WR1表示從IF1向消息RAM寫; Arb1表示傳輸IDDirXtdMsgval到消息對(duì)象中;Control1表示傳輸控制位到消息對(duì)象中)IF1命令請(qǐng)求寄存器值為0001h(含義傳送IF1寄存器組內(nèi)容到第一

溫馨提示

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

評(píng)論

0/150

提交評(píng)論