在信息发送或接收时,eCAN模块中的几个功能可以用于监控时间。eCAN中一个单独的状态机用来处理时间控制功能。在访问寄存器时,该状态机的优先级低于CAN状态机。因此,其他正在进行的动作可以推迟时间控制功能,引起一定的延时时间。
(1)时间标志功能
为了得到信息接收或发送的时间标识,在模块中用了一个独立运行的32位的定时器(TSC)。当存放接收到的信息或已发送一条信息时,将该定时器的值写入相应邮箱的时间标志寄存器(信息对象时间标志MOTS)。
TSC定时器由CAN总线的位时钟驱动。在初始化模式或模块处于休眠或悬挂模式时,定时器停止。在上电复位后,独立运行的定时器清零。
通过向TCC位(CANMC.14)写入1,可以将TSC寄存器的最高有效位清零。当邮箱16成功发送或接收一条信息时(取决于CANMD.16的设置),TSC寄存器也可以清零。这通过设置MSCC位(CANMC.5)来使能。因此,可以用邮箱16使网络的全局时间同步。CPU可以读写独立运行的定时器。
通过TSC定时器溢出中断标志位TCOFn(CANGIF0/1寄存器的位16)可以检测出TSC定时器是否溢出。当TSC定时器的最高位变为1时,溢出发生。因此,CPU有足够的时间处理这种情况。
1)时间标志计数寄存器CANTSC(Time-Stamp Counter Register)
时间标志计数寄存器保存着时间标志定时器(TSC)在任一时刻的值。它是一个由CAN总线的位时钟来提供时钟独立运行的32位定时器。例如,波特率为1Mbit/s时,TSC每隔1μs加1。
位31~0,TSC寄存器的位31~0:时间标志定时器。用于保存针对时间标志功能和超时功能的局域网时间定时器的值。
2)信息对象时间标志寄存器MOTS(Message Object Time Stamp Registers)
当成功发送或接收对应的邮箱数据时,信息对象中时间标志寄存器将保存有TSC的值。每个邮箱都有自己的MOTS寄存器。
位31~0,MOTS[31:0]:信息对象的时间标志寄存器。其值为信息实际接收或发送完成时的TSC值。
(2)超时功能
要保证在预先定义的周期中发送或接收所有的信息,每一个邮箱都有自己的超时寄存器。如果在超时寄存器所指定的时间没有完成发送或接收信息,当置位CANTOC寄存器中对应位CANTOC.n,则会置位超时状态寄存器(CANTOS)中的一个标志位。
对于发送邮箱,当CANTOC.n位清零或相应CANTRS.n位清零时,不管是否发送成功或终止发送请求,CANTOS.n标志都清零。对于接收邮箱,当相应CANTOC.n位清零时,CANTOS.n标志清零。
CPU也可以通过向超时状态寄存器写入1来清除超时状态寄存器的标志。
信息对象超时寄存器(MOTO)可以作为RAM来使用。状态机扫描所有的MOTO寄存器并把它们与TSC定时器的值进行比较。如果TSC寄存器的值大于或等于超时寄存器的值,并且相应的CANTRS位(仅用于发送邮箱)和CANTOC.n位都置位,则会置位对应的CAN⁃TOS.n位。由于要依次扫描所有的超时寄存器,所以CANTOS.n位被置位前会有一个延时。
1)信息对象超时寄存器MOTO(Message-Object Time-Out Registers)。信息对象超时寄存器保存着对应邮箱成功发送或接收数据的TSC寄存器的超时值。每个邮箱都有自己的寄存器MOTO。
32位的信息对象超时寄存器MOTO存放用于实际发送或接收信息的时间标志定时器(TSC)的值。
2)超时控制寄存器CANTOC(Time-Out Control Register)。超时控制寄存器控制着是否使能邮箱的超时功能。(www.daowen.com)
位31~0,CANTOC寄存器的位31~0:超时控制寄存器。
●1:CPU置位CANTOC.n位使能邮箱n超时功能。在置位CANTOC.n位以前,应该用TSC相关的超时值装载对应的MOTO寄存器。
●0:禁止超时功能。不置位CANTOS.n标志。
3)超时状态寄存器CANTOS(Time-Out Status Register)
超时状态寄存器保存着已超时邮箱的状态信息。
位31~0,CANTOS寄存器的位31~0:超时状态寄存器。
●1:邮箱n已超时。当TSC寄存器的值大于或等于对应邮箱n的超时寄存器的值,并且已置位CANTOC.n位。
●0:没有超时发生或禁止了邮箱超时功能。
当同时满足以下3个条件时,置位CANTOS.n位:
①TSC的值大于或等于超时寄存器(MOTOn)的值。
②置位CANTOC.n位。
③置位CANTRS.n位。
超时寄存器可以作为一个RAM来使用。状态机扫描所有的超时寄存器,并将它们与时间标志定时器的值相比较。由于依次扫描所有的超时寄存器,所以可能出现即使发送邮箱超时而CANTOS.n位仍然没有置位的情况。当邮箱已发送成功,并且在状态机扫描该邮箱的超时寄存器之前就已将CANTRS.n清零时,上述情况就可能发生。这种情况对接收邮箱也适用。在状态机扫描该邮箱的超时寄存器时,可以设置CANRMP.n位为1。但是对于接收邮箱,在到达超时寄存器指定的时间之前可能还没有接收信息。
MTOF0/1位在用户应用程序中的作用:
在邮箱进行发送或接收时,CPK自动清零MTOF0/1位和CANTOS.n位。也可以由用户通过CPU清零。在超时情况下,将置位MTOF0/1位和对应的CANTOS.n位。当数据最终成功传输后,CPK自动清零这些位。以下是MTOF0/1位可能的行为:
①超时情况发生。将置位MTOF0/1位和CANTOS.n位。通信失败,即不再发送或接收该帧,但会请求一个中断。应用程序处理该问题后最终将清除MTOF0/1位和CANTOS.n位。
②超时情况发生。将置位MTOF0/1位和CANTOS.n位。但通信最终成功,即发送或接收了该帧。CPK自动清除MTOF0/1位和CANTOS.n位,此时仍然会请求一个中断,因为PIE模块记录着中断的发生情况。当中断服务程序(ISR)扫描CANGIF0/1寄存器时,不会查看MTOF0/1位的设置情况。这是一个“假”中断,按“假”中断处理应用程序只需返回主程序,什么事情都不作。
③超时情况发生。将置位MTOF0/1位和CANTOS.n位。当正在执行针对超时的中断服务程序ISR时,通信成功了。这种情况必须谨慎处理。当一个邮箱在发生中断和中断服务程序ISR准备处理之间的时段发送出去了,则该邮箱不应该重新发送。一种处理方法是检测CANES寄存器中的TM/RM位。这些位反映了CPK是否正在发送或正在接收。如果是正在发送或接收,应用程序应该等待通信完成后再检查CANTOS.n位。如果通信仍没有成功,则用户程序应该采取相应的纠正措施。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。