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.

TMS320F28388D: 28388D CANFD Interrrup 无法重复进入

Part Number: TMS320F28388D


各位好,在例程mcan_ex1_loopback.c的基础上修改代码,目标是使用CANFD的中断接收数据,但是实际的结果是每次CPU启动后只能进入一次中断,之后接收的数据再也无法触发中断,必须再次重启CPU,请问出现这种情况是什么原因?

以下是中断初始化及中断处理函数

//canfd  interrupt init


EALLOW;
PieVectTable.MCANSS1_INT = &MCANIntr1ISR;

EDIS;

PieCtrlRegs.PIEIER9.bit.INTx10 = 1;
IER |= M_INT9;


Interrupt_register(INT_MCANSS0,&MCANIntr0ISR);
Interrupt_enable(INT_MCANSS0);


//
// Enable Interrupts.
//
MCAN_enableIntr(MCAN0_BASE, MCAN_INTR_MASK_ALL,1);
MCAN_enableIntr(MCAN0_BASE, MCAN_INTR_SRC_RES_ADDR_ACCESS|
MCAN_INTR_SRC_TIMESTAMP_WRAPAROUND,0);

//
// Select Interrupt Line.
//
MCAN_selectIntrLine(MCAN0_BASE, MCAN_INTR_MASK_ALL,
MCAN_INTR_LINE_NUM_1);
//
// Enable Interrupt Line.
//
MCAN_enableIntrLine(MCAN0_BASE, MCAN_INTR_LINE_NUM_1, 1U);


__interrupt void MCANIntr1ISR(void)
{
    uint32_t intrStatus,error;
    MCAN_RxBufElement rxMsg;

    intrStatus = MCAN_getIntrStatus(MCAN0_BASE);
    MCAN_clearIntrStatus(MCAN0_BASE, intrStatus);
    RxFS.num = 1;
    MCAN_getRxFIFOStatus(MCAN0_BASE, &RxFS);


if(RxFS.fillLvl != 0 )
{

    MCAN_readMsgRam(MCAN0_BASE, MCAN_MEM_TYPE_FIFO, 0,
    MCAN_RX_FIFO_NUM_1, &rxMsg);


    MCAN_writeRxFIFOAck(MCAN0_BASE, MCAN_RX_FIFO_NUM_1,
    RxFS.getIdx);

    MCAN_getRxFIFOStatus(MCAN0_BASE, &RxFS);


  }

  Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}