打印

请教28335的CAN发送超时和接收超时功能的设置

[复制链接]
4894|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llf021421|  楼主 | 2014-10-13 22:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我最近在调试28335的CAN模块,中断发送和中断接收都没有问题了,现在遇到的问题的想实现CAN的发送超时和接收超时的处理。发送超时处理已经实现,但是接收超时的时候,会出现时间还没有达到MOTO设置 的值就产生了接收超时中断,不知道是不是代码没有设置好?
我使用CANA的邮箱0作为发送邮箱,邮箱1作为接收邮箱。下面这个代码是我发送的函数,大家帮我看一下,有哪里设置不正确不?
void CanaSendHandle(Uint32 Value)
{
        Uint32 BeginTscValue,SendTimeOut,ReceiveTimeOut;
        SendTimeOut = 2000;  //发送超时时间为:1*2000=2000us=2ms
        ReceiveTimeOut = 100000; //接收超时时间为:1*100000us=100000us=100ms
        //1.设置邮箱的值
        ECanaMboxes.MBOX0.MDL.all = Value;
        //=======================================================
        //设置发送邮箱超时寄存器
        //1.读取CANTSC值,然后设置MOTO的值

        EALLOW;
        BeginTscValue = ECanaRegs.CANTSC;
        EDIS;
        ECanaMOTORegs.MOTO0 = BeginTscValue + SendTimeOut;
        ECanaMOTORegs.MOTO1 = BeginTscValue + ReceiveTimeOut;
        //2.设置CANTOC的值
        ECanaShadow.CANTOC.all = ECanaRegs.CANTOC.all;
        ECanaShadow.CANTOC.bit.TOC0 = 1;
        ECanaShadow.CANTOC.bit.TOC1 = 1;
        ECanaRegs.CANTOC.all = ECanaShadow.CANTOC.all;

        //3.设置TRS位
        ECanaShadow.CANTRS.all = ECanaRegs.CANTRS.all;
        ECanaShadow.CANTRS.bit.TRS0 = 1;
        ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all;
        //3.等待邮箱发送成功
        do
        {
                ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
        }while(ECanaShadow.CANTA.bit.TA0 != 1);
        //4.清除TA位
        ECanaShadow.CANTA.bit.TA0 = 1;
        ECanaRegs.CANTA.all = ECanaShadow.CANTA.all;
    //5.等待清除TA位
        do{
                ECanaShadow.CANTA.all = ECanaRegs.CANTA.all;
        }while(ECanaShadow.CANTA.bit.TA0 != 0);
}

相关帖子

沙发
llf021421|  楼主 | 2014-10-15 23:19 | 只看该作者
自已顶!

使用特权

评论回复
板凳
霜刀雪剑| | 2014-10-16 13:57 | 只看该作者
也在研究CAN这块,不过我还没有做超时处理,想问下LZ,除了超时处理,LZ有没有做CAN报文校验之类的处理。

使用特权

评论回复
地板
llf021421|  楼主 | 2014-10-19 12:03 | 只看该作者
霜刀雪剑 发表于 2014-10-16 13:57
也在研究CAN这块,不过我还没有做超时处理,想问下LZ,除了超时处理,LZ有没有做CAN报文校验之类的处理。 ...

好像28335的CAN模块自己对每一帧做了硬件CRC校验,不需要我们另外做了

使用特权

评论回复
5
拿起书本| | 2014-10-20 13:29 | 只看该作者
LZ最好检查GPIO管脚CAN功能使能与否,很多开发板硬件做了小量的修改。


使用特权

评论回复
6
llf021421|  楼主 | 2014-11-7 13:52 | 只看该作者
已经解决了,设置有些寄存器需要32位访问.

使用特权

评论回复
7
pallee| | 2014-11-7 22:11 | 只看该作者
请教下楼主是哪个寄存器需要32位访问?我看你的程序中对于具体位的访问不都已经用了影子寄存器了么?

使用特权

评论回复
8
rainlive| | 2014-12-9 14:34 | 只看该作者
LZ,请教接收超时功能怎么实现的?

使用特权

评论回复
9
一毛不是钱| | 2018-3-7 15:04 | 只看该作者
请问楼主一下怎么设置can的发送中断?

使用特权

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

本版积分规则

个人签名:专注于运动控制

6

主题

185

帖子

1

粉丝