




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、CAN總線的使用1、硬件連接方式硬件電路如下圖所示:圖中,D1(IL712)是磁隔離器件,其作用為了使各下井儀之間實現(xiàn)電氣隔離。各下井儀需要為D1提供兩組5V電源,圖中標為VCC1和VCC2。其中,VCC1為儀器內(nèi)部數(shù)字電源,提供給單片機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總線終端匹配電阻的接法,這三個器件只需要在處在下井儀串上下兩端的儀器中需要。即:在某儀器中,如果CAN總線是貫通線,則不能連接這三個器件,反之,如果在該儀器中,如果CAN總線不是貫通線,則需要連接這三個器件。輸出的CANH和CANL應(yīng)雙絞。2、軟件使用方法編程者應(yīng)該熟悉以下兩本資料:C8051F040/1/2/3/4/5/6/7混合信號ISP FLASH微控制器數(shù)據(jù)手冊Boschs C_CAN Users Manual在下井儀中建議采用C8051F041或C8051F040單片機,該單片機內(nèi)部
3、集成了Bosch CAN控制器。以下簡要介紹C8051F04x單片機和Bosch CAN控制器及其軟件編程方法。2.1 C8041F04x單片機SFR的分頁機制C8051F04x系列MCU對CIP51內(nèi)核和外設(shè)有幾項關(guān)鍵性的改進,提高了整體性能。其中與編程密切相關(guān)的一點是使用了SFR(特殊功能寄存器)分頁機制,允許器件將很多SFR映射到0X800XFF這個存儲器空間。C8051F04x器件使用了5個SFR頁:0、1、2、3和F。使用特殊功能寄存器頁選擇寄存器SFRPAGE來選擇SFR頁。因此,讀、寫一個SFR的步驟為:1. 用SFRPAGE寄存器選擇相應(yīng)的SFR頁號。2. 用直接尋址方式讀、寫
4、特殊功能寄存器。(與以前的用法相同)。使用CAN控制器時,需要將SFRPAGE設(shè)置為1(用指令mov sfrpage,#1)。編程中用到的其它特殊功能寄存器可參看數(shù)據(jù)手冊說明。2.2 C8041F04x單片機中CAN相關(guān)特殊功能寄存器參看數(shù)據(jù)手冊第201203頁。2.2.1 CAN控制器寄存器的訪問方式可以直接通過訪問一般SFR方式訪問的寄存器共有6個:CAN0CN CAN控制寄存器CAN0STA CAN狀態(tài)寄存器CAN0TST CAN測試寄存器CAN0ADR 寄存器索引地址CAN0DATH 數(shù)據(jù)字高字節(jié)CAN0DATL 數(shù)據(jù)字低字節(jié)其它CAN控制器寄存器只能通過CAN0ADR、CAN0DAT
5、H、CAN0DATL訪問。訪問方式:先向CAN0ADR中寫入待訪問CAN控制器寄存器的索引號,然后通過CAN0DATH寫入或讀出高字節(jié),通過CAN0DATL寫入或讀出低字節(jié)。例如:0X5號寄存器其中寫入0X1234h,可采用以下三條指令: mov can0adr,#0x5 mov can0dath,#12h mov can0datl,#34h對于某些索引地址,在向can0datl進行寫入或讀出操作后,can0adr有自動加1功能,因此必須向操作can0dath,再操作can0datl。CAN0CN、CAN0STA、CAN0TST也有索引地址,也可以通過地址索引方式訪問。2.2.3 CAN控制器
6、寄存器組成CAN控制器寄存器可分為以下幾類:2.2.3.1 CAN控制器協(xié)議相關(guān)寄存器1 CAN控制寄存器(索引地址0x00)1514131211109876543210resresresresresresresresTestCCEDARCANIFEIESIEIEInitrrrrrrrrrwrwrwrrwrwrwrwTest1 測試模式 Test0 正常工作模式 一般將Test位置0CCE1時可以控制更改位定時寄存器 一般將CCE位置0DAR 禁止自動重發(fā)功能 使用中將該位置1CANIF CAN中斷標志EIE 錯誤中斷使能SIE 狀態(tài)中斷使能IE CAN中斷使能Init 初始化時將該位置1,正
7、常工作時將該位置02 CAN狀態(tài)寄存器(索引地址0x01)1514131211109876543210resresresresresresresResBOffEWarnEPassRxOKTxOKLECrrrrrrrRrrrrwrwrw該寄存器反映CAN控制器的狀態(tài)。BOff 處于離線狀態(tài)(1)EWarn 警告狀態(tài)(1說明錯誤計數(shù)器中至少有一個達到錯誤警告的極限值)EPass 處于被動錯誤狀態(tài)RxOK 自上次這位被清0后,又成功地收到一條消息TxOK 自上次這位被清0后,又成功地發(fā)送一條消息LEC CAN總線上最后一次錯誤的類型3 CAN錯誤計數(shù)器(索引地址0x02)15141312111098
8、76543210RPREC60TEC70rRrRP 接收被動錯誤達到CAN協(xié)議規(guī)定的被動錯誤水平(1)REC60 接收錯誤計數(shù)器,記錄接收錯誤的次數(shù)TEC70 發(fā)送錯誤計數(shù)器,記錄發(fā)送錯誤的次數(shù)4 CAN位定時寄存器(索引地址0x03)1514131211109876543210resTseg2Tseg1SJWBRPrrwrwrwrw該寄存器的設(shè)置與CAN總線通訊的波特率有關(guān),各下井儀需統(tǒng)一設(shè)定,各位含義可參看CAN控制器用戶手冊。5 CAN測試寄存器(索引地址0x04)1514131211109876543210resresresresresresresResRxTx1Tx0LbackSil
9、entBasicresresrrrrrrrRrrwrwrwrwrwrr該寄存器只有在CAN控制寄存器中的Test位1時才有效,用于測試CAN總線的通訊功能,在正常工作時不使用。6 CAN位定時擴展寄存器(索引地址0x06)1514131211109876543210resresresresresresresresresresresresBRPErrrrrrrrrrrrrw該寄存器的設(shè)置與CAN總線通訊的波特率有關(guān),各下井儀需統(tǒng)一設(shè)定,各位含義可參看CAN控制器用戶手冊。2.2.3.2 消息對象接口寄存器CAN控制器中有一塊消息RAM,可以存儲32條消息對象,每條消息對象中包含8字節(jié)有用數(shù)據(jù)及其
10、它協(xié)議相關(guān)控制信息。CPU訪問消息RAM中任何一條消息對象都必須通過消息對象接口寄存器完成。CAN控制器中共有兩套消息對象接口寄存器IF1和IF2。IF1和IF2除了在測試模式下的用法有所不同外,在正常工作時用法相同??梢詫⒁惶子糜趯?shù)據(jù)寫入消息RAM,另一套用于從消息RAM中讀取數(shù)據(jù)。在此,只介紹IF1寄存器組的用法。1 IF1命令請求寄存器(索引地址0x08)Message Number為消息對象的編號,有效值為0x010x20,分別對應(yīng)32個消息對象,用于設(shè)定要訪問的消息對象的編號。CPU向命令請求寄存器中寫入消息編號后,消息就在IF1寄存器組與消息RAM之間開始傳送。隨著寫操作,Bus
11、y位自動置1,傳送過程完成后,Busy自動清0。因此,必須在完成IF1寄存器組中其它寄存器的設(shè)置后,再向IF1命令請求寄存器寫入消息編號。2 IF1命令掩碼寄存器(索引地址0x09)IF1命令掩碼寄存器中的控制位指定傳輸方向,并選擇消息對象的哪些位作為數(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 清除中斷請求位 讀操作時 1 清除消息RAM中的IntPnd位 0 不改變IntPnd位 在寫操作時,此位被忽略TxRqst/NewDat 存取傳輸請求位 讀操作時 1 清除消息對象中的NewDat位0 不改變NewDat位 寫操作時 1 將傳輸請求位置10 不改變傳輸請求位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 消息對象
13、的ID號中對應(yīng)位不用于接受過濾MXtd 1 在接受過濾中使用擴展ID號 0 不使用擴展ID號MDir 1 消息方向位Dir用于接受過濾中 0 消息方向位Dir在接受過濾中不使用4 IF1仲裁1(索引地址0x0c)、IF1仲裁2(索引地址0x0d)ID28ID0 消息對象的ID號 標準幀只使用ID28ID18MsgVal 1 該消息對象已經(jīng)配置,消息處理器納入處理 0 消息處理器不考慮該消息對象Xtd 1 使用29位ID號(擴展幀) 0 使用11位ID號(標準幀) 下井儀器中一律采用標準幀Dir 1 消息對象方向為發(fā)送,消息對象作為數(shù)據(jù)幀傳送 0 消息對象方向為接收,收到匹配ID號的數(shù)據(jù)幀時,存
14、儲在該消息對象中4 IF1消息控制(索引地址0x0e)NewDat 1 消息處理器或CPU向消息對象中寫入了新的數(shù)據(jù)MsgLst 1 CPU丟失了消息IntPnd 1 該消息對象是中斷源UMask 1 使用屏蔽(Msk28Msk0,MXtd,Mdir)作為接受過濾TxIE 1 成功地發(fā)送一條消息RxIE 1 成功地接收一條消息RmtEn 1 遠程幀使能 下井儀中不使用遠程幀TxRqst 1 該消息對象請求發(fā)送,尚未完成Eob 1 單個的消息對象或一個FIFO緩存的最后一個消息對象DLC3-0 數(shù)據(jù)長度 085 IF1數(shù)據(jù)A1、A2、B1、B2 8字節(jié)有效數(shù)據(jù)2.2.3.3 消息處理器寄存器這些
15、只讀寄存器用于向CPU提供有關(guān)消息對象的信息消息RAM中可以存儲32條消息對象,每個消息對象都包含了2.2.3.2中說明的可與IF1交互的信息位。消息處理器寄存器的所有信息都是32位,每位分別對應(yīng)一條消息對象。1 發(fā)送請求1、發(fā)送請求21 說明該消息對象被請求發(fā)送,還沒有完成發(fā)送2 新數(shù)據(jù)1、新數(shù)據(jù)21 說明該消息對象中寫入了新數(shù)據(jù)CPU可以通過讀取該位,檢查哪個消息對象的數(shù)據(jù)部分被更新了。3 中斷標志1、中斷標志21 指明該消息對象是一個中斷源4 消息有效1、消息有效21 該消息已經(jīng)配置好,消息處理器予以考慮3、軟件編程示例軟件編程需要實現(xiàn)三個功能:1 初始化(設(shè)定位定時寄存器及消息對象)2
16、 發(fā)送消息3 讀取接收的消息3.1 初始化位定時寄存器示例 mov sfrpage,#1 ; 將Sfrpage指向can0page頁 mov can0cn,#41h ; init位1 CCE1 允許寫位定時寄存器 mov can0adr,#3 ; 地址寄存器指向位定時寄存器 mov can0dath,#18h ; 先寫高字節(jié) mov can0datl,#40h ; 位定時寄存器設(shè)為0x18403.2 初始化接收消息對象示例初始化對象的作用是設(shè)置消息對象需要實現(xiàn)的功能,即設(shè)置CAN控制器內(nèi)部的消息RAM中某個消息對象的各個位域值。 設(shè)定該對象用于發(fā)送還是接收; 設(shè)定該對象接收或發(fā)送的ID號,如用
17、于接收還需要設(shè)定是否使用接受過濾功能;初始化對象通過IF1或IF2寄存器組完成設(shè)置,首先確定要設(shè)置的消息對象的性質(zhì)。在此,假設(shè)初始化消息RAM(共20個消息對象)中的第一個對象,作用是只接受ID11的數(shù)據(jù)。假設(shè)我們用IF1寄存器組設(shè)置消息對象。首先確定消息對象的各個位域的值:ID11 轉(zhuǎn)換為2進制數(shù)為1011b以下根據(jù)要求確定IF1各個寄存器的值:IF1 Mask1(掩碼)的值為 0000h (因為我們約定使用11位ID的標準幀,所以有用的ID位僅為ID28ID18,Mask150為未用位,設(shè)為0)IF1 Mask2 的值為 1FFCh (含義:MXtd0 表示在接受過濾中不使用擴展ID號,M
18、Dir0 表示在接受過濾中不考慮數(shù)據(jù)傳輸方向,后面為11位1表示只接受與IDIF1Arb中設(shè)定ID號的數(shù)據(jù)幀,最后兩位對應(yīng)與ID17、ID16因未使用設(shè)為0)IF1 Arb1(仲裁)的值為0000h(理由同)IF1 Arb2的值為 802Ch (含義:MsgVal1表示設(shè)置該消息RAM有效,如該位0,相當與該消息RAM不在使用中;Dir0表示設(shè)定為接受消息;后面為ID號4的二進制數(shù),因為最低兩位為ID17、ID16)IF1消息控制值為 1088h (含義:UMask1表示設(shè)置消息過濾功能;Eob1表示該消息對象不屬于一個FIFO;DLC3-0=8表示發(fā)送8字節(jié)數(shù)據(jù),不影響接收過程,接收完成后,
19、自動填充接收到的有效字節(jié)數(shù))。 IF1命令掩碼寄存器值為00F0h (含義:WR1表示從IF1向消息RAM寫;Mask1表示傳輸ID MaskMdirMXtd到消息對象中;Arb1表示傳輸IDDirXtdMsgval到消息對象中;Control1表示傳輸控制位到消息對象中)IF1命令請求寄存器值為0001h(含義傳送IF1寄存器組內(nèi)容到第一個報文對象中;這個寄存器必須在設(shè)置完IF1的其它寄存器后再寫,因為一旦向這個寄存器中寫入值后,IF1寄存器組與消息RAM就開始交換數(shù)據(jù)了。以下是程序代碼: mov sfrpage,#1 mov can0adr,#9 mov can0dath,#00h ; 這
20、句可以省略 mov can0datl,0f0h ; 執(zhí)行完后can0adr自動加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中的第一個對象中收到了新的數(shù)據(jù),可通過以下程序讀取。 在此,我們只通過IF2寄存器組讀取數(shù)據(jù),而不考慮其它位的讀取。將讀取的8字節(jié)數(shù)據(jù)放在30h37h單元中,有效字節(jié)個數(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ā)送消息對象示例在此,假設(shè)初始化消息RAM(共20個消息對象)中的第一個對象,作用是發(fā)送ID11的數(shù)據(jù)。假設(shè)我們需要發(fā)送8字節(jié)數(shù)據(jù),用IF1寄存器組設(shè)置消息對象。首
23、先確定消息對象的各個位域的值:ID11 轉(zhuǎn)換為2進制數(shù)為1011b以下根據(jù)要求確定IF1各個寄存器的值:IF1 Mask1(掩碼)的值對于發(fā)送無作用,可以不設(shè)置IF1 Mask2的值對于發(fā)送無作用,可以不設(shè)置IF1 Arb1(仲裁)的值為0000h(理由同)IF1 Arb2的值為 A02Ch (含義:MsgVal1表示設(shè)置該消息RAM有效,如該位0,相當與該消息RAM不在使用中;Dir1表示設(shè)定為發(fā)送消息;后面為ID號4的二進制數(shù),因為最低兩位為ID17、ID16)IF1消息控制值為 0088h (含義: Eob1表示該消息對象不屬于一個FIFO;DLC3-0=8表示發(fā)送8字節(jié)數(shù)據(jù),如果發(fā)送小于8字節(jié)數(shù)據(jù),則該為相應(yīng)值)。 IF1命令掩碼寄存器值為00b0h (含義:WR1表示從IF1向消息RAM寫; Arb1表示傳輸IDDirXtdMsgval到消息對象中;Control1表示傳輸控制位到消息對象中)IF1命令請求寄存器值為0001h(含義傳送IF1寄存器組內(nèi)容到第一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超市防損考試題及答案
- 2024年項目管理職業(yè)考試全景試題及答案
- 2025年注會復習進度安排的科學性試題及答案
- 證券從業(yè)資格證歷年真題及答案
- 揭示2025年證券從業(yè)資格證考試選題原則試題及答案
- 2024年項目管理變更請求試題及答案
- 2025年國際金融理財師考試知識更新的必要性試題及答案
- 注冊會計師考試復習策略試題及答案
- 2024年項目管理考試的準備計劃試題及答案
- 2024項目管理考試時間安排試題及答案
- 校內(nèi)蜜雪冰城調(diào)查分析報告
- 流行性感冒診療方案(2020版)課件
- 六年級道德與法治上冊 (我們受特殊保護)新課件
- 臍帶、胎盤蛻膜干細胞制備與儲存協(xié)議
- 關(guān)于藥店醫(yī)保整改報告范文六篇
- 灰砂磚合格證
- 第九講 全面依法治國PPT習概論2023優(yōu)化版教學課件
- 戰(zhàn)地衛(wèi)生及救護學習教案
- 2023年04月2023年北京外國語大學管理及教輔崗位招考聘用筆試題庫含答案解析
- 抗菌藥物臨床應(yīng)用指導原則(2023年版)
- 產(chǎn)品終檢記錄表
評論
0/150
提交評論