CAN总线的使用_第1页
CAN总线的使用_第2页
CAN总线的使用_第3页
CAN总线的使用_第4页
CAN总线的使用_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CAN总线的使用1、硬件连接方式硬件电路如下图所示:CL4诃VCC231VDD1CANTX4:LHGC3 O.luFT260CANR 3GM1 G1ID1C2 47rFGND2GHD:1IN .iouiGNDCANHVCCCAMLEXLTU1DS0图中,D1 (IL712)是磁隔离器件,其作用为了使各下井仪之间实现电气隔 离。各下井仪需要为D1提供两组+ 5V电源,图中标为VCC1和VCC2。其中, VCC1为仪器内部数字电源,提供给单片机 C8051F041和其它数字电路;VCC2 是隔离电源,用于给IL712和TJA1050供电,电源电流应大于75mA。C1、C2为两组电源的滤波电容。D1

2、的2脚与C8051F041 (图中未画)的7 脚(CANTX )直接连接,D1的3脚与C8051F041的6脚(CANRX )直接连接。D2 (TJA1050)为CAN总线收发器,该器件应用 VCC2供电。C3为该器件 的滤波电容。D2的输出CANH (6脚)、CANL ( 7脚)直接连接到下井仪的总 线上。R1、R2、C4为CAN总线终端匹配电阻的接法,这三个器件只需要在处在 下井仪串上下两端的仪器中需要。即:在某仪器中,如果 CAN总线是贯通线, 则不能连接这三个器件,反之,如果在该仪器中,如果 CAN总线不是贯通线, 则需要连接这三个器件。输出的CANH和CANL应双绞。2、软件使用方法

3、编程者应该熟悉以下两本资料:C8051F040/1/2/3/4/5/6/7混合信号ISP FLASH微控制器数据手册BoschC_CAN UsersMa nual在下井仪中建议采用 C8051F041或C8051F040单片机,该单片机内部集成 了 Bosch CAN控制器。以下简要介绍C8051F04x单片机和Bosch CAN控制器及 其软件编程方法。2.1 C8041F04X单片机SFR的分页机制C8051F04x系列MCU对CIP-51内核和外设有几项关键性的改进, 提高了 整体性能。其中与编程密切相关的一点是使用了 SFR(特殊功能寄存器)分页机 制,允许器件将很多SFR映射到0X8

