TI中文支持网
TI专业的中文技术问题搜集分享网站

求助F28035 CAN发送ID的赋值?

我在用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;

 

 

补充一下,我在接收中断里也是这样赋值的,可是,是无效的,发送到上位机显示的ID还是ECAN初始化里配置的ID,就是说在接收中断里改变不了ID,不知道是咋回事?求助

 

下面是完整的ECAN接收中断代码

//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
}

赞(0)
未经允许不得转载:TI中文支持网 » 求助F28035 CAN发送ID的赋值?
分享到: 更多 (0)