STM8 beCAN工作模式
beCAN有3个主要的工作模式:初始化模式、正常模式和睡眠模式。 在硬件复位后,beCAN工作在睡眠模式以减少功耗。软件通过对CAN_MCR寄存器的INRQ或SLEEP置'1',可以请求beCAN进入初始化或睡眠模式。一旦进入了初始化或睡眠模式,beCAN就对CAN_MSR寄存器的INAK或SLAK位置'1'来进行确认。当INAK和SLAK位都为'0'时,beCAN就处于正常模式。在进入正常模式前,beCAN必须跟CAN总线取得同步;为取得同步,beCAN要等待直到CAN总线处于空闲状态,即在CANRX引脚上监测到11个连续的隐性位。
初始化模式
软件初始化应该在STM8S硬件处于初始化模式时进行。设置CAN_MCR寄存器的INRQ位为'1',请求beCAN进入初始化模式,然后等待硬件对CAN_MSR寄存器的INAK位置'1'来进行确认。
可以通过清除CAN_MCR寄存器的INRQ位,来请求beCAN退出初始化模式,一旦硬件对CAN_MSR寄存器的INAK位清'0',beCAN就退出了初始化模式。不管怎样,退出初始化模式时性RX引脚必须处于隐状态。
当beCAN处于初始化模式时,禁止CANz总线上报文的接收和发送,并且CANTX引脚输出隐性位(高电平)。进入初始化模式,不会改变寄存器的配置。
要初始化beCAN控制器,软件至少要对位时间特性寄存器和过滤器组进行设置。如果没有使用过滤器组,建议保持其处于非激活状态(使CAN_FCRx寄存器中相应的FACT位为0)
正常模式
在初始化完成后,软件必须请求STM8硬件进入正常模式,以便正常接收和发送报文。软件可以通过对CAN_MCR寄存器的INRQ位清'0',来请求从初始化模式进入正常模式,然后要等待硬件对CAN_MSR寄存器的INAK位置'1'的确认。再与CAN总线取得同步,即在CANRX引脚上监测到11个连续的隐性位(等效于总线空闲)后,beCAN才能正常接收和发送报文。
过滤器初值的设置不需要在初始化模式中完成,但必须在过滤器处于非激活状态下完成(相应的FACT位为0)。但是过滤器的位宽和模式的设置,则必须在初始化模式中进行。
睡眠模式(低功耗)
为了降低功耗,beCAN可工作在低功耗模式---睡眠模式。根据软件的使用需求,通过对CAN_MCR寄存器的SLEEP位置'1',以进入睡眠模式。在睡眠模式下,beCAN的时钟停止了,但软件仍然可以访问邮箱寄存器。
注:当STM8_beCAN处于睡眠模式时,软件通过对CAN_MCR寄存器的INRQ位置'1'来请求进入初始化模式,必须同时将SLEEP位清'0',才能进入初始化模式。可以通过两种方式CAN将be唤醒(退出睡眠模式):由软件清除SLEEP位,或者当硬件检测到CAN总线的活动时。
如果CAN_MCR寄存器的AWUM位为'1',一旦检测到CAN总线的活动,硬件就自动对SLEEP位清'0'来唤醒beCAN。如果CAN_MCR寄存器的AWUM位为'0',当唤醒中断发生时,软件必须将SLEEP位清'0'以退出睡眠状态。
注:如果唤醒中断被使能(CAN_IER寄存器的WKUIE位为'1'),那么一旦检测到CAN总线活动就会产生唤醒中断,而不管硬件是否会自动唤醒beCAN。
当SLEEP位被清'0'后,睡眠模式的退出必须与CAN总线同步,请参考图128:beCAN工作模式。不管怎样,在退出初始化模式时RX引脚必须处于隐性状态。当硬件对SLAK就确位清'0'时,认了睡眠模式的退出。
(图128:STM8_beCAN工作模式 )
时间触发通讯模式
在该模式下,CAN的内部硬件计数器被激活,用于产生(Rx和Tx邮箱)时间戳,分别存储在CAN_MTSRH寄存器和CAN_MTSRL寄存器中,内部计数器在接收和发送的帧起始位的采样点位置被捕捉,生成时间戳。
TGT位(CAN_MDLCR寄存器中发送时间戳位)能将CAN_MTSRH寄存器和CAN_MTSRL寄存器里的内容以报文的最后两个字节自动发送出去(请参考TTCAN的规范ISO 11898-4)。在这种情况下,TTCM位(CAN_MCR寄存器中时间触发通讯模式位)必须置位以使能时间触发通讯机制。