4、00XFF这个存储器空间。C8051F04x器件使用了 5个SFR页:0、1、2、3和F。使用特殊功能寄存 器页选择寄存器SFRPAGE来选择SFR页。因此,读、写一个 SFR的步骤为:1. 用SFRPAGE寄存器选择相应的 SFR页号。2. 用直接寻址方式读、写特殊功能寄存器。(与以前的用法相同)。使用CAN控制器时,需要将 SFRPAGE设置为1 (用指令mov sfrpage,#1)。 编程中用到的其它特殊功能寄存器可参看数据手册说明。2.2 C8041F04X单片机中CAN相关特殊功能寄存器参看数据手册第201203页。2.2.1 CAN控制器寄存器的访问方式可以直接通过访问一般SFR

5、方式访问的寄存器共有6个:CAN0CNCAN控制寄存器CAN0STACAN状态寄存器CAN0TSTCAN测试寄存器CAN0ADR寄存器索引地址CAN0DATH数据字高字节CAN0DATL数据字低字节其它CAN控制器寄存器只能通过 CAN0ADR、CAN0DATH、CAN0DATL 访问。访问方式:先向CAN0ADR中写入待访问CAN控制器寄存器的索引号,然 后通过CAN0DATH写入或读出高字节,通过 CAN0DATL写入或读出低字节。例如:0X5号寄存器其中写入0X1234h,可采用以下三条指令:mov can 0adr,#0x5mov can0 dath,#12hmov can0 datl

6、,#34h对于某些索引地址,在向can 0datl进行写入或读出操作后,can0adr有自动 加1功能,因此必须向操作 can0dath,再操作can0dat。CAN0CN、CAN0STA、CAN0TST也有索引地址,也可以通过地址索引方式 访问。2.2.3 CAN控制器寄存器组成CAN控制器寄存器可分为以下几类:223.1 CAN控制器协议相关寄存器1 CAN控制寄存器(索引地址二0x00)resresresresresresresresTestCCEDARCANIFEIESIEIEInitrrrrrrrrrwrw rwr rw rw rw rwTest= 1测试模式 Test= 0正常工作

7、模式 一般将Test位置0CCE= 1时可以控制更改位定时寄存器一般将CCE位置0DAR禁止自动重发功能使用中将该位置1CANIF CAN中断标志EIE错误中断使能SIE 状态中断使能IECAN中断使能Init初始化时将该位置1,正常工作时将该位置02 CAN状态寄存器(索引地址二0x01 )resresresresresresresResBOffEWarnEPassRxOKTxOKLECrrrrrrrR rrrrw rwrw该寄存器反映CAN控制器的状态。BOff处于离线状态(二1)EWarn警告状态(二1说明错误计数器中至少有一个达到错误警告的极限值)EPass 处于被动错误状态RxOK

8、自上次这位被清0后,又成功地收到一条消息TxOK自上次这位被清0后,又成功地发送一条消息LEC CAN总线上最后一次错误的类型3 CAN错误计数器(索引地址二0x02 )RPREC6 0TEC7 0rRrRP接收被动错误达到CAN协议规定的被动错误水平(二1)REC6 -0 接收错误计数器,记录接收错误的次数TEC7 -0 发送错误计数器,记录发送错误的次数4 CAN位定时寄存器(索引地址二0x03)resTseg2Tseg1SJWBRPrrwrwrwrw该寄存器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各 位含义可参看CAN控制器用户手册。5 CAN测试寄存器(索引地址二0x0

9、4)resresresresresresresResRxTx1Tx0LbackSile ntBasicresresrrrrrrrRrrwrw rw rw rw r r 该寄存器只有在CAN控制寄存器中的Test位二1时才有效,用于测试CAN 总线的通讯功能,在正常工作时不使用。6 CAN位定时扩展寄存器(索引地址二0x06)resresresresresresresresresresresresBRPErrrrrrrrrr rrrw该寄存器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各 位含义可参看CAN控制器用户手册。223.2消息对象接口寄存器CAN控制器中有一块消息RAM,可

10、以存储32条消息对象,每条消息对象 中包含8字节有用数据及其它协议相关控制信息。CPU访问消息RAM中任何一 条消息对象都必须通过消息对象接口寄存器完成。CAN控制器中共有两套消息对象接口寄存器 IF1和IF2。IF1和IF2除了在 测试模式下的用法有所不同外,在正常工作时用法相同。可以将一套用于将数据 写入消息RAM,另一套用于从消息RAM中读取数据。在此,只介绍IF1寄存器组的用法。1 IF1命令请求寄存器(索引地址二0x08 )1F1 C ommand Request Repiter 1514 13 12 II 109 S 16543210 .xl l & 17x10)Busy1U51T

