CAN总线地使用
《CAN总线地使用》由会员分享,可在线阅读,更多相关《CAN总线地使用(11页珍藏版)》请在装配图网上搜索。
1、word CAN总线的使用 1、硬件连接方式 硬件电路如如下图所示: 图中,D1〔IL712〕是磁隔离器件,其作用为了使各下井仪之间实现电气隔离。各下井仪需要为D1提供两组+5V电源,图中标为VCC1和VCC2。其中,VCC1为仪器部数字电源,提供应单片机C8051F041和其它数字电路;VCC2是隔离电源,用于给IL712和TJA1050供电,电源电流应大于75mA。 C1、C2为两组电源的滤波电容。D1的2脚与C8051F041〔图中未画〕的7脚〔CANTX〕直接连接,D1的3脚与C8051F041的6脚〔CANRX〕直接连
2、接。 D2〔TJA1050〕为CAN总线收发器,该器件应用VCC2供电。C3为该器件的滤波电容。D2的输出CANH〔6脚〕、CANL〔7脚〕直接连接到下井仪的总线上。 R1、R2、C4为CAN总线终端匹配电阻的接法,这三个器件只需要在处在下井仪串上下两端的仪器中需要。即:在某仪器中,如果CAN总线是贯穿线,如此不能连接这三个器件,反之,如果在该仪器中,如果CAN总线不是贯穿线,如此需要连接这三个器件。 输出的CANH和CANL应双绞。 2、软件使用方法 编程者应该熟悉以下两本资料: 《C8051F040/1/2/3/4/5/6/7混合信号
3、ISP FLASH微控制器数据手册》 《Bosch’s C_CAN User’s Manual》 在下井仪中建议采用C8051F041或C8051F040单片机,该单片机部集成了Bosch CAN控制器。以下简要介绍C8051F04x单片机和Bosch CAN控制器与其软件编程方法。 2.1 C8041F04x单片机SFR的分页机制 C8051F04x系列MCU对CIP-51核和外设有几项关键性的改良,提高了整体性能。其中与编程密切相关的一点是使用了SFR〔特殊功能存放器〕分页机制,允许器件将很多SFR映射到0X80~0XFF这个存储器空间。 C8051F04x器件使用了5个SFR页
4、:0、1、2、3和F。使用特殊功能存放器页选择存放器SFRPAGE来选择SFR页。因此,读、写一个SFR的步骤为: 1. 用SFRPAGE存放器选择相应的SFR页号。 2. 用直接寻址方式读、写特殊功能存放器。〔与以前的用法一样〕。 使用CAN控制器时,需要将SFRPAGE设置为1〔用指令mov sfrpage,#1〕。 编程中用到的其它特殊功能存放器可参看数据手册说明。 2.2 C8041F04x单片机中CAN相关特殊功能存放器 参看数据手册第201~203页。 2.2.1 CAN控制器存放器的访问方式 可以直接通过访问一般SFR方式访问的存放器共有6个: CAN0
5、 CAN控制存放器 CAN0STA CAN状态存放器 CAN0TST CAN测试存放器 CAN0ADR 存放器索引地址 CAN0DATH 数据字高字节 CAN0DATL 数据字低字节 其它CAN控制器存放器只能通过CAN0ADR、CAN0DATH、CAN0DATL访问。 访问方式:先向CAN0ADR中写入待访问CAN控制器存放器的索引号,然后通过CAN0DATH写入或读出高字节,通过CAN0DATL写入或读出低字节。 例如:0X5号存放器其中写入0X1234h,可采用以下三条指令: mov can0adr,#0x5 mov can0d
6、ath,#12h mov can0datl,#34h 对于某些索引地址,在向can0datl进展写入或读出操作后,can0adr有自动加1功能,因此必须向操作can0dath,再操作can0datl。 CAN0、CAN0STA、CAN0TST也有索引地址,也可以通过地址索引方式访问。 2.2.3 CAN控制器存放器组成 CAN控制器存放器可分为以下几类: 2.2.3.1 CAN控制器协议相关存放器 1 CAN控制存放器〔索引地址=0x00〕 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 res res
7、res res res res res res Test CCE DAR CANIF EIE SIE IE Init r r r r r r r r rw rw rw r rw rw rw rw Test=1 测试模式 Test=0 正常工作模式 一般将Test位置0 CCE=1时可以控制更改位定时存放器 一般将CCE位置0 DAR 禁止自动重发功能 使用中将该位置1 CANIF CAN中断标志 EIE 错误中断使能 SIE 状态中断使能 IE CAN中断使
8、能 Init 初始化时将该位置1,正常工作时将该位置0 2 CAN状态存放器〔索引地址=0x01〕 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 res res res res res res res Res BOff EWarn EPass RxOK TxOK LEC r r r r r r r R r r r rw rw rw 该存放器反映CAN控制器的状态。 BOff 处于离线状态〔=1〕 EWarn 警告状态〔=1说明错误计数器中至少有一个达到
9、错误警告的极限值〕 EPass 处于被动错误状态 RxOK 自上次这位被清0后,又成功地收到一条消息 TxOK 自上次这位被清0后,又成功地发送一条消息 LEC CAN总线上最后一次错误的类型 3 CAN错误计数器〔索引地址=0x02〕 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 RP REC6-0 TEC7-0 r R r RP 接收被动错误达到CAN协议规定的被动错误水平〔=1〕 REC6-0 接收错误计数器,记录接收错误的次数 TEC7-0 发送错误计
10、数器,记录发送错误的次数 4 CAN位定时存放器〔索引地址=0x03〕 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 res Tseg2 Tseg1 SJW BRP r rw rw rw rw 该存放器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各位含义可参看CAN控制器用户手册。 5 CAN测试存放器〔索引地址=0x04〕 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 res res res res res re
11、s res Res Rx Tx1 Tx0 Lback Silent Basic res res r r r r r r r R r rw rw rw rw rw r r 该存放器只有在CAN控制存放器中的Test位=1时才有效,用于测试CAN总线的通讯功能,在正常工作时不使用。 6 CAN位定时扩展存放器〔索引地址=0x06〕 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 res res res res res res res res res res
12、res res BRPE r r r r r r r r r r r r rw 该存放器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各位含义可参看CAN控制器用户手册。 2.2.3.2 消息对象接口存放器 CAN控制器中有一块消息RAM,可以存储32条消息对象,每条消息对象中包含8字节有用数据与其它协议相关控制信息。CPU访问消息RAM中任何一条消息对象都必须通过消息对象接口存放器完成。 CAN控制器中共有两套消息对象接口存放器IF1和IF2。IF1和IF2除了在测试模式下的用法有所不同外,在正常工作时用法一样。可以将一套用于将数据写入消息
13、RAM,另一套用于从消息RAM中读取数据。 在此,只介绍IF1存放器组的用法。 1 IF1命令请求存放器〔索引地址=0x08〕 Message Number为消息对象的编号,有效值为0x01~0x20,分别对应32个消息对象,用于设定要访问的消息对象的编号。 CPU向命令请求存放器中写入消息编号后,消息就在IF1存放器组与消息RAM之间开始传送。随着写操作,Busy位自动置1,传送过程完成后,Busy自动清0。 因此,必须在完成IF1存放器组中其它存放器的设置后,再向IF1命令请求存放器写入消息编号。 2 IF1命令掩码存放器〔索引地址=0x09〕 IF1
14、命令掩码存放器中的控制位指定传输方向,并选择消息对象的哪些位作为数据传输的目的或源。 WR/RD 读/写 1 写:数据从IF1送到消息RAM中 0 读:数据从消息送到IF1 Mask 存取Mask位 1 传输Identifier Mask+Mdir+MXtd位 0 屏蔽位不变化 Arb 存取仲裁位 1 传输Identifier Mask+Dir+Xtd+Msgval位 0 仲裁位不变化 Control 存取控制位 1 传
15、输控制位到消息RAM中 0 控制位不变化 ClrIntPnd 去除中断请求位 读操作时 1 去除消息RAM中的IntPnd位 0 不改变IntPnd位 在写操作时,此位被忽略 TxRqst/NewDat 存取传输请求位 读操作时 1 去除消息对象中的NewDat位 0 不改变NewDat位 写操作时 1 将传输请求位置1 0 不改变传输请求位 Data A 存取数据字节0-3 1 传输数据字节0-3 0 不改变数据字节0-3 Data B 存取数据字节4-7
16、1 传输数据字节4-7 0 不改变数据字节4-7 3 IF1掩码1〔索引地址=0x0a〕、IF1掩码2〔索引地址=0x0b〕 Msk28-Msk0 1 相应的位使用承受过滤 0 消息对象的ID号中对应位不用于承受过滤 MXtd 1 在承受过滤中使用扩展ID号 0 不使用扩展ID号 MDir 1 消息方向位Dir用于承受过滤中 0 消息方向位Dir在承受过滤中不使用 4 IF1仲裁1〔索引地址=0x0c〕、IF1仲裁2〔索引地址=0x0d〕 ID28-I
17、D0 消息对象的ID号 标准帧只使用ID28-ID18 MsgVal 1 该消息对象已经配置,消息处理器纳入处理 0 消息处理器不考虑该消息对象 Xtd 1 使用29位ID号〔扩展帧〕 0 使用11位ID号〔标准帧〕 下井仪器中一律采用标准帧 Dir 1 消息对象方向为发送,消息对象作为数据帧传送 0 消息对象方向为接收,收到匹配ID号的数据帧时,存储在该消息对象中 4 IF1消息控制〔索引地址=0x0e〕 NewDat 1 消息处理器或CPU向消
18、息对象中写入了新的数据 MsgLst 1 CPU丢失了消息 IntPnd 1 该消息对象是中断源 UMask 1 使用屏蔽〔Msk28-Msk0,MXtd,Mdir〕作为承受过滤 TxIE 1 成功地发送一条消息 RxIE 1 成功地接收一条消息 RmtEn 1 远程帧使能 下井仪中不使用远程帧 TxRqst 1 该消息对象请求发送,尚未完成 Eob 1 单个的消息对象或一个FIFO缓存的最后一个消息对象 DLC3-0 数据长度 0-8 5 IF1数据A1、A2、B1、B2
19、 8字节有效数据 2.2.3.3 消息处理器存放器 这些只读存放器用于向CPU提供有关消息对象的信息 消息RAM中可以存储32条消息对象,每个消息对象都包含了2.2.3.2中说明的可与IF1交互的信息位。 消息处理器存放器的所有信息都是32位,每位分别对应一条消息对象。 1 发送请求1、发送请求2 1 说明该消息对象被请求发送,还没有完成发送 2 新数据1、新数据2 1 说明该消息对象中写入了新数据 CPU可以通过读取该位,检查哪个消息对象的数据局部被更新了。 3 中断标志1、中断标志2
20、 1 指明该消息对象是一个中断源 4 消息有效1、消息有效2 1 该消息已经配置好,消息处理器予以考虑 3、软件编程示例 软件编程需要实现三个功能: 1 初始化〔设定位定时存放器与消息对象〕 2 发送消息 3 读取接收的消息 3.1 初始化位定时存放器示例 mov sfrpage,#1 ; 将Sfrpage指向can0page页 mov can0,#41h ; init位=1 CCE=1 允许写位定时存放器 mov can0adr,#3 ; 地址存放器指向位定时存放器 mov
21、 can0dath,#18h ; 先写高字节 mov can0datl,#40h ; 位定时存放器设为0x1840 3.2 初始化接收消息对象示例 初始化对象的作用是设置消息对象需要实现的功能,即设置CAN控制器部的消息RAM中某个消息对象的各个位域值。 ① 设定该对象用于发送还是接收; ② 设定该对象接收或发送的ID号,如用于接收还需要设定是否使用承受过滤功能; 初始化对象通过IF1或IF2存放器组完成设置,首先确定要设置的消息对象的性质。 在此,假设初始化消息RAM〔共20个消息对象〕中的第一个对象,作用是只承受ID=11的数据。假设我们用IF1存放器组设置消息对象
22、。 首先确定消息对象的各个位域的值: ID=11 转换为2进制数为1011b 以下根据要求确定IF1各个存放器的值: ①IF1 Mask1〔掩码〕的值为 0000h 〔因为我们约定使用11位ID的标准帧,所以有用的ID位仅为ID28~ID18,Mask15-0为未用位,设为0〕 ②IF1 Mask2 的值为 1FFCh 〔含义:MXtd=0 表示在承受过滤中不使用扩展ID号,MDir=0 表示在承受过滤中不考虑数据传输方向,后面为11位1表示只承受与ID=IF1Arb中设定ID号的数据帧,最后两位对应与ID17、ID16因未使用设为0〕 ③IF1 Arb1〔仲裁〕的值为0000h
23、〔理由同①〕 ④IF1 Arb2的值为 802Ch 〔含义:MsgVal=1表示设置该消息RAM有效,如该位=0,相当与该消息RAM不在使用中;Dir=0表示设定为承受消息;后面为ID号×4的二进制数,因为最低两位为ID17、ID16〕 ⑤IF1消息控制值为 1088h 〔含义:UMask=1表示设置消息过滤功能;Eob=1表示该消息对象不属于一个FIFO;DLC3-0=8表示发送8字节数据,不影响接收过程,接收完成后,自动填充接收到的有效字节数〕。 ⑥ IF1命令掩码存放器值为00F0h 〔含义:WR=1表示从IF1向消息RAM写;Mask=1表示传输ID Mask+Mdir+MXt
24、d到消息对象中;Arb=1表示传输ID+Dir+Xtd+Msgval到消息对象中;Control=1表示传输控制位到消息对象中〕 ⑦IF1命令请求存放器值为0001h〔含义传送IF1存放器组容到第一个报文对象中;这个存放器必须在设置完IF1的其它存放器后再写,因为一旦向这个存放器中写入值后,IF1存放器组与消息RAM就开始交换数据了。 以下是程序代码: mov sfrpage,#1 mov can0adr,#9 mov can0dath,#00h ; 这句可以省略 mov can0datl,0f0h ;
25、 执行完后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
26、,00h mov can0dath,#80h mov can0datl,#2ch mov can0dath,#10h mov can0datl,#08h mov can0adr,#8 mov can0dath,#00h ; 这句可以省略 mov can0datl,#01h 3.3 读取消息示例 在此,假设上述设置中,消息RAM中的第一个对象中收到了新的数据,可通过以下程序读取。 在此,我们只通过IF2存放器组读取数据,而不考虑其
27、它位的读取。将读取的8字节数据放在30h~37h单元中,有效字节个数放在38h单元中。 mov sfrpage,#1 mov can0adr,#21h mov can0dath,#00h ; 这句可省略 mov can0datl,#1fh mov can0adr,#20h mov can0dath,#00h ; 这句可省略 mov can0datl,# 01h here: mov a,can0dath acc.7,here ; 等待传送完成 mov can0adr,#26h mov a,can0datl anl a,#0f
28、h mov 30h,can0dath mov 31h,can0datl mov 32h,can0dath mov 33h,can0datl mov 34h,can0dath mov 35h,can0datl mov 36h,can0dath mov 37h,can0datl 3.4 初始化发送消息对象示例 在此,假设初始化消息RAM〔共20个消息对象〕中的第一个对象,作用是发送ID=11的数据。假设我们需要发送8字节数据,用IF1存放器组设置消息对象。 首先确定消息对象的各个位域的值: ID=11 转换为2进制数为1011b 以下根据要求确定IF1各个
29、存放器的值: ①IF1 Mask1〔掩码〕的值对于发送无作用,可以不设置 ②IF1 Mask2的值对于发送无作用,可以不设置 ③IF1 Arb1〔仲裁〕的值为0000h〔理由同①〕 ④IF1 Arb2的值为 A02Ch 〔含义:MsgVal=1表示设置该消息RAM有效,如该位=0,相当与该消息RAM不在使用中;Dir=1表示设定为发送消息;后面为ID号×4的二进制数,因为最低两位为ID17、ID16〕 ⑤IF1消息控制值为 0088h 〔含义: Eob=1表示该消息对象不属于一个FIFO;DLC3-0=8表示发送8字节数据,如果发送小于8字节数据,如此该为相应值〕。 ⑥ IF1命
30、令掩码存放器值为00b0h 〔含义:WR=1表示从IF1向消息RAM写; Arb=1表示传输ID+Dir+Xtd+Msgval到消息对象中;Control=1表示传输控制位到消息对象中〕 ⑦IF1命令请求存放器值为0001h〔含义传送IF1存放器组容到第一个报文对象中;这个存放器必须在设置完IF1的其它存放器后再写,因为一旦向这个存放器中写入值后,IF1存放器组与消息RAM就开始交换数据了。 以下是程序代码: mov sfrpage,#1 mov can0adr,#9 mov can0dath,#00h ; 这句可以省略
31、 mov can0datl,0b0h ; 执行完后can0adr自动加1 mov can0adr,#0ch mov can0dath,#0 mov can0datl,#0 mov can0dath,0a0h mov can0datl,2ch mov can0dath,00h mov can0datl,88h mov can0adr,#8 mov can0dath,#00h ; 这句
32、可以省略 mov can0datl,#01h 3.5 发送消息示例 在此,假设上述设置中,用消息RAM中的第一个对象发送数据。 在此,我们通过IF1存放器组发送数据。将读取的8字节数据放在30h~37h单元中,有效字节个数放在38h单元中。 mov sfrpage,#1 mov can0adr,#09h mov can0datl,#97h mov can0adr,#0eh mov can0dath,#01h
33、 mov a,38h orl a,#80h mov can0datl,a mov can0dath,30h mov can0datl,31h mov can0dath,32h mov can0datl,33h mov can0dath,34h mov can0datl,35h mov can0dath,36h mov can0datl,37h mov can0adr,#08h mov can0dath,#00h ; 这句可省略 mov can0datl,# 01h 执行完后,CAN控制器便开始自动发送数据。 11 / 11
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。