各位好,在例程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);
}