11、5ITSres1X5reiIC5rc?resIF 2 Coninimd Reqiwti Reeivie:Nfre?res躬resie1VSre?Xumb*i0.-1 kfaddi申殆A. 0x12)resAibC onrroClrljn 护 ndTxKqM NwD;iDam AData BIt- 2(- onmiAndOxJj & Ox 12 re年RRP31祜kAibc Qinhulc iFlmrPndI啟q师VwDfttData 4Data Rirjrrrrr nv rw m rwn、rw iw rwWR/RD读/写1 写:数据从IF1送到消息RAM中 0读:数据从消息送到IF1Mask

12、存取Mask位1 传输 Identifier Mask + Mdir + MXtd 位0屏蔽位不变化Arb存取仲裁位1 传输 Identifier Mask + Dir + Xtd + Msgval 位0仲裁位不变化Control存取控制位1 传输控制位到消息 RAM中0控制位不变化ClrIntPnd清除中断请求位读操作时 1 清除消息RAM中的IntPnd位0 不改变IntPnd位在写操作时,此位被忽略TxRqst/NewDat存取传输请求位读操作时1 清除消息对象中的 NewDat位0 不改变 NewDat位写操作时1 将传输请求位置10不改变传输请求位Data A 存取数据字节 0 31

13、传输数据字节0 30 不改变数据字节0 3Data B存取数据字节4 71传输数据字节4 70 不改变数据字节473 IF1掩码1 (索引地址=0x0a)、IF1掩码2 (索引地址=0x0b)Msk28 Msk01相应的位使用接受过滤0消息对象的ID号中对应位不用于接受过滤MXtd1在接受过滤中使用扩展ID号0不使用扩展ID号Fl Mask 1 Register15141312 11 10 9B 765432 IQMskl5 0LF1 XLisk 2 Rjduslei (addresses OxLOxreshkZS-1fiIF? Rpiter(address 旳暫 & 5卜)MSK154疋Ma

14、sk 2 RegisterMXrdMDllre?MsklB 160x17 & OxlCrwriw iw m nviw twnv i诵iw mMDir1消息方向位Dir用于接受过滤中0消息方向位Dir在接受过滤中不使用4 IF1仲裁1 (索引地址二OxOc )、IF1仲裁2 (索引地址二OxOd )IF1 Arbitration 1faddre歸咋Cm旧矗 侧1引15141312 11 10G 16543210ID5-0111 Arbitration 2 Regiiter (Mdit?沙已、OkJB & OxIA)MsValXri54Lt 2 Aibitraiion 2 Register (rt

15、dilioso 0x4B & 0x4A)Ms 寶alXtdDi1D2S 16rwrar rw itv rw rw rw nv rw nv nv rw nv rw rw rWID28 ID0 消息对象的ID号 标准帧只使用ID28 ID18MsgVal1该消息对象已经配置,消息处理器纳入处理0消息处理器不考虑该消息对象Xtd1使用29位ID号(扩展帧)0使用11位ID号(标准帧)下井仪器中一律采用标准帧Dir1消息对象方向为发送,消息对象作为数据帧传送0消息对象方向为接收,收到匹配ID号的数据帧时,存储在该消息 对象中4 IF1消息控制(索引地址二0x0e)旺 L Message Control

16、RegiUer (addiesses OxlD & 0x101jL41J12LL 10987654J 2 0NDnrlEgr.-rIntPndIM缶TxIF RtTFRwFnT TR q-TFflBWTIMT)T c? aH2Control ResterlutludlAUik1x11 HxILItintLnJxRqtLaBl*$ie$DLC3-0讥山OxJD & Ox 1C)rurwrw twrwrrrrwNewDat 1消息处理器或CPU向消息对象中写入了新的数据MsgLst 1 CPU丢失了消息In tP nd1该消息对象是中断源UMask 1 使用屏蔽(Msk28 Msk0,MXtd,M

17、dir)作为接受过滤io 9 a:.心忖卞井TxIE 1成功地发送一条消息TsRqst2-17TRXIE湎甲。成功地接收一条消息12 11 RmtEn竽i远程帧使能袴Eob 1单个的消息对象或一个FIFO缓存的最后一个消息对象DLC3-0 数据长度0 85 IF1 数据 A1、A2、B1、B28字节有效数据223.3消息处理器寄存器这些只读寄存器用于向CPU提供有关消息对象的信息消息RAM中可以存储32条消息对象,每个消息对象都包含了2.2.3.2中说明的可与IF1交互的信息位。消息处理器寄存器的所有信息都是 32位,每位分别对应一条消息对象。1发送请求1、发送请求2TtBiiswisiqn

18、Request 1 Rfguter &XL l & OxSO)1514 13 12 It 109 S 76543210TxRqstl# 9riRqslfl 1TraiKiiiis-iiofi Reqtiebt 2sterTxRqst2-kl71说明该消息对象被请求发送,还没有完成发送2新数据1、新数据2New Dhca 1 Reeibin1514 B 12 1110 S76543210XenDatLC-?euDatS-iNe1 D(a 2 RtgisieioiD;i?2 25D;i24-170s02)rr1说明该消息对象中写入了新数据CPU可以通过读取该位,检查哪个消息对象的数据部分被更新了3

19、中断标志1、中断标志2titerrupl PeuJiiLir 1(cclosses DxAl Jr UxAO t1514 B 1211 L0 9 S 765 身 3210InrPlll6 9rntPndS JLntemipt Psuduig 2 Register (atklress OxAW & flxA2)IntPudJZ-Z?lntPnd24-17rr1指明该消息对象是一个中断源4消息有效1消息有效2伽谄獣 Vfilid 1 RegistPi- 但山血注肌OxBl Ar OxBO)15 14 1312 ll 10986543210Valid RiislfrIr1 该消息已经配置好,消息处理

20、器予以考虑3、软件编程示例软件编程需要实现三个功能:1初始化(设定位定时寄存器及消息对象)2发送消息3读取接收的消息3.1初始化位定时寄存器示例movsfrpage,#1;将 Sfrpage指向 can0page页movcan0cn,#41h ;init位=1 CCE= 1允许写位定时寄存器movcan0 adr,#3;地址寄存器指向位定时寄存器movcan 0dath,#18h;先写咼字节movcan0 datl,#40h;位定时寄存器设为0x18403.2初始化接收消息对象示例初始化对象的作用是设置消息对象需要实现的功能,即设置CAN控制器内部的消息RAM中某个消息对象的各个位域值。 设定

