CAN总线的使用.docx

上传人:b****3 文档编号:4060839 上传时间:2023-05-06 格式:DOCX 页数:19 大小:61.66KB
下载 相关 举报
CAN总线的使用.docx_第1页
第1页 / 共19页
CAN总线的使用.docx_第2页
第2页 / 共19页
CAN总线的使用.docx_第3页
第3页 / 共19页
CAN总线的使用.docx_第4页
第4页 / 共19页
CAN总线的使用.docx_第5页
第5页 / 共19页
CAN总线的使用.docx_第6页
第6页 / 共19页
CAN总线的使用.docx_第7页
第7页 / 共19页
CAN总线的使用.docx_第8页
第8页 / 共19页
CAN总线的使用.docx_第9页
第9页 / 共19页
CAN总线的使用.docx_第10页
第10页 / 共19页
CAN总线的使用.docx_第11页
第11页 / 共19页
CAN总线的使用.docx_第12页
第12页 / 共19页
CAN总线的使用.docx_第13页
第13页 / 共19页
CAN总线的使用.docx_第14页
第14页 / 共19页
CAN总线的使用.docx_第15页
第15页 / 共19页
CAN总线的使用.docx_第16页
第16页 / 共19页
CAN总线的使用.docx_第17页
第17页 / 共19页
CAN总线的使用.docx_第18页
第18页 / 共19页
CAN总线的使用.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

CAN总线的使用.docx

《CAN总线的使用.docx》由会员分享,可在线阅读,更多相关《CAN总线的使用.docx(19页珍藏版)》请在冰点文库上搜索。

CAN总线的使用.docx

CAN总线的使用

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)直接连接。

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混合信号ISPFLASH微控制器数据手册》

《Bosch'C_CANUser'sManual》

在下井仪中建议采用C8051F041或C8051F040单片机,该单片机内部集成了BoschCAN控制器。

以下简要介绍C8051F04x单片机和BoschCAN控制器及其软件编程方法。

2.1C8041F04X单片机SFR的分页机制

C8051F04x系列MCU对CIP-51内核和外设有几项关键性的改进,提高了整体性能。

其中与编程密切相关的一点是使用了SFR(特殊功能寄存器)分页机制,允许器件将很多SFR映射到0X80〜0XFF这个存储器空间。

C8051F04x器件使用了5个SFR页:

0、1、2、3和F。

使用特殊功能寄存器页选择寄存器SFRPAGE来选择SFR页。

因此,读、写一个SFR的步骤为:

1.用SFRPAGE寄存器选择相应的SFR页号。

2.用直接寻址方式读、写特殊功能寄存器。

(与以前的用法相同)。

