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