打印

求助F28035 CAN发送ID的赋值?

[复制链接]
1949|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
DSPTYJ|  楼主 | 2014-3-19 08:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我是新手,刚注册的。我在用F28035做CAN通信,现在碰到了一个问题,在ECAN的初始化里配置了发送ID值后,我想在CAN接收中断里改变这个ID值,却无效,始终是ECAN初始化里赋的值

这个是初始化的ID赋值
        EALLOW;
        ECanaMboxes.MBOX0.MSGID.all = 0;
        kk = 0xC0000082;//IDE=1,AME=1使用相应的接收屏蔽位,AAM=0正常传输模式,给29位的低8位送ID号:0x82
        kk |= 0x10000000;//送功能码
        ECanaMboxes.MBOX0.MSGID.all = kk;
        EDIS;

相关帖子

沙发
DSPTYJ|  楼主 | 2014-3-19 08:47 | 只看该作者
补充一下,我在接收中断里也是这样赋值的,可是,是无效的,发送到上位机显示的ID还是ECAN初始化里配置的ID,就是说在接收中断里改变不了ID,不知道是咋回事?求助

使用特权

评论回复
板凳
chybeyond| | 2014-3-19 09:14 | 只看该作者
调试一下看是否进入了中断

使用特权

评论回复
地板
WYT440| | 2014-3-19 09:54 | 只看该作者
中断里面怎么写的?检查下是否有错误的地方

使用特权

评论回复
5
DSPTYJ|  楼主 | 2014-3-19 12:15 | 只看该作者
//ECAN接收中断
interrupt void cana_receive_isr(void)
{
        while(ECanaRegs.CANRMP.bit.RMP16 != 1);
        ECanaRegs.CANRMP.bit.RMP16 = 1;//清零RMP16中断标志

        ECanaRegs.CANMIM.all = 0;////禁止所有邮箱中断

        ServiceDog();//喂狗,注意:狗叫周期是68us

        //读取16号邮箱的数据
        MboxL = ECanaMboxes.MBOX16.MDL.all; //
        MboxH = ECanaMboxes.MBOX16.MDH.all; //

        //修改ID
        EALLOW;
        ECanaMboxes.MBOX0.MSGID.all = 0;
        kk = 0xC0000085;//IDE=1,AME=1使用相应的接收屏蔽位,AAM=0正常传输模式,给29位的低8位送ID号:0x82
        kk |= 0x10000000;//送功能码:0x10000000
        ECanaMboxes.MBOX0.MSGID.all = kk;
        EDIS;

        EALLOW;
        ECanaRegs.CANTRS.all = 0x00000001;//发送请求设置寄存器,请求0号邮箱发送
        while(ECanaRegs.CANTA.all != 0x00000001);//等待0号邮箱成功发送
        ECanaRegs.CANTA.all = 0x00000001;//清除0号邮箱的发送成功确认标志位,写1清零
        ECanaRegs.CANGIF0.all = 0xFFFFFFFF;//清除中断0所有标志位,写1清零
        ECanaRegs.CANGIF1.all = 0xFFFFFFFF;//清除中断1所有标志位,写1清零
        EDIS;

        ECanaRegs.CANMIM.bit.MIM16 = 1;//16号接收邮箱中断使能
        PieCtrlRegs.PIEACK.bit.ACK9 = 1;
        IER |= 0x0100;//INT9
        ServiceDog();//喂狗,注意:狗叫周期是68us
}

使用特权

评论回复
6
DSPTYJ|  楼主 | 2014-3-19 12:21 | 只看该作者
求助啊各位大神

使用特权

评论回复
7
DSPTYJ|  楼主 | 2014-3-20 08:15 | 只看该作者
我的问题没人回答。。。。

使用特权

评论回复
8
zhangmangui| | 2014-3-20 10:46 | 只看该作者
DSPTYJ 发表于 2014-3-19 12:15
//ECAN接收中断
interrupt void cana_receive_isr(void)
{

@chybeyond    @WYT440 帮忙解答一下

使用特权

评论回复
9
chybeyond| | 2014-3-20 11:44 | 只看该作者
在主函数里应该对PIE级相应中断使能,允许邮箱发送、接收,使能接收中断,否则程序不会进入中断

使用特权

评论回复
10
DSPTYJ|  楼主 | 2014-3-20 15:33 | 只看该作者
问题解决了,感谢各位大神

使用特权

评论回复
11
fairyfcl| | 2014-3-27 14:04 | 只看该作者
哈哈 我今天也遇到和你一样的问题,我的解决方法是重新初始化了一下ECAN,就可以修改ID了,不知道你是怎么解决的??切磋切磋。。。

使用特权

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

本版积分规则

3

主题

33

帖子

2

粉丝