使用CAN控制器时,需要将SFRPAGE设置为1(用指令movsfrpage,#1)。

编程中用到的其它特殊功能寄存器可参看数据手册说明。

2.2C8041F04X单片机中CAN相关特殊功能寄存器

参看数据手册第201〜203页。

2.2.1CAN控制器寄存器的访问方式

可以直接通过访问一般SFR方式访问的寄存器共有6个:

CAN0CNCAN控制寄存器

CAN0STACAN状态寄存器

CAN0TSTCAN测试寄存器

CAN0ADR寄存器索引地址

CAN0DATH数据字高字节

CAN0DATL数据字低字节

其它CAN控制器寄存器只能通过CAN0ADR、CAN0DATH、CAN0DATL访问。

访问方式:

先向CAN0ADR中写入待访问CAN控制器寄存器的索引号,然后通过CAN0DATH写入或读出高字节,通过CAN0DATL写入或读出低字节。

例如:

0X5号寄存器其中写入0X1234h,可采用以下三条指令:

movcan0adr,#0x5movcan0dath,#12hmovcan0datl,#34h

对于某些索引地址,在向can0datl进行写入或读出操作后,can0adr有自动加1功能,因此必须向操作can0dath,再操作can0dat。

CAN0CN、CAN0STA、CAN0TST也有索引地址,也可以通过地址索引方式访问。

2.2.3CAN控制器寄存器组成

CAN控制器寄存器可分为以下几类:

223.1CAN控制器协议相关寄存器

1CAN控制寄存器(索引地址二0x00)

res

res

res

res

res

res

res

res

Test

CCE

DAR

CANIF

EIE

SIE

IE

Init

rrrrrrrrrwrwrwrrwrwrwrw

Test=1测试模式Test=0正常工作模式一般将Test位置0

CCE=1时可以控制更改位定时寄存器一般将CCE位置0

DAR禁止自动重发功能使用中将该位置1

CANIFCAN中断标志

EIE错误中断使能

SIE状态中断使能

IECAN中断使能

Init初始化时将该位置1,正常工作时将该位置0

2CAN状态寄存器(索引地址二0x01)

res

res

res

res

res

res

res

Res

BOff

EWarn

EPass

RxOK

TxOK

LEC

rrrrrrrRrrrrwrwrw

该寄存器反映CAN控制器的状态。

BOff处于离线状态(二1)

EWarn警告状态(二1说明错误计数器中至少有一个达到错误警告的极限值)

EPass处于被动错误状态

RxOK自上次这位被清0后,又成功地收到一条消息

TxOK自上次这位被清0后,又成功地发送一条消息

LECCAN总线上最后一次错误的类型

3CAN错误计数器(索引地址二0x02)

RP

REC6—0

TEC7—0

rRr

RP接收被动错误达到CAN协议规定的被动错误水平(二1)

REC6-0接收错误计数器,记录接收错误的次数

TEC7-0发送错误计数器,记录发送错误的次数

4CAN位定时寄存器(索引地址二0x03)

res

Tseg2

Tseg1

SJW

BRP

r

rw

rw

rw

rw

该寄存器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各位含义可参看CAN控制器用户手册。

5CAN测试寄存器(索引地址二0x04)

res

res

res

res

res

res

res

Res

Rx

Tx1

Tx0

Lback

Silent

Basic

res

res

rrrrrrrRrrwrwrwrwrwrr该寄存器只有在CAN控制寄存器中的Test位二1时才有效,用于测试CAN总线的通讯功能,在正常工作时不使用。

6CAN位定时扩展寄存器(索引地址二0x06)

res

res

res

res

res

res

res

res

res

res

res

res

BRPE

rrrrrrrrrrrrrw

该寄存器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各位含义可参看CAN控制器用户手册。

223.2消息对象接口寄存器

CAN控制器中有一块消息RAM,可以存储32条消息对象,每条消息对象中包含8字节有用数据及其它协议相关控制信息。

CPU访问消息RAM中任何一条消息对象都必须通过消息对象接口寄存器完成。

CAN控制器中共有两套消息对象接口寄存器IF1和IF2。

IF1和IF2除了在测试模式下的用法有所不同外,在正常工作时用法相同。

可以将一套用于将数据写入消息RAM,另一套用于从消息RAM中读取数据。

在此,只介绍IF1寄存器组的用法。

1IF1命令请求寄存器(索引地址二0x08)

1F1CommandRequestRepi^ter15141312II109S16543210

■'.'xll&17x10)

Busy

1U5

1T5

ITS

res

1X5

rei

IC5

rc?

res

IF2ConinimdReqiwtiReeivie:

Nf

re?

res

『躬

res

ie<

1VS

re?

Xumb*i

0.\--1<<■Ox-0)

MessageNumber为消息对象的编号,有效值为0x01〜0x20,分别对应32个消息对象,用于设定要访问的消息对象的编号。

CPU向命令请求寄存器中写入消息编号后,消息就在IF1寄存器组与消息RAM之间开始传送。

随着写操作,Busy位自动置1,传送过程完成后,Busy自动清0。

