一、前言
AT90CAN128是一款低功率CMOS 8位的微处理器,它是基于AVR增强型
RISC结构的。在一个时钟周期里执行强大功效的指令,AT90CAN128可完成1 MIP每MHz的吞吐量,从而让系统设计者可对进程速度进行优化功率消耗。
AVR内核结合了一个丰富的指令设置,有32个通用目标工作寄存器。所有32个寄存器都直接和运算器连接,两个独立的寄存器允许被在一个时钟周期里执行的一条单个指令访问。这种结构比常规的微处理器更具有效率。
AT90CAN128有以下特点:128K的内部可编程FLASH,具有可读写能力,4K的EEPROM,4K的SRAM,53个通用目标I/O接口,32个通用目标工作寄存器,一个CAN控制器,实时时钟(RTC),四个灵活的定时/计数器,具有比较输出模式和PWM,两个USART,一位定向两线串行接口,一个8通道10位的ADC,一个可编程的带有内部震荡器的看门狗计时器,一个SPI串口,JTAG测试接口,也可用于访问片上调试系统和五个软件选择的省电模式。
空闲模式会关闭CPU,但允许SRAM,定时/计数器,SPI/CAN口和中断系统继续工作。掉电模式保存寄存器内容,但停止震荡器,禁止所有其他片上功能直到下一个中断或者硬件复位。省电模式中,异步计时器继续运行,当其他的器件处于休眠时允许用户保留一个计时器。ADC噪声消除模式关闭CPU和所有的I/O接口模块(但除了异步计时器和ADC),以此在ADC转换期间使噪声最小化。在备用模式中,晶体振荡器运行当其他器件都休眠。
器件运用Atmel公司的高密度非易失的存储技术制造。片上ISP FLASH允许程序存储器被一个常规的非易失的储存编程器或者一个在AVR内核上运行的片上启动程序,通过一个内部SPI串行接口来重新编程。启动程序能用于任何接口在应用FLASH储存器里来下载应用程序。当应用FLASH部分被更新时,在启动FLASH部分内的软件将继续运行,提供真正的读写操作。由于在一个单芯片上结合了一个带有内部可编程FLASH 的8位RISC CPU,Atmel的AT90CAN128可说是一个强大的微处理器,为众多的嵌入式控制应用器件提供了一个高度灵活和低费用的解决方案。
AT90CAN128 AVR 可支持全套的编程和系统开发工具,包括:C 编译器,宏汇编,编程调试器/仿真器,电路仿真器和成套工具。
1
二、AT90CAN128引脚配置
三、引脚介绍 引脚名 VCC GND 端口A(PA7—PA0)
描述 数字电路电源 地 八位双边I/O端口端口A是一个8位双向I/O口,带有内部上拉电阻(每个位都可选择)。端口A输出缓冲有对称的驱动特征。当输入时,如果端口A的上拉电阻被激活,且引脚被外部拉低,引脚会输出电流。当一个重起条件被激活时,端口A引脚为三态,即使此时时钟没有运行。 端口B(PB7—PB0) 端口 C(PC7—PC0) 端口 D(PD7—PD0)
与Port A(PA7…PA0)类似 与Port A(PA7…PA0)类似 与Port A(PA7…PA0)类似 2
端口 E(PE7—PE0) 端口(PF7—PF0) 端口G(PG4—PG0) NESET XTAL1 XTAL2 AVCC SREF 四、芯片特点
与Port A(PA7…PA0)类似 与Port A(PA7…PA0)类似 端口G为5位双向I/O口,并具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。复位发生时端口G为三态。 端口G也可以用做其他不同的特殊功能 复位信号输入端。如果在该引脚上持续一个比最小脉冲时间长一些的低电平,就将产生一个复位 振荡器的输入端,也是内部时钟的输入端 振荡器的输出端 AVCC为在F端口上的A/D转换器引脚供电。即使ADC没有使用,它应该与VCC外部相连接。如果ADC使用,它应通过一个低通过滤器与VCC连接 A/D转换器的模拟参数引脚 AT90CAN128是在Atmega128微处理的基础上,内置有完全符合CAN2.0A和2.0B标准协议的CAN控制器。
Atmega128为属于AVR RISC结构的8位低功耗CMOS微处理器。由于其先进的指令集以及单周期指令执行时间,Atmega128的数据吞吐率高达1MIPS/MHZ,从而可以减缓系统在功耗和处理速度之间的矛盾。
AT90CAN128内置的CAN控制器采用MOb(消息对象)方式进行数据的发送和接收,共有15个MOb,它们具有相同的属性:有11位标识符(2.0A协议),也可扩展至29位(2.0B议);8位数据缓冲(静态分配);Tx,Rx帧缓冲或自动响应配置;时间标识。
4.1 ATmega128
Atmega128具有如下特点:128K字节的系统内可编程Flash(具有在写的过程中还可以读的能力,既RWW)、4K字节的EEPROM、4K字节的SRAM、53个通用I/O口线、32个通用工作寄存器、实时时钟RTC、4个灵活的具有比较模式和PWM功能的定时器/计数器(T/C)、两个USART、面向字节的两线接口TWI、8通道10位ADC(具有可选的可编程增益)、具有片内振荡器的可编程看门狗定时器、SPI串行端口、与IEEE1149.1规范兼容的JTAG测试接口(此接口同时还可以用于片上调试),以及六种可以通过软件选择的省电模式。
3
空闲模式时CPU停止工作,而SRAM、T/C、SPI端口以及中断系统可以继续工作;掉电模式时晶体振荡器停止震荡,所有功能除了中断和硬件复位之外都停止工作,寄存器的内容则一直保持;省电模式时异步定时器继续运行,以允许用户维持时间基准,器件的其他部分则处于睡眠状态;ADC噪音抑制模式时CPU和所有的I/O模块停止运行,而异步定时器和ADC继续工作,以减少ADC转换时的开关噪音;Standby模式时振荡器工作而其他部分睡眠,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby模式则允许振荡器和异步定时器继续工作。
Atmega128方框图
AVR CPU内核
CPU的主要任务是保证程序的正常执行,因此它必须能够访问存储器,执行运
4
算,控制外设以及处理中断。
AVR内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的复杂指令集微处理器高10倍的数据吞吐率。
下面是AVR结构方框图:
AVR内核结构方框图
AVR采用了Harvard结构,具有独立的数据和程序总线。程序存储器的指令通过一级流水线运行。CPU在执行一条指令的同时读取下一条指令。程序存储器为可以在线编程的FLASH。
快速访问寄存器文件包括32个8位通用工作寄存器,而且都可以在一个时钟周期内访问。从而实现单时钟周期的ALU操作。在典型的ALU操作过程中,两个位于寄存器文件中的操作数同时被访问,然后执行相应的运算,结果再被送回寄存器文件。整个过程仅需要一个时钟周期。
寄存器文件里有6个寄存器可以用作3个16位的间接地址寄存器指针以寻址数据空间,实现高效的地址运算。其中一个指针还可以作为程序存储器查询表的地址指针。这些附加的功能寄存器即为16位的X、Y、Z寄存器。
5
ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器操作。运算完成之后状态寄存器的内容将更新以反映操作结果。
程序流程通过有/无条件的跳转指令来控制,从而直接寻址整个地址空间。大多数指令长度为16位,亦既每个程序存储器地址都包含一条16位或32位的指令。
程序存储空间分为两个区:引导程序区和应用程序区。这两个区都有专门的锁定位实现读和读/写保护。用于写应用程序区的SPM指令必须位于引导程序区。
在中断和调用子程序时返回地址程序计数器(PC)保存于堆栈之中。堆栈位于通用数据SRAM,故此其深度仅受限于SRAM的大小。
AVR具有一个灵活的中断模块。控制寄存器位于I/O空间。状态寄存器里有全局中断使能位。在程序存储器起始处有一个中断向量表,每一个中断在此都有独立的中断向量。各个中断的优先级与其在中断向量表的位置有关,中断向量地址越低,优先级越高。
I/O存储器空间包含64个可以直接寻址的地址。映射到数据空间即为寄存器文件之后的地址﹩-﹩5F。此外,Atmega128在SRAM里还有扩展的I/O空间,位于地址﹩60--﹩FF。但是只能使用ST/STS/STD和LD/LDS/LDD指令。
关于Atmega详细资料见附录1. 4.2、CAN控制器
4.2.1、CAN控制器的特点: 完整的CAN控制器
完整的CAN 2.0A和2.0B标准 15个Mob(消息对象):
——11位标识符(2.0A),29位标识符(2.0B) ——11位标识符屏蔽(2.0A),29位标识符屏蔽(2.0B) ——8位数据缓冲(静态分配) ——Tx,Rx,桢缓冲或者自动响应配置 ——时间标识
在频率是8MHz时,最大传输速率位1M位/秒 TTC定时器
监听模式(用于窃听或者自动波特)
6
AT90CAN128内置有完全符合CAN2.0A和2.0B标准协议的CAN控制器。采用MOb(消息对象)方式进行数据的发送和接收,共有15个MOb,它们具有相同的属性:有11位标识符(2.0A协议),也可扩展至29位(2.0B议);8位数据缓冲(静态分配);Tx,Rx帧缓冲或自动响应配置;时间标识。CAN控制器的结构如图所示:
CAN控制器结构
4.2.2、Mob
MOb是一个CAN消息帧的描述符。它包括处理一个CAN消息帧的所有信息。这意味着一个MOb可以看成一个对象,来描述一条CAN消息。MOb的数目是从0到14。它们相互独立,但在多重比较的时候,低位的MOb会获得优先权。每个MOb都被安置在一个页中来保存。页的序号就是MOb的序号。
操作模式:每个Mob有它自己的域来控制操作模式。在复位之后没有默认的模式。在使能CAN外围设备之前,每个Mob必须进行配置。(禁止模式-CONMOB=00)
操作模式为: ——禁止模式 ——发送模式 ——接收模式 ——自动响应
7
——桢缓冲接受模式 Mob配置 0 0 0 1 1 0 响应有效 x x x 0 1 1 1 x x RTR标志 x 0 1 0 1 操作模式 禁止 Tx数据桢 Tx远程桢 Rx数据桢 Rx远程桢 Rx远程桢后Tx数据桢(作为响应) 桢缓冲接收模式 Mob配置 1、禁止:在该模式下,Mob是“自由”的 2、Tx数据桢&远程桢:
A、以下几个域必须在发送之前初始化: ——标识符标志(IDT
——初始化发送请求(RTRTAG) ——数据长度代码(DLC) ——保留位标志(RBnTAG) ——消息的数据位(MSG)
B、当Mob配置被置位后(CONMOB),Mob就准备好发送一个数据桢或者一个远程桢了。
C、然后,CAN通道扫描所有在Tx配置中的Mob,找到最高优先级的Mob并且开始发送它。
D、当发送结束,TXOK标志被置位(中断)。
E、直到一个新的初始化开始,所有参数和数据在Mob里都是有效的。 3、Rx数据桢&远程桢:
A、以下几个域必须在接收之前初始化: ——标志符标志(IDT) ——标识符屏蔽(IDMSK) ——标识符扩展(IDE)
——标识符扩展屏蔽(IDEMSK) ——远程发送请求(RTRTAG)
——远程发送请求屏蔽(RTRMSK) ——数据长度代码(DLC) ——保留位标志(RBnTAG)
B、当Mob配置被置位后(CONMOB),Mob就准备好接收一个数据桢或者一个远程桢了。
C、当一个桢标识符被CAN网络接收,CAN通道就会扫描所有在接收模式中的Mobs,试图找到有最高优先级的Mob。
D、一旦找到,则匹配的Mob中的IDT、IDE和DLC更新为新到来的(桢)值。
8
E、一旦接收结束,接收到的消息的数据位被储存(非远程桢)在Mob的数据缓冲区,并且RXOK标志置位(中断)。
F、直到一个新的初始化开始,所有参数和数据在Mob里都是有效的。 4、自动响应:当期望的远程桢接收后,一个到远程桢的响应(数据桢)会被自动发送。
A、以下几个域必须在接收远程桢之前初始化:
——(类似于“Rx数据桢&远程桢”)
B、当一个远程桢匹配时,自动地,RTRTAG和响应有效位(RPLV)置位。此时,没有标志(或者中断)置位。由于CAN数据缓冲没有为即将到来的远程桢所用,Mob将准备好发送模式,而无任何其他的设置。接收的远程桢的IDT、IDE、其他标志和DLC为响应所用。
C、当响应发送结束,TXOK标志置位(中断)。
D、直到一个新的初始化开始,所有参数和数据在Mob里都是有效的。 5、桢缓冲接收模式:该模式用来接收多重桢。Mobs间的优先级为这些即将到来的桢提供了有效的管理。当Mobs在该模式下进行配置,则将创建一组Mobs(包括不连续Mobs)。由于模式配置,只可能是一组。只有当组中所有Mobs都接收到它们专用的CAN桢时,一个桢缓冲结束标志(或者中断)-BXOK-将置位。
A、在桢缓冲接收模式下的Mobs需要象在标准接收模式下一样初始化。 B、当他们各自的配置都置位(CONMOB)时,Mobs便准备好接收数据桢(或
者远程桢)。
C、当一个桢标识符在CAN网络上被接收,CAN通道扫描所有在接收模式中
的Mobs,试图找到有最高优先级的匹配的Mob。 值。
E、一旦接收结束,接收到的消息的数据位被储存(非远程桢)在匹配的MobD、一旦找到,则匹配的Mob中的IDT、IDE和DLC更新为新到来的(桢)
的数据缓冲区,并且RXOK标志置位(中断)。
F、当组中的最后一个Mob接收结束时,桢缓冲结束BXOK标志置位(中断),
仅当组中所有的CONMOB都被重写,BXOK标志才可被清除。
G、直到一个新的初始化开始,所有Mob中的参数和数据才有效。
4.2.3、CAN位结构
9
一个CAN位时间,被定义成四个无重叠的时间段。每个时间段都是由一个“时间片”的整数倍数构成的。“时间片”或者TQ是CAN节点所用到的最小的独立时间结构。
CAN位结构
同步时间段 第一个段用于使各种总线节点同步。
发送时,在时间段的起始处,当前的位是输出的。如果有一个
位的状态在先前位和当前位间发生了变化,则总线状态通过接收
节点改变。
传播时间段 该时间段用于补偿在网络中的信号延迟。
补偿在总线上的信号传播延迟是必要的,通过总线节点的传送器。 段1
段1用于补偿补偿边沿错误。
该段可在重复同步期间被延长。 采样点
采样点是在“总线电平被读”时以及“解释成各自位的值”时的点。它的位置是在段1的最后(在两个段之间)。
段2 该段也用于补偿边沿错误。
该段可在重复同步期间被缩短,但只要在信息进程时间内,长度必
须为最小,并且不能比段1的时间长。
位延长 作为重复同步的结果,段1可被延长或段2可被缩短,来补偿振荡
器的容错。如果,例如传送振荡器比接收振荡器慢时,用于重复
10
同步的下一个下降沿可被延迟。所以,段1被延长来调整采样点,在位时间的结尾处。
位缩短
另一方面,如果传送振荡器比接收振荡器快,则用于重复同步的下一个下降沿可能会来的太早。所以在第N位中,段2被缩短来调整N+1位的采样点,在位时间的结尾处。
同步跳转宽度 限制段的延长或缩短的量
4.2.4、CAN通道
CAN通道可以是处于: 使能模式 在该模式:
——CAN通道(内部TXCAN&RXCAN)使能 ——输入时钟使能 备用模式 在该模式:
——传送器连续提供一个隐性电平(在内部TXCAN上),接收器禁止 ——输入时钟使能
——寄存器和页仍可访问 监听模式 该模式对于CAN通道是透明的: ——使能一个硬件回送,内部TXCAN在内部RXCAN上 ——在TXCAN引脚上提供一个隐性电平 ——不禁止RXCAN ——冻结TEC和REC错误计数器 监听模式:
采样点和传送点:
11
位周期的通用结构:
4.2.5、CAN寄存器
1、通用控制寄存器CANGCON
ABRQ:放弃请求
0:无请求
1:CANCDMOB寄存器中CONMOB位的对每个MOB的一个复位。待决通
信被立即禁止,进行中的通信将被正常终止,设置成合适的状态标志。 OVRQ:过载桢请求
0:无请求
1:在下一个接收桢之后发送一个过载桢
过载桢可通过观察CANGSTA寄存器中的OVFG位来查出。 TTC:定时器触发通信
12
0:无TTC 1:TTC模式 SYNTTC:TTC同步
0:TTC定时器在SOF上被捕获
1:TTC定时器在EOF的最后一位上被捕获 LISTEN:只听模式
0:无只听模式 1:只听模式 TEST:测试模式
0:无测试模式
1:测试模式:为工厂测试而准备的,不是为用户使用的
ENA/STB:使能/备用模式
因为这个位是一个命令且不是立即有效的,CANGSTA寄存器中的ENFG位给出了被选模式的真实状态。
0:备用模式:进行中的通信被正常终止,CAN通道被冻结(每个MOB中的CONMOB位不改变)。发送器连续提供一个隐性电平。在这种模式下,接收器不被使能,但所有的寄存器和邮箱仍然可从CPU访问。 1:使能模式:一旦11个连续的隐性位被读,则CAN通道进入使能模式。 SWRES:软件复位请求
这个能自动复位的位只是将CAN控制器复位。 0:无复位
1:这个复位与硬件复位是“或”的关系。 2、通用状态寄存器CANGSTA
OVFG:过载桢标志
这个标志不会产生中断 0:无过载桢
1:只要产生的过载桢被发送,该位就由硬件置位
TXBSY:发送器忙
这个标志不会产生中断 0:发送器不忙
1:只要一个桢(数据、远程、过载或者错误桢)或者一个ACK域被发送,该位就由硬件置位。当一个内部桢空间被发送的时候,也置位。
RXBSY:接收器忙
这个标志不会产生中断 0:接收器不忙
1:只要一个桢被接收或者被监测,该位就由硬件置位 ENFG:使能标志
这个标志不会产生中断
0:CAN控制器禁止:因为一个使能或者禁止命令不会立即有效,这个状态
13
位给出了被选模式的真实状态。
1:CAN控制器使能
BOFF:总线关闭模式
BOFF给出了CAN通道的状态信息。只有进入总线关闭模式才能产生
BOFFIT中断。
0:无总线关闭模式 1:总线关闭模式
ERRP:错误被动模式
ERRP给出了CAN通道的状态信息。这个标志不会产生中断 0:无错误被动模式 1:错误被动模式
3、通用中断使能寄存器CANGIE
ENIT:使能所有中断(除了CAN定时器超时运行中断)
0:中断禁止
1:CANIT中断使能 ENBOFF:使能总线关闭中断 0:中断禁止
1:总线关闭中断使能 ENRX:使能接收中断
0:中断禁止 1:接收中断使能
ENTX:使能发送中断
0:中断禁止 1:发送中断使能
ENERR:使能Mob错误中断
0:中断禁止
1:Mob错误中断使能
ENBX:使能桢缓冲中断
0:中断禁止
1:桢缓冲中断使能
ENERG:使能通用错误中断
0:中断禁止
1:通用错误中断使能
ENOVRT:使能CAN定时器超时运行中断
0:中断禁止
1:CAN定时器超时运行中断使能
4、使能MOB寄存器2 CANEN2
14
5、使能MOB寄存器1 CANEN1
ENMOB14:0 :使能Mob
该位提供Mob的有效性
当Mob使能(CANCDMOB寄存器中的CONMOB1:0位)时,该位置1。 一旦TXOK或者RXOK置1(TXOK自动应答),响应ENMOB复位。ENMOB置0来配置Mob禁止模式,应用于异常终止或者备用模式。
0:消息对象禁止:Mob对一个新的发送或者接收有效 1: 消息对象使能:Mob处于使用状态 6、时序寄存器1(设置Tscl)CANBT1
BRP5:0 :波特率预定标器
CAN控制器系统时钟Tscl周期可传播和确定单个位定时。
Tscl=(BRP[5:0]+1)/clk frequency 这里是频率的形式,也可化为周期 7、时序寄存器2(设置Tsjw、Tprs)CANBT2
SJW1:0 :重复同步跳转宽度
为了比较不同总线控制器时钟振荡器间的移相,控制器必须重复同步跳转宽度来定义时钟周期的最大数。一个位周期可由一个重复同步来缩短或者延长。
Tsjw=Tscl x (SJW[1:0]+1) PRS2:0 :传播时间段
这部分位时间用于补偿网络中的物理延时。它是总线上单个传播时间总和的两倍,输入比较器延时或者输出驱动器延时。
Tprs=Tscl x (PRS[2:0]+1)
8、时序寄存器3(设置Tphs2、Tphs1)CANBT3
15
位6:4——PHS22:20 :段2
该段用于补偿段界限错误。该段可由重复同步跳转宽度来缩短。 Tphs2=Tscl x (PHS2[2:0]+1) 位3:1——PHS12:10 :段1
该段用于补偿段界限错误。该段可由重复同步跳转宽度来延长。 Tphs1=Tscl x (PHS1[2:0]+1) SMP:采样点
0:一次,在采样点
1:三次,总线的“三次采样”是采样点和“两次超过Tscl周期1/2的长度”。该结果为三个值的主要判定的响应。
9、时钟控制寄存器(时钟分频)CANTCON
TPRSC7:0 :CAN定时预定标器
预定标器,CAN定时器向上计数范围是0到255。如果CAN控制器使能,则它为CAN定时器提供时钟。
CLKCANTIM=CLK x 8 x (CANTCON[7:0]+1) 10、发送错误计数器寄存器CANTEC
位7:0——TEC7:0 :发送错误计数,范围0到255
11、接收错误计数寄存器CANREC
位7:0——REC7:0 :接收错误计数,范围0到255
12、最高优先级MOB寄存器CANHPMOB
16
位7:4——HPMOB3:0 :最高优先级Mob数 Mob在CANSIT寄存器中有最高优先级。如果CANSIT=0(没有Mob),返回值为0xF
位3:0——CGP3:0 :CAN通用目标位
这些位能预先编程,来匹配CANPAGE寄存器的想要的配置(例如,AINC和INDX2:0设置)
13、MOB寄存器CANPAGE页
位7:4——MOBNB3:0 :Mob数 Mob数的选择,有效数范围0到14 AINC:自动增加FIFO CAN数据缓冲索引(低有效)
0:自动增加索引(默认值) 1:不自动增加索引
位2:0——INDX2:0 :FIFO CAN数据缓冲索引 进入FIFO的CAN数据位的位单元,来定义Mob
14、(MOB状态寄存器)CANSTMOB
DLCW:数据长度代码警告 即将到来的消息不被DLC期望。无论是什么样的桢格式,CANCDMOB寄存器的DLC域都通过接收到的DLC来更新。 TXOK:发送OK
这个标志能产生一个中断。它必须在整个CANSTMOB寄存器上用一个“读-修改-写”的软件程序来清除。发送使能通信结束。当控制器已经准备好发送一个桢,如果两个或者多个消息对象使能,低的Mob索引(0到14)会首先被供应。 RXOK:接收OK 这个标志能产生一个中断。它必须在整个CANSTMOB寄存器上用一个“读-修改-写”的软件程序来清除。接收使能通信结束。如果两个或者多个消息对象接收,低的Mob索引(0到14)会首先被供应。 BERR:位错误(只当发送时)
这个标志能产生一个中断。它必须在整个CANSTMOB寄存器上用一个“读-修改-写”的软件程序来清除。该位被监测的值与该位被发送的值不一样。
例外:在仲裁域期间,被监测的接收位作为一个显性位发送,确认时间段在一个错误桢发送时监测到一个显性位。 SERR:Stuff错误
这个标志能产生一个中断。它必须在整个CANSTMOB寄存器上用一个“读-修改-写”的软件程序来清除。监测到多于五个连续相同极性位。这个标志能产生一个中断
17
CERR:CRC错误
这个标志能产生一个中断。它必须在整个CANSTMOB寄存器上用一个“读-修改-写”的软件程序来清除。接收器在从桢到数据域的开始每一个被接收的消息上执行一个CRC检查。如果这个检查不与CRC域匹配,则一个CRC设置被设置 FERR:Form错误
这个标志能产生一个中断。它必须在整个CANSTMOB寄存器上用一个“读-修改-写”的软件程序来清除。Form错误由以下位域里的固定格式的一个或多个违规引起:
CRC界定符、确认界定符、EOF AERR:确认错误
这个标志能产生一个中断。它必须在整个CANSTMOB寄存器上用一个“读
-修改-写”的软件程序来清除。在确认时间段里没有显性位被监测到。
15、(MOB控制和DLC寄存器)CANCDMOB
位7:6——CONMOB1:0 :消息对象配置 这些位设置通信被执行(复位之后没有初始值)
00- 禁止 01- 使能发送
10- 使能接收 11- 使能桢缓冲接收 一旦通信被执行,这些位不被清除。用户必须重写配置来使能一个新的通信 这个操作对于能复位BXOK标志是必要的。 这个操作也在CANEN寄存器里设置响应位 RPLV:应答有效 用于在接收一个远程桢后的自动应答模式
0- 应答没有准备好 1- 应答准备好并且有效 IDE:标识符扩展
远程桢或者数据桢的IDE位发送
该位通过接收到的远程桢或者数据桢的响应值来更新 0-CAN标准 2.0A(标识符长度-11位) 1-CAN标准 2.0B(标识符长度-29位) 位3:0——DLC3:0 :数据长度代码 消息的数据域中的位数目 远程桢或者数据桢的DLC域发送。DLC的范围是从0到8。如果DLC域大于8,则有效的DLC=8。 该域通过被接收的远程桢或者数据桢的响应值来更新。如果被期望的DLC与即将到来的DLC不一样,则一个DLC警告会在CANSTMOB寄存器中出现。
16、标识符Tag寄存器4CANIDT4
18
17、标识符Tag寄存器3CANIDT3
18、标识符Tag寄存器2CANIDT2
19、标识符Tag寄存器1CANIDT1
V2.0 A 位31:21——IDT10:0 :标识符标志 远程桢或者数据桢的标识符域发送 该域通过被接收的远程桢或者数据桢的响应值来更新。 RTRTAG:远程发送请求标志 远程桢或者数据桢的RTR位发送 该目标通过被接收的远程桢或者数据桢的响应值来更新。 RB0TAG:保留位0标志 远程桢或者数据桢的保留位0发送 该目标通过被接收的远程桢或者数据桢的响应值来更新。 V2.0 B 位31:3——IDT28:0 :标识符标志
远程桢或者数据桢的标识符域发送
该域通过被接收的远程桢或者数据桢的响应值来更新。 RTRTAG:远程发送请求标志 远程桢或者数据桢的RTR位发送 该目标通过被接收的远程桢或者数据桢的响应值来更新。 RB1TAG:保留位1标志 远程桢或者数据桢的保留位1发送 该目标通过被接收的远程桢或者数据桢的响应值来更新。
RB0TAG:保留位0标志
远程桢或者数据桢的保留位0发送 该目标通过被接收的远程桢或者数据桢的响应值来更新。
19
20、标识符掩码寄存器4 CANIDM4
21、标识符掩码寄存器3 CANIDM3
22、标识符掩码寄存器2 CANIDM2
33、标识符掩码寄存器1 CANIDM1
V2.0 A 位31:21——IDMSK10:0 :标识符屏蔽
0- 比较真值强制 1- 位比较使能
RTRMSK:远程发送请求屏蔽
0- 比较真值强制 1- 位比较使能
IDEMSK:标识符扩展屏蔽
0- 比较真值强制 1- 位比较使能
V2.0 B 位31:3——IDMSK28:0 :标识符屏蔽
0- 比较真值强制 1- 位比较使能
RTRMSK:远程发送请求屏蔽
0- 比较真值强制 1- 位比较使能
IDEMSK:标识符扩展屏蔽
0- 比较真值强制 1- 位比较使能
24、定时器标志寄存器L CANSTML
20
25、定时器标志寄存器H CANSTMH
位15:0——TIMSTM15:0 :定时器标志计数
CAN定时器标志计数范围0到65535
26、数据消息寄存器CANMSG
位7:0——MSG7:0 :消息数据 该寄存器包括了指向页Mob寄存器CAN数据位 在写页Mob寄存器后,该位与预先定义的标识符+索引的指定消息位相等。如果自动增加被使用,在数据寄存器结尾写或者读循环,索引自动增加。计数范围是8位没有结尾的循环(0,1,…,7,0,…)
五、应用实例
Atmel公司推出的8位AVR微控制器AT90CAN128,它具有扩展的CAN(控制器区域网)功能,16 MIPS的处理速度,完全适用于包括工厂和大楼设备自动化,医疗设备,航运网络及印刷媒体在内的多数CAN网络和工业应用。 5.1、CAN智能节点
该芯片内置有完全符合CAN2.0A和2.0B标准协议的CAN控制器,能与各种不同种类的收发器组成CAN智能节点,实现CAN节点数据的收发与隔离功能。下面是CTM1050收发器与AT90CAN128的应用实例: 硬件连接图:
21
AT90CAN128与CTM1050的硬件连接 CTM1050芯片功能:
CTM1050 芯片主要功能:具有将CAN 控制器逻辑电平转换为CAN总线的差动电平的功能,另外CTM1050 还具有对CAN 控制器与CAN 总线之间的隔离作用。CTM1050 芯片内部集成CAN-bus 所必须的收发电路,完全电气隔离电路,隔离电压(DC2500V)。CTM1050 是用于CAN 控制器与CAN 总线之间的接口芯片,CAN 总线波特率应用范围:40kbps—1Mbps。
引脚定义:
22
电气特性:
23
5.2、车载CAN总线控制系统的设计 5.2.1、 CAN信息描述
CAN总线上的信息以不同格式的报文发送,一个报文的内容由其标识符ID命名,ID并不指出报文的目的,但描述数据的含义,以便网络中的所有节点有可能借助报文滤波决定该数据是否使它们激活。CAN技术规范中CAN2.0A给出了CAN报文标准格式,而CAN2.0B给出了标准和扩展的两种格式。
5.2.1.1、PGN定义
PGN代码是将CAN总线上传输的不同物理意义的 信息按指定规则赋予的唯一代码,占三个字节。通过此代码区分CAN数据的类型和意义。 PGN的格式定义如下: 保留 23--16 PF 15--8 PS 7--0 8位的PF为数据类型代码,8位的PS为数据类型扩展码。当PF值小于240时为点对点的数据,PS必须为0。当PF值大于等于240时为广播数据。
5.2.1.2、CAN总线控制域格式说明
对CAN扩展桢的29位标识符(ID)进行如下定义。以下29位标识符的分配表: 优先级 28--26 保留 25--24 PF 23--16 PS/DA 15--8 SA 7--0 3位的优先级是CAN数据包优先级,可以有8个优先级,000具有最高优先级。 8位的PF为数据类型代码,PF取自在PGN代码中的PF值。
8位的PS/DA为目标地址或数据类型扩展码,当PF值小于240时为目标地址DA(当目标地址为255时表明此消息为广播消息),当PF大于或等于240时为数据类型扩展码PS,PS取自在PGN代码中PS的值。 8位的SA为发送节点CAN总线地址。 保留位固定填0。
5.2.1.3、CAN2.0B桢格式
CAN报文的帧有两种不同的帧格式,不同之处为标识符域的长度不同:含有11位标识符的帧为标准帧,含有29位标识符的帧为扩展帧。
24
2.0B标准帧(11字节): 1—3字节信息部分
4—11字节数据部分
5.2.2、 波特率计算
C A N 总线是一种有效支持分布式控制和实时控制的、多主的异步串行通信网络。由于C A N 总线具有较强的纠错能力, 支持差分收发, 适合高噪声环境, 具有较远的传输距离。在C A N 通信协议中规定, 通信波特率、每个位周期的取样位
25
置和个数, 都可以自行设定。 5.2.2.1、位周期的组成
波特率(f b i t) 是指单位时间内所传输的数据位的数量, 一般取单位时间为1 s 。波特率由通信线上传输的一个数据位周期的长度(T b i t ) 决定, 如下式所示:
一个位周期由4 个部分组成:同步段(Tsyns)、传播时间段(Tprs)、相位缓冲段1 (Tphs1)和相位缓冲段2 (Thps2)。
(2)
所有这些时间段, 都有一个共同的时间单元——系统时钟周期(TSCL)。 5.2.2.2、波特率的计算方法
时序寄存器1(设置Tscl)CANBT1
BRP5:0 :波特率预定标器
CAN控制器系统时钟Tscl周期可传播和确定单个位定时。
同步段(Tsyns)= Tscl=(BRP[5:0]+1)/clk frequency 这里是频率的形式,也可化为周期。同步时间段固定。
时序寄存器2(设置Tsjw、Tprs)CANBT2
SJW1:0 :重复同步跳转宽度
Tsjw=Tscl x (SJW[1:0]+1) : PRS2:0 :传播时间段
Tprs=Tscl x (PRS[2:0]+1)
26
时序寄存器3(设置Tphs2、Tphs1)CANBT3
位6:4——PHS22:20 :段2
Tphs2=Tscl x (PHS2[2:0]+1) 位3:1——PHS12:10 :段1
Tphs1=Tscl x (PHS1[2:0]+1) 5.2.2.3、波特率计算举例
外部晶振频率是12M的,时序寄存器的设置后,计算出CAN的波特率(此为倒叙方法)。 CANBT1 = 0x0a; //同步段为1=系统时钟周期(TSCL)=6=(5+1)T C L K CANBT2 = 0x0c; //“0x0c”传播段=7=(6+1) T C L K
CANBT3 = 0x37; //相位缓冲PH2=4=(3+1)T C L K,PH1=4=(3+1)T C L K 其中T C L K 为参考时钟的周期。
(3)
f b i t=12*1024/((1+7+4+4)*6)=125K
即此系统的波特率通过寄存器设置为125K。 5.2.3、车载CAN总线控制系统的设计
汽车CAN总线连接的主要对象有:驾驶员计算机、发动机、自动变速器、安全气囊、仪表信号采集系统、联合制动系统等。由于各个节点作用不同,所以在硬件搭建和软件设计以及通信协议的制定上都采用了相应的方案。下面以联合制动单元为例,做具体分析。
联合制动单元接收由驾驶员计算机终端发送的CAN总线消息命令,根据对液力制动扭矩、机械制动扭矩、合成扭矩等参数进行检测的状态,经过电液控制算法计算,实现前驱、后驱制动控制。对正常制动回路油位、紧急制动回路油位的报警等信息,通过CAN总线反馈给驾驶员计算机终端。
27
5.2.3.1、联合制动单元硬件电路组成
以AT90CAN128单片机作为控制系统核心,外围设有8路光隔模拟量输入、4路模拟量输出、多路光隔开关量输入、输出、LED报警及CAN总线收发器,总线的接口芯片选用的是Philips公司的PCA82C250。具体结构见图2。
图2、制动单元硬件框图
5.2.3.2、通信协议制定
CAN 协议是一个非常简单的协议。它只定义了物理层和数据链路层, 本身并不完整, 有些复杂的应用问题需要一个更高层次的协议—应用层协议来实现,比如, CAN 数据帧一次最多只能传送8 字节;CAN 只提供了非确认的数据传输服务等。
A、 各终端消息标识符的定义
表1定义了驾驶员计算机终端及联合制动单元之间相互通讯的消息标识符。
表1、各终端的消息标识符
采用CAN扩展帧的29位标识符进行定义,其中P为3位优先级;R为保留扩展位;8位的BW为报文类型代码;8位的BD为目标地址或报文类型扩展码;8位的BY为发送报文源地址。部分设备节点名称和分配地址如下:主驾驶员终端地址10、副驾驶员终端地址20、联合制动单元地址30。 B、各消息类型和命令值内容的定义
28
驾驶员计算机终端对联合制动单元的控制消息内容为2个字节——命令类型和命令值。命令类型包括:状态查询命令(数据0x1,命令值0x0)、前/后驱制动命令(数据0x2/0x3,命令值0x0)、联合制动单元前/后驱制动信息确认(数据0x4/0x5,命令值0x0)等。
联合制动单元提供给驾驶员计算机终端的消息内容包括:联合制动单元状态信息(7字节,分别为液力制动扭矩、机械制动扭矩、合成扭矩、速度以及紧急回路和正常油压的数值,以及正常制动回路油位和紧急制动回路油位的报警状态)、联合制动单元报警信息(2字节,分别为正常制动回路油位报警和紧急制动回路油位的报警)、联合制动单元制动返回消息(2字节,分别为收到的前驱或后驱制动命令的命令数据和命令值)等。
5.2.2.3 、 软件设计(CAN总线通讯部分) A、 初始化部分
初始化前将CAN通用控制寄存器的最高位置1(复位模式)。完成后,回到操作模式。
下面给出了CAN控制器的初始化程序: void CAN_INIT ( void ) {
CANGCON = 0x80 ; /*进入复位模式并且复位MOb*/
while ( ENFG == 1 ) ; /*测试CANGSTA中的ENFG位是否为0*/ CANGIE = 0xB0 ; /*使能所有中断及接收、发送中断*/ CANIE2 = 0xFF ; /*MOb 0~7中断使能*/ CANIE1 = 0x00 ; /*MOb 8~14中断禁止*/ CANBT1 = 0x0a ; /*设置波特率为125kbps*/ CANBT2 = 0x0c ; CANBT3 = 0x37 ;
CANTCON = 0x8F ; /*设置定时器预定标*/ /*以“联合制动单元状态查询消息”为例*/
CANPAGE = TX_PAGE ; /*指定此消息的MOb页(寄存器中的高4位)*/ CANCDMOB = 0x17 ; /*禁止状态,IDE位为1表示扩展帧,数据长度代码为7*/ CANIDT1 = 0x84 ; /*标识符设置*/
29
CANIDT2 = 0xB1 ; CANIDT3 = 0x18 ; CANIDT4 = 0xF2 ;
CANIDM1 = 0xFF ; /*标识符屏蔽设置*/ CANIDM2 = 0xFF ; CANIDM3 = 0xFF ; CANIDM4 = 0xFF ;
CANGCON = 0x02 ; /*进入操作模式*/
While ( ENFG == 0 ) ; /*测试CANGSTA中的ENFG位是否为1*/ }
B、消息的发送部分
消息的发送均采用中断方式实现。首先通过设置CANPAGE寄存器来指定被发送的页数,将数据装载到CANMSG寄存器中,然后由CANCDMOB寄存器来控制发送动作,将消息发送出去,同时将触发CANSTMOB中的TXOK中断。
下面以协议中的“联合制动单元状态查询命令”为例,给出了发送程序: void CAN_TX ( void ) {
CANPAGE = TX_PAGE ; /*指定此消息的MOb页(寄存器中的高4位)*/ CANMSG = 0x01 ; /*装载消息数据*/ CANMSG = 0x00 ; /*装载消息命令值*/
CANCDMOB = 0x52 ; /*发送状态,IDE位为1表示扩展帧,数据长度代码为2*/ }
void CAN_TX_INTER ( void ) /*发送中断子程序*/ {
If ( ( CANSTMOB & 0x40 ) == 0x40 ) /*发送中断*/ {
CANSTMOB & = 0xBF ; /*清TXOK位*/ CANCDMOB = 0x12; /*停止发送*/ } }
30
C、 消息的接收部分
消息的接收同样采用中断方式实现。先设置CANPAGE寄存器来指定接收的页数,随后由CANCDMOB寄存器来控制接收动作,当有消息到达时,将触发CANSTMOB中的RXOK中断,消息中的数据将被装载到CANMSG寄存器中。
下面以协议中的“接收联合制动单元状态信息”为例,给出了接收程序: void CAN_RX ( void ) {
CANPAGE = RX_PAGE ; /*指定此消息的MOb页(寄存器中的高4位)*/ CANCDMOB = 0x97 ; /*接收状态,IDE位为1表示扩展帧,数据长度代码为7*/ }
void CAN_RX_INTER ( void ) /*接收中断子程序*/ {
If ( ( CANSTMOB & 0x20 ) == 0x20 ) /*接收中断*/ {
CANSTMOB & = 0xDF ; /*清RXOK*/ For ( i = 0 ; i < 7 ; i++ ) {
MObData [ RX_PAGE ] [ i ] = CANMSG ; /*装载数据*/ } } }
31
因篇幅问题不能全部显示,请点此查看更多更全内容