Thread 中讨论的其他器件:SysConfig、 C2000WARE
工具/软件:
您好:
我们已使用 SysConfig 配置了 MCAN [传统配置、速率为 125Kbps]。 [ SysConfig 版本 1.23.0 和 C2000Ware 版本 5.4.0.00]。 并成功实现了传输。 但是、我们使用 SysConfig 工具实现了部分接收器件成功。 出现故障的原因是 ISR 仅在首次触发、并且所有后续接收 CAN 消息均未能触发 ISR。 为了让 它再次被触发,我们不得不利用 CAN 的一些函数初始化在 Board.c 的 Board_init () 中调用 此外、中断清除都不能帮助重新建立 ISR。
我们已经尝试了以下主题下给出的所有上述解决方案、但没有一个是有用的
【请参阅代码片段】。
__interrupt void INT_PWR_CAN_0_ISR(void)
{
//uint32_t intrStatus;
MCAN_RxNewDataStatus newData;
intrStatus = MCAN_getIntrStatus(MCANA_DRIVER_BASE);
//
// Clear the interrupt Status.
//
MCAN_clearIntrStatus(MCANA_DRIVER_BASE, intrStatus);
//
// Clearing the interrupt lineNum
//
MCAN_clearInterrupt(MCANA_DRIVER_BASE, 0x1); // Clear Int Line 0
//
// Check to see if the interrupt is caused by a message being
// received in dedicated RX Buffers
//
if((MCAN_INTR_SRC_RX_FIFO0_NEW_MSG & intrStatus) == MCAN_INTR_SRC_RX_FIFO0_NEW_MSG)
{
//
// Read the NewData registers
//
MCAN_getNewDataStatus(MCANA_DRIVER_BASE, &newData);
// If message is received in buffer element 0
if((newData.statusLow & (1UL << 0U)) != 0)
{
MCAN_readMsgRam(MCANA_DRIVER_BASE, MCAN_MEM_TYPE_BUF, 0U,
0, &rxMsg1);
if((rxMsg[0].id >> 18U) == 0x40)
{
}
else if((rxMsg[0].id >> 18U) == 0x42)
{
}
}
//
// Clearing the NewData registers
//
MCAN_clearNewDataStatus(MCANA_DRIVER_BASE, &newData);
newData.statusLow = 0;
}
else
{
//error++;
//
// Interrupt handling for other interrupt sources goes here
//
}
//
// Acknowledge this interrupt located in group 9
//
Interrupt_clearACKGroup(INT_PWR_CAN_0_INTERRUPT_ACK_GROUP);
//-----------------------------------------------------------------------------------
This code snippet used for re-initialising the ISR to get it to trigger subsequently
MCAN_StdMsgIDFilterElement stdFiltelem_PWR_CAN;
MCAN_setOpMode(PWR_CAN_BASE, MCAN_OPERATION_MODE_SW_INIT);
while (MCAN_OPERATION_MODE_SW_INIT != MCAN_getOpMode(PWR_CAN_BASE));
stdFiltelem_PWR_CAN.sft = MCAN_STDFILT_RANGE;
stdFiltelem_PWR_CAN.sfec = MCAN_STDFILTEC_RXBUFF;
stdFiltelem_PWR_CAN.sfid1 = 64;
stdFiltelem_PWR_CAN.sfid2 = 0;
MCAN_addStdMsgIDFilter(PWR_CAN_BASE, 0U, &stdFiltelem_PWR_CAN);
stdFiltelem_PWR_CAN.sft = MCAN_STDFILT_RANGE;
stdFiltelem_PWR_CAN.sfec = MCAN_STDFILTEC_RXBUFF;
stdFiltelem_PWR_CAN.sfid1 = 66;
stdFiltelem_PWR_CAN.sfid2 = 0;
MCAN_addStdMsgIDFilter(PWR_CAN_BASE, 1U, &stdFiltelem_PWR_CAN);
MCAN_lpbkModeEnable(PWR_CAN_BASE, MCAN_LPBK_MODE_EXTERNAL, false);
MCAN_setOpMode(PWR_CAN_BASE, MCAN_OPERATION_MODE_NORMAL);
while (MCAN_OPERATION_MODE_NORMAL != MCAN_getOpMode(PWR_CAN_BASE));
//-----------------------------------------------------------------------------------
}





此致、
Sharath