因此,必须在完成IF1寄存器组中其它寄存器的设置后,再向IF1命令请求寄存器写入消息编号。

2IF1命令掩码寄存器(索引地址二0x09)

IF1命令掩码寄存器中的控制位指定传输方向,并选择消息对象的哪些位作为数据传输的目的或源。

rrnComrnd>■k

faddi申殆A.0x12)

res

Aib

Conrro]

Clrljn护nd

TxKqMNwD;i[

DamA

DataB

It-2(-onmiAnd

OxJj&Ox12»

re年

^■RRP

31祜k

Aib

cQinhul

ciFlmrPnd

I啟q师

VwDftt

Data4

DataR

irjrrrrrnvrwmrwn、rwiwrw

WR/RD读/写

1写:

数据从IF1送到消息RAM中0读:

数据从消息送到IF1

Mask存取Mask位

1传输IdentifierMask+Mdir+MXtd位

0屏蔽位不变化

Arb存取仲裁位

1传输IdentifierMask+Dir+Xtd+Msgval位

0仲裁位不变化

Control存取控制位

1传输控制位到消息RAM中

0控制位不变化

ClrIntPnd清除中断请求位

读操作时1清除消息RAM中的IntPnd位

0不改变IntPnd位

在写操作时,此位被忽略

TxRqst/NewDat

存取传输请求位

读操作时

1清除消息对象中的NewDat位

0不改变NewDat位

写操作时

1将传输请求位置1

0不改变传输请求位

DataA存取数据字节0—3

1传输数据字节0—3

0不改变数据字节0—3

DataB存取数据字节4—7

1传输数据字节4—7

0不改变数据字节4—7

3IF1掩码1(索引地址=0x0a)、IF1掩码2(索引地址=0x0b)

Msk28—Msk0

1相应的位使用接受过滤

0消息对象的ID号中对应位不用于接受过滤

MXtd

1在接受过滤中使用扩展ID号0不使用扩展ID号

[FlMask1Register

15

14

13

1211109B765432IQ

Mskl50

LF1XLisk2Rjd^uslei(addressesOxLOx

res

\hkZS-1fi

IF?

]Rp^i^ter

('address旳暫&5卜)

MSK154

疋』Mask2Register

MXrd

MDll

re?

MsklB16

0x>17&OxlC}

rw

r

iwiwmnviwtwnvi诵iwm

MDir

1消息方向位Dir用于接受过滤中

0消息方向位Dir在接受过滤中不使用

4IF1仲裁1(索引地址二OxOc)、IF1仲裁2(索引地址二OxOd)

IF1Arbitration1

faddre歸咋Cm旧矗侧1引

151413121110G16543210

ID5-0

111Arbitration2Regiiter(Mdit?

沙已、OkJB&OxIA)

Ms£Val

Xr

Dir

ID2S1«

IF2Arbitranon1Register(addi^sse^0x49&0x4S)

n>i54>

Lt2Aibitraiion2Register(rtdilioso0x4B&0x4A)

Ms寶al

Xtd

Di]

1D2S16

rwrarrwitvrwrwrwnvrwnvnvrwnvrwrwrW

ID28—ID0消息对象的ID号标准帧只使用ID28—ID18

MsgVal

1该消息对象已经配置,消息处理器纳入处理

0消息处理器不考虑该消息对象

Xtd

1使用29位ID号(扩展帧)

0使用11位ID号(标准帧)下井仪器中一律采用标准帧

Dir

1消息对象方向为发送,消息对象作为数据帧传送

0消息对象方向为接收,收到匹配ID号的数据帧时,存储在该消息对象中

4IF1消息控制(索引地址二0x0e)

旺LMessageControlRegiUer(addiessesOxlD&0x10

1j

L4

1J

12

LL10

98

7

6

5

4

J2]0

N^Dnr

lEgr.-r

IntPnd

IM缶

TxIFR'tTF

RwFn

TTRq-T

FflB

W

TIM

T)Tc?

a

H2ControlRe^ster

lutl'ud

lAUik

1x11HxIL

ItintLn

JxRq^t

LaB

l*$

ie$

DLC3-0

讥山OxJD&Ox1C)

