打印

CAN通讯超时功能

[复制链接]
6880|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rainlive|  楼主 | 2014-12-9 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位,关于CAN通讯超时功能怎么实现?
用中断方式已实现了数据收发,下一步想实现接收超时功能,看了超时功能的介绍,只了解到CANTSC、CANMOTO、CANTOC寄存器的定义,烦请各位大侠能通俗的解释一下超时功能及如何实现吗?
听取一下大家的看法,谢谢

相关帖子

沙发
airwill| | 2014-12-9 21:24 | 只看该作者
超时功能可算是 DSP 的 eCAN 特有的功能.
为确保在预定义时间内所有消息都能发出或收到,所以每个邮箱都设置了自己的超时寄存器。 如果消息在超时寄存器表明的时间内,没有发出或收到一个消息并且 TOC 寄存器中相应的 TOC 位[n] 被设定的话,那么在超时状态寄存器(TOS)中将设定一个标志。
对于发送邮箱,不论是成功发送或者发送请求中止的原因,当 TOC[n]位或相应的 TRS [n]位被清除时,TOS标志被清除。 对于接收邮箱,当相应的 TOC[n]位被清除时,TOS[n标志被清除。

使用特权

评论回复
板凳
wangch_sh| | 2014-12-10 08:34 | 只看该作者
学习。

使用特权

评论回复
地板
rainlive|  楼主 | 2014-12-10 09:27 | 只看该作者
airwill 发表于 2014-12-9 21:24
超时功能可算是 DSP 的 eCAN 特有的功能.
为确保在预定义时间内所有消息都能发出或收到,所以每个邮箱都设 ...

CANTSC怎么计算啊,按1Mbps位速率,CANTSC每1us增加1,那按125Kbps位速率的话,是不是每8us才增加1啊?

使用特权

评论回复
5
airwill| | 2014-12-10 10:26 | 只看该作者
是的, eCAN 里的各个时间寄存器都是以位时间为单位计数的.

使用特权

评论回复
6
rainlive|  楼主 | 2014-12-10 15:06 | 只看该作者
airwill 发表于 2014-12-10 10:26
是的, eCAN 里的各个时间寄存器都是以位时间为单位计数的.

用中断实现的数据收发,目的是想增加超时功能,判断发送是否超时,若超时,返回TRANSMIT_OVERTIME,现在我在TRS置位前配置了寄存器
    struct ECAN_REGS ECanaShadow;
    //设置接收邮箱超时寄存器:读CANTSC的值,设置MOTO;
    //MOTO:消息对象超时寄存器,用于真正地接收消息的定时邮递计数器的限制值
    EALLOW;
    BeginTscTime = ECanaRegs.CANTSC;
    ECanaMOTORegs.MOTO16 = BeginTscTime + 2;
    EDIS;
    //设置接收邮箱超时寄存器:设置CANTOC;
    //CANTOC:超时控制寄存器位        1:使能邮箱超时功能        0:禁止邮箱超时功能
    //在设置TOC[n]位之前,MOTO寄存器应该加载与TSC相关的超时值
    ECanaShadow.CANTOC.all = ECanaRegs.CANTOC.all;
    ECanaShadow.CANTOC.bit.TOC16 = 1;
    ECanaRegs.CANTOC.all = ECanaShadow.CANTOC.all;
那么在什么地方判断
        if ((ECanaRegs.CANTOS.all & 0xFFFF0000) != 0)
        {
                return TRANSMIT_OVERTIME;//返回指示发送超时
        }

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

13

帖子

0

粉丝