21、该对象用于发送还是接收; 设定该对象接收或发送的ID号,如用于接收还需要设定是否使用接受 过滤功能;初始化对象通过IF1或IF2寄存器组完成设置,首先确定要设置的消息对 象的性质。在此,假设初始化消息RAM(共20个消息对象)中的第一个对象,作用是 只接受ID二11的数据。假设我们用IF1寄存器组设置消息对象。首先确定消息对象的各个位域的值:ID = 11转换为2进制数为1011b以下根据要求确定IF1各个寄存器的值: IF1 Mask1 (掩码)的值为OOOOh(因为我们约定使用11位ID的标准帧,所以有用的ID位仅为ID28ID18,Mask15- 0为未用位,设为0) IF1 Mask2

22、的值为仆FCh (含义:MXt4 0表示在接受过滤中不使用扩 展ID号,MDir = 0表示在接受过滤中不考虑数据传输方向, 后面为11位1表示 只接受与ID = IF1Arb中设定ID号的数据帧,最后两位对应与ID17、ID16因未 使用设为0) IF1 Arb1 (仲裁)的值为0000h (理由同) IF1 Arb2的值为802Ch (含义:MsgVal= 1表示设置该消息RAMt效, 如该位=0,相当与该消息RAM在使用中;Dir = 0表示设定为接受消息;后面 为ID号X 4的二进制数,因为最低两位为ID17、ID16) IF1消息控制值为1088h (含义:UMasA 1表示设置消息

23、过滤功能;Eob 二1表示该消息对象不属于一个 FIFO; DLC3-0=8表示发送8字节数据,不影响 接收过程,接收完成后,自动填充接收到的有效字节数)。 IF1命令掩码寄存器值为00F0h (含义:WA 1表示从IF1向消息RAM 写;Mask= 1表示传输ID Mask + Mdir + MXtd到消息对象中;Arb = 1表示传输 ID + Dir + Xtd + Msgval到消息对象中;Control = 1表示传输控制位到消息对象 中) IF1命令请求寄存器值为0001h(含义传送IF1寄存器组内容到第一个报 文对象中;这个寄存器必须在设置完IF1的其它寄存器后再写,因为一旦向这

24、个 寄存器中写入值后,IF1寄存器组与消息RAM就开始交换数据了。以下是程序代码:mov sfrpage,#1mov can0 adr,#9mov can 0dath,#00h ;这句可以省略mov can0datl,0f0h ;执行完后 can0adr 自动加 1mov can0 dath,#0mov can0 datl,#0mov can0 dath,ifxmask2hmov can0 datl,ifxmask2lmov can0 dath,#0mov can0 datl,#0mov can0 dath,1fhmov can0 datl,fchmov can0 dath,00hmov ca

25、n 0datl,00hmov can0 dath,#80hmov can0 datl,#2chmov can0 dath,#10hmov can0 datl,#08hmov can0 adr,#8 mov can 0dath,#00h ;这句可以省略mov can0 datl,#01h3.3读取消息示例在此,假设上述设置中,消息RAM中的第一个对象中收到了新的数据,可通过以下程序读取。在此,我们只通过IF2寄存器组读取数据,而不考虑其它位的读取。将读取 的8字节数据放在30h37h单元中,有效字节个数放在 38h单元中。movsfrpage,#1movcan 0adr,#21hmovcan 0

26、dath,#00h;这句可省略movcan 0datl,#1fhmovcan 0adr,#20hmovcan 0dath,#00h;这句可省略movcan 0datl,# 01hhere:mov a,ca nO dathjb acc.7,here ;等待传送完成mov canO adr,#26hmov a,ca nO datlanl a,#Ofhmov 30h,ca nO dathmov 31h,ca nOdatlmov 32h,ca nO dathmov 33h,ca nO datlmov 34h,ca nO dathmov 35h,ca nO datlmov 36h,ca nO dathm

27、ov 37h,ca nO datl3.4初始化发送消息对象示例在此,假设初始化消息RAM(共20个消息对象)中的第一个对象,作用是 发送ID二11的数据。假设我们需要发送8字节数据,用IF1寄存器组设置消息 对象。首先确定消息对象的各个位域的值:ID = 11转换为2进制数为1011b以下根据要求确定IF1各个寄存器的值: IF1 Mask1 (掩码)的值对于发送无作用,可以不设置 IF1 Mask2的值对于发送无作用,可以不设置 IF1 Arb1 (仲裁)的值为OOOOh (理由同) IF1 Arb2的值为A02Ch (含义:MsgVal= 1表示设置该消息RAMt效, 如该位=0,相当与该消息RAM在使用中;Dir = 1表示设定为发送消息;后面 为ID号X 4的二进制数,因为最低两位为ID17、ID16) IF1消息控制值为0088h (含义:Eob = 1表示该消息对象不属于一个 FIFO; DLC3-0=8表示发送8字节数据,如果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论