求助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
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
}

一周热门 更多>