求助F28035 CAN发送ID的赋值?

2019-08-05 20:30发布

大家好,我是新手,刚注册的。我在用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;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
DSPTYJ
1楼-- · 2019-08-06 01:25
补充一下,我在接收中断里也是这样赋值的,可是,是无效的,发送到上位机显示的ID还是ECAN初始化里配置的ID,就是说在接收中断里改变不了ID,不知道是咋回事?求助
chybeyond
2楼-- · 2019-08-06 03:27
 精彩回答 2  元偷偷看……
WYT440
3楼-- · 2019-08-06 04:23
中断里面怎么写的?检查下是否有错误的地方
DSPTYJ
4楼-- · 2019-08-06 09:44
//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
}
DSPTYJ
5楼-- · 2019-08-06 12:27
求助啊各位大神
DSPTYJ
6楼-- · 2019-08-06 17:41
我的问题没人回答。。。。

一周热门 更多>