ru

rw

rwtw

rw

r

r

r

rw

NewDat1消息处理器或CPU向消息对象中写入了新的数据

MsgLst1CPU丢失了消息

IntPnd1该消息对象是中断源

UMask1使用屏蔽(Msk28—Msk0,MXtd,Mdir)作为接受过滤

io9a

.心忖◎卞井

TxIE1成功地发送一条消息

TsRqst2^-17

TRXIE湎甲。

成功地接收一条消息1211RmtEn^竽i远程帧使能袴

Eob1单个的消息对象或一个FIFO缓存的最后一个消息对象

DLC3-0数据长度0—8

5IF1数据A1、A2、B1、B2

8字节有效数据

223.3消息处理器寄存器

这些只读寄存器用于向CPU提供有关消息对象的信息

消息RAM中可以存储32条消息对象,每个消息对象都包含了2.2.3.2中说

明的可与IF1交互的信息位。

消息处理器寄存器的所有信息都是32位,每位分别对应一条消息对象。

1发送请求1、发送请求2

TtBiiswi^siqnRequest1Rfguter&XLl&OxSO)

15141312It109S76543210

TxRqstl#9

riRqslfl1

TraiKiiiis-iiofiReqtie'bt2ster

TxRqst2-kl7

1说明该消息对象被请求发送,还没有完成发送

2新数据1、新数据2

NewDhca1R^eeibin

1514B121110S

76543210

XenDatLC-?

>euDatS-i

