TMS320F28069: 中断函数修改PWM频率配置之后,出现CAN丢包问题

Part Number: TMS320F28069

CAN通讯在修改pwm配置代码之后,出现通讯报文接受不到的情况。首先,这是一个已经验证过的电机控制代码,我在此基础上修改了代码,使10khz频率的PWM中断函数中进行pwm频率的修改,代码如下:

EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
freq = 4000;
EPwm1Regs.TBPRD = freq;
EPwm1Regs.TBCTL.bit.SWFSYNC = 1;//1:FORCE TO SYSNC PLUS

修改之后,PWM的周期的确已经更新为新的频率值。但不幸的是,CAN通讯出现了丢包现象。如下图所示,使用CAN分析仪截获的进入芯片之前的报文是28,但CAN邮箱中的报文依然是24,未进行更新。表明上位机下发的新报文28被忽略掉了。这个问题并不是马上发生,而是经过几次点击循环之后发生。

另外,读取CAN数据是通过轮询的方式进行的,代码如下:

mcal_ReadCanMessage(6, (Uint16*) &CAL_U.In1.Data);

void mcal_ReadCanMessage(int16 MBXnbr, Uint16 *msgdata)
{
Mailbox = &ECanaMboxes.MBOX0 + MBXnbr;

msgdata[0] = Mailbox->MDL.byte.BYTE0;
msgdata[1] = Mailbox->MDL.byte.BYTE1;
msgdata[2] = Mailbox->MDL.byte.BYTE2;
msgdata[3] = Mailbox->MDL.byte.BYTE3;
msgdata[4] = Mailbox->MDH.byte.BYTE4;
msgdata[5] = Mailbox->MDH.byte.BYTE5;
msgdata[6] = Mailbox->MDH.byte.BYTE6;
msgdata[7] = Mailbox->MDH.byte.BYTE7;

}

我想知道如何解决CAN丢包这个问题。当然,在修改代码之前,它是没有问题的,没有出现丢包情况。谢谢!