This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28335自动进入CAN中断

现象:程序平时运行正常,在运行半个小时后,自动进入CAN中断。

           未连接CAN总线,没有数据传输,一进入CAN中断,一直在等待接收数据的do while中死循环。

想请教一下可能是出现了什么问题,应该怎么入手检查这个问题?

  • 能否说明下您现在的程序情况?若是可以的话,请您贴出代码,谢谢
  • 感谢您的回复!下面是有关CAN部分的代码:
    //****************初始化***********************//
    InitECan();//TI的函数,未修改

    ECanaMboxes.MBOX0.MSGID.all = 0x9555AAA0;

    ECanaShadow.CANMD.all = ECanaRegs.CANMD.all;
    ECanaShadow.CANMD.bit.MD0 = 1;
    ECanaRegs.CANMD.all = ECanaShadow.CANMD.all;

    ECanaShadow.CANME.all = ECanaRegs.CANME.all;
    ECanaShadow.CANME.bit.ME0 = 1;
    ECanaRegs.CANME.all = ECanaShadow.CANME.all;

    ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = 8;


    EALLOW;
    ECanaRegs.CANMIM.all = 0x00000001;
    ECanaRegs.CANMIL.all = 0x00000000;
    ECanaRegs.CANGIF0.all = 0xFFFFFFFF;
    ECanaRegs.CANGIM.bit.I0EN = 1;
    EDIS;

    EALLOW;
    PieVectTable.ECAN0INTA = &cana_receive_isr;
    EDIS;

    PieCtrlRegs.PIEIER9.bit.INTx5 = 1;

    IER |= M_INT9;

    //**************CAN接收中断******************//
    __interrupt void cana_receive_isr(void) {
    do
    {
    ECanaShadow.CANRMP.all = ECanaRegs.CANRMP.all;
    } while(ECanaShadow.CANRMP.bit.RMP0 == 0 );

    ECanaShadow.CANRMP.all = 0;
    ECanaShadow.CANRMP.bit.RMP0 = 1;
    ECanaRegs.CANRMP.all = ECanaShadow.CANRMP.all;

    ReadDataL = ECanaMboxes.MBOX0.MDL.all;
    ReadDataH = ECanaMboxes.MBOX0.MDH.all;
    readcount++;

    PieCtrlRegs.PIEACK.bit.ACK9 = 1;
    ECanaRegs.CANOPC.all = 0;
    }
    程序是一个电机控制程序,两个中断,另外一个中断频率是10kHz,CAN总线没连,运行半个小时后卡死在CAN中断里。
  • 程序本身暂时没有发现问题。请问您现在是不使用CAN通信吗? 您是否可以尝试全部屏蔽CAN通信看剩余程序是否有问题?
  • 感谢您的回复,我尝试屏蔽了CAN通信,在线仿真时发现程序大概运行36分钟左右会跑飞,FLASH运行时程序大概运行36分钟左右有复位现象。