Ne^1D^(a2Rtgisiei

>oiD;i[?

225

D;i<24-17

0s02)

r

r

1说明该消息对象中写入了新数据

CPU可以通过读取该位,检查哪个消息对象的数据部分被更新了

3中断标志1、中断标志2

[titerruplPeuJiiLir1

(ccl±ossesDxAlJrUxAOt

1514B1211L09S765身3210

InrPl]

rntPndSJ

LntemiptPsuduig2Register(atklres^sOxAW&flxA2)

IntPudJZ-Z?

lntPnd24-17

rr

1指明该消息对象是一个中断源

4消息有效1消息有效2

\伽谄獣Vfilid1RegistPi-但山血注肌OxBlArOxBO)

15141312ll1098

6543210

Valid"Riislfr

I

r

1该消息已经配置好,消息处理器予以考虑

3、软件编程示例

软件编程需要实现三个功能:

1初始化(设定位定时寄存器及消息对象)

2发送消息

3读取接收的消息

3.1初始化位定时寄存器示例

mov

sfrpage,#1;

将Sfrpage指向can0page页

mov

can0cn,#41h;

init位=1CCE=1允许写位定时寄存器

mov

can0adr,#3;

地址寄存器指向位定时寄存器

mov

can0dath,#18h

;先写咼字节

mov

can0datl,#40h

;位定时寄存器设为0x1840

3.2初始化接收消息对象示例

初始化对象的作用是设置消息对象需要实现的功能,即设置CAN控制器内

部的消息RAM中某个消息对象的各个位域值。

1设定该对象用于发送还是接收;

2设定该对象接收或发送的ID号,如用于接收还需要设定是否使用接受过滤功能;

初始化对象通过IF1或IF2寄存器组完成设置,首先确定要设置的消息对象的性质。

在此,假设初始化消息RAM(共20个消息对象)中的第一个对象,作用是只接受ID二11的数据。

假设我们用IF1寄存器组设置消息对象。

首先确定消息对象的各个位域的值:

ID=11转换为2进制数为1011b

以下根据要求确定IF1各个寄存器的值:

1IF1Mask1(掩码)的值为OOOOh(因为我们约定使用11位ID的标准

帧,所以有用的ID位仅为ID28〜ID18,Mask15-0为未用位,设为0)

2IF1Mask2的值为仆FCh(含义:

MXt40表示在接受过滤中不使用扩展ID号,MDir=0表示在接受过滤中不考虑数据传输方向,后面为11位1表示只接受与ID=IF1Arb中设定ID号的数据帧,最后两位对应与ID17、ID16因未使用设为0)

3IF1Arb1(仲裁)的值为0000h(理由同①)

4IF1Arb2的值为802Ch(含义:

MsgVal=1表示设置该消息RAMt效,如该位=0,相当与该消息RAM^在使用中;Dir=0表示设定为接受消息;后面为ID号X4的二进制数,因为最低两位为ID17、ID16)

5IF1消息控制值为1088h(含义:

UMasA1表示设置消息过滤功能;Eob二1表示该消息对象不属于一个FIFO;DLC3-0=8表示发送8字节数据,不影响接收过程,接收完成后,自动填充接收到的有效字节数)。

6IF1命令掩码寄存器值为00F0h(含义:

WA1表示从IF1向消息RAM写;Mask=1表示传输IDMask+Mdir+MXtd到消息对象中;Arb=1表示传输ID+Dir+Xtd+Msgval到消息对象中;Control=1表示传输控制位到消息对象中)

7IF1命令请求寄存器值为0001h(含义传送IF1寄存器组内容到第一个报文对象中;这个寄存器必须在设置完IF1的其它寄存器后再写,因为一旦向这个寄存器中写入值后,IF1寄存器组与消息RAM就开始交换数据了。

以下是程序代码:

movsfrpage,#1

movcan0adr,#9

movcan0dath,#00h;这句可以省略

movcan0datl,0f0h;执行完后can0adr自动加1

movcan0dath,#0

movcan0datl,#0

movcan0dath,ifxmask2h

movcan0datl,ifxmask2l

movcan0dath,#0

movcan0datl,#0

movcan0dath,1fh

movcan0datl,fch

movcan0dath,00h

movcan0datl,00h

movcan0dath,#80h

movcan0datl,#2ch

movcan0dath,#10h

movcan0datl,#08h

movcan0adr,#8movcan0dath,#00h;这句可以省略

movcan0datl,#01h

3.3读取消息示例

在此,假设上述设置中,消息RAM中的第一个对象中收到了新的数据,可

通过以下程序读取。

在此,我们只通过IF2寄存器组读取数据,而不考虑其它位的读取。

将读取的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:

mova,canOdath

jbacc.7,here;等待传送完成

movcanOadr,#26h

mova,canOdatl

anla,#Ofh

mov30h,canOdath

mov31h,canOdatl

mov32h,canOdath

mov33h,canOdatl

mov34h,canOdath

mov35h,canOdatl

mov36h,canOdath

mov37h,canOdatl

3.4初始化发送消息对象示例

在此,假设初始化消息RAM(共20个消息对象)中的第一个对象,作用是发送ID二11的数据。

假设我们需要发送8字节数据,用IF1寄存器组设置消息对象。

首先确定消息对象的各个位域的值:

ID=11转换为2进制数为1011b

以下根据要求确定IF1各个寄存器的值:

1IF1Mask1(掩码)的值对于发送无作用,可以不设置

2IF1Mask2的值对于发送无作用,可以不设置

3IF1Arb1(仲裁)的值为OOOOh(理由同①)

4IF1Arb2的值为A02Ch(含义:

MsgVal=1表示设置该消息RAMt效,如该位=0,相当与该消息RAM^在使用中;Dir=1表示设定为发送消息;后面为ID号X4的二进制数,因为最低两位为ID17、ID16)

5IF1消息控制值为0088h(含义:

Eob=1表示该消息对象不属于一个FIFO;DLC3-0=8表示发送8字节数据,如果发送小于8字节数据,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2