引言
CAN总线应用中,总线节点是CAN总线的基本组成部分。CAN总线节点有两种典型设计方法,第一种方法采用MCU结合独立CAN控制器组成总线节点:第二种方法采用独立的MCU,这时MCU需要内部集成CAN控制器。由于第二种设计方法所用的器件少,电路关系简单,已得到广泛应用。本文重点分析AVR系列单片机内部集成的CAN控制器及其应用方法。
AT90CAN集成CAN总线控制器分析
AVR内部集成CAN控制器的芯片主要包括AT90CAN32/64/128三种单片机,它们之间的主要区别是存储空间不同。
AT90CAN32/64/128内部集成的CAN总线控制器由CAN通道和邮箱组成,其工作参数通过寄存器设置,工作过程也通过寄存器监控。CAN控制器基本结构如图1所示。
CAN总线控制器组成
CANh通道
CAN通道是CAN控制器用于完成发送和接收的部分。使用CAN控制器时,需要对CAN通道工作模式和位定时进行设置。
(1)CAN通道工作模式
CAN通道有使能、待命以及只听三种工作模式。不同模式下通道、时钟以及寄存器的工作模式不同,详细内容见参考文献[3]。
(2)位定时
CAN通道位定时的概念和基本规定与CAN总线协议一致。AVR~~列单片机中,CAN总线控制器时间份额(TQ即为波特率分频器输出时钟信号的周期。CAN总线位周期由同步段(SYNS)、传播段(PRS)、相位缓冲段l(PHSl)、相位缓冲段2(PHS2)组成,每个时间段的长度都是时间份额(T∞的整数倍。通过位定时设置可以确定各时间段的长度,同时还可以设置重同步跳转宽度(SJw)以及信号采样位置和采样次数。设置时,CAN总线位时间必须设置在8~25个时间份额之间。位定时设置完毕后即可计算总线波特率,计算方法见参考文献。
邮箱及报文对象(MOb)
AT90CAN32/64/128单片机集成的CAN控制器通过邮箱存储报文,并以MOb的形式管理。邮箱包含ls个独立的MOb,每个MOb都可以设置为接收或发送模式。发送时,编号小的MOb优先级高。接收时,只有当CAN控制器接收到报文的标识符与某个MOb预先设置的标识符吻合时,CAN控制器才会将接收到的报文存储在该MOb中,并可以通过中断的方式通知单片机。CAN控制器还可自动对远程帧作出应答,从而减轻CPU的负担。
(1)MOb工作模式
MOb包括禁止、发送、接收、自动应答、帧缓冲器接收等6种不同的工作模式。芯片复位后,MOb并没有默认的工作状态。因此,在使能MOb之前必须对MOb进行配置,配置内容及相应的工作模式如表l所示。
(2)接收滤波器
AT90CAN32/64/128单片机集成的cAN总线控制器接收报文时,首先要完成接收滤波。接收滤波时,需要将接收报文的ID+RTR+RBn+IDE域与接收模式MOb的IDT+TRITAG+TBnTAG+IDE域进行比较,比较过程中要考虑掩码(AVR单片机掩码为“1”时无效,掩码为“0”时有效),结果一致后确认匹配,相应MOb的内容被更新。接收滤波器原理图如图2所示。
(3)MOb页
邮箱中的MOb以页的形式存储和管理。当需要选择邮箱中某个MOb进行操作时,首先要用CANPAGE寄存器完成对MOb的选择,然后才能进行相应操作。
(4)CAN数据缓存区
为了保护MOb寄存器的配置,将寄存器存储在MOb内部,而数据则存储在CAN数据缓存区中。缓存区可看作一个队列,每一个MOb都对应一个缓存区,数据缓存区可通过CAN消息寄存器访问。访问某一个MOb对应的数据缓存区时需要使用数据索引,该索引是指向缓存区中某个数据字节的地址指针。CAN报文数据的第一个字节存储在数据缓存区索引为O的地址。
CAN中断
CAN控制器包括普通中断和特殊中断。普通中断包括接收完成中断、发送完成中断、错误中断f位错误、填充错误、CRC校验错误、形式错误、应答错误)、帧缓冲区满中断以及总线关闭设置中断等。特殊中断主要指CAN定时器超时中断。普通中断由ENIT位使能,特殊中断由ENORVT位使能。CAN总线控制器各种中断的相互关系如图3所示。
当中断发生时,相应MOb的CANSTMOB寄存器中断标志位或通用CANGIT寄存器的中断标志位置位。如果CANIE寄存器中的ENRX/ENTX/ENERR职位,CANSITn寄存器中相应的MOb位置位,以指出发生中断的MOb。
为了响应Mob中断,CANsTMOB寄存器中的相应位(RXOK、TXOK)必须通过软件复位。具体的复位操作过程为“读一修改一写入”。
为了响应普通中断,CANGIT寄存器中的相应位(BXOK、BOFFIT)必须通过软件复位。该操作需要通过向这些标志位写入逻辑“1”完成。OVRTIM(cAN定时器溢出中断)标志位复位的方式有所不同。当执行CAN定时器溢出中断程序以及CANGIT寄存器中其它中断标志位置位时,OVRTIM标志位自动复位。
传输过程中,当CAN控制器检测到形式错误时,将同时触发位错误,从而产生2种错误中断。当出现MOb错误时,仅在CANSTMOB寄存器中置位相应的标志位,CANGIT寄存器不会发生变化。
控制寄存器
AVR系列单片机通过控制寄存器设置并控制CAN总线控制器的工作。控制寄存器包括通用寄存器和MOb寄存器。CAN总线控制器寄存器结构如图4所示。
(1)通用寄存器
通用寄存器包括控制寄存器和状态寄存器两类。
CAN通用控制寄存器(CANGCON)和通用状态寄存器(CANGSTA)用于设置及查询CAN控制器的工作模式;CAN通用中断寄存器(CANGIT)和通用中断使能寄存器(CANGIE)用于使能中断并查询中断标志:CAN使能MOb寄存器(CANEN2和CANENl)用于使能MOb。CAN使能MOb中断寄存器(CANIE2和CANIEl)用于使能MOb中断;CAN位定时寄存器(CANBTl、CANBT2和CANBT3)用于设置位定时相关的内容,包括时钟分频系数、同步跳转宽度、总线位周期各段长度和采样点:CAN定时器控制寄存器(cANTCON)用于设置CAN定时器分频系数。CAN定时器寄存器(cANTIML和CANTIMH)用于读取CAN定时器计数值:TTC定时器寄存器(CANTTCL和CANTTCH)用于读取
TTC定时器计数值:CAN发送错误计数器寄存器(cANTEC)用于记录CAN发送错误次数。CAN接收错误计数器寄存器(cANREC)用于记录CAN接收错误次数:CAN最高优先级MOb寄存器(cANHPMOB)用于记录具有最高优先级MOb的页码:CAN的MOb页寄存器(CANPAGE)用于设置当前有效MOb的页码以及CAN数据缓冲区索引增加模式,同时可设置或读取CAN数据缓冲区索引值。
(2)MOb寄存器
MOb状态寄存器(CANSTMOB)用于显示MOb的状态,主要包括发送、接收完成信息以及错误信息:MOb控制与数据长度控制寄存器(CANCDMOB)用于设置当前有效MOb的工作模式、标识符扩展标志以及数据长度:标识符寄存器(CANIDTl、CANIDT2、CANIDT3和CANIDT4)用于设置MOb标识符;标识符屏蔽寄存器(CAN!DMl、CANIDM2、CANIDM3和CANIDM4)用于设置MOb标识符屏蔽码:时间戳寄存器(cANSTML和CANSTMH)用于读取MOb时间戳:数据寄存器(cANMSG)用于读写当前有效MOb的数据。
控制器工作原理与使用方法
CAN总线控制器根据通用寄存器的设置确定其基本工作参数(位定时、中断设置、CAN定时器设置等)。工作时,CAN通道扫描邮箱中的MOb,完成发送和接收。发送时,CAN通道寻找设置为发送模式并具有最高优先级的MOb,找到后通过CAN通道向总线发送该MOb。接收时,CAN通道扫描设置为接收模式的MOb,通过接收滤波发现匹配的MOb后,根据接收报文刷新匹配的MOb。
根据上述CAN总线控制器工作原理,首先利用通用控制寄存器完成对CAN控制器的基本配置,主要包括位定时、中断、CAN定时器等的设置:然后利用MOb页寄存器和MOb寄存器初始化MOb,主要包括标识符、标识符屏蔽码等;之后使能CAN通道,CAN通道将扫描邮箱内的MOb,并根据MOb设置进行相应操作,操作结果可通过查询或中断的方式监控。
集成CAN总线控制器应用
应用CAN控制器可完成发送、接收、自动应答、错误处理等任务。下面重点讨论发送和接收的应用方法。
发送数据帧或远程帧
(1)发送前初始化。需要初始化的域包括标识符(IDT)、标识符扩展位(IDE)、远程发送请求位(TRTrAG)、数据长度代码(DLC)、保留位(RBnTAG)、消息需要发送的数据(MSG)。
(2)配置MOb(CONMOB)。配置完成后,MOb发送数据帧或远程帧准备就绪。
(3)CAN通道扫描配置为“发送”状态的所有MOb、找到优先级最高的1个后,将其发送出去。
(4)发送结束后,TXOK标志位置位(可产生相应中断)。
(5)在重新始化之前,MOb所有参数和数据均可访问。
3.2接收数据帧或远程帧
(1)接收前初始化。需要初始化的域包括标识符(IDT)、标识符掩码(IDMSK)、标识符扩展位(IDE)、标识符扩展位掩码(IDEMSK)、远程发送请求位(TRTTAG)、远程发送请求位掩码(TRTTAGMSK)、数据长度代码(DLC)、保留位(RBnTAG)。
(2)配置MOb(CONMOB)。配置完成后,MOb接收数据帧或远程帧准备就绪。
(3)当总线收到帧标识符时,CAN通道扫描所有设置为“接收”模式的MOb,找出匹配且优先级最高的1个,该MOb的IDT、IDE、DLC由接收到的数据帧更新。
(s)接收完成后,接收消息的数据被存储在相应MOb的数据缓冲区中,RXOK标志位置位(可产生相应中断)。
(6)在重新初始化之前,MOb所有参数和数据均可访问。
结语
(1)使用AT90CAN32/64/128系列单片机时,可不使用外部独立CAN控制器完成CAN总线节点的设计。
(2)AT90CAN32/64/128系列单片机集成的CAN总线控制器主要由CAN通道、邮箱和控制寄存器组成。CAN控制器的工作主要通过寄存器控制完成。