Hello,
參考了"can_ex5_simple_receive", 實作以下一個簡單的CAN bus receive data,
當執行到中斷函式的: status = CAN_getStatus(CANA_BASE);後
status = 5, 請問造成這種error的可能原因是甚麼?
void CAN_Init(void) // CAN 初始化
{
GPIO_setPinConfig(DEVICE_GPIO_CFG_CANRXA);
GPIO_setPinConfig(DEVICE_GPIO_CFG_CANTXA);
CAN_initModule(CANA_BASE);
CAN_setBitTiming(CANA_BASE, 15, 0, 15, 7, 3); //250K
CAN_enableInterrupt(CANA_BASE, CAN_INT_IE0 | CAN_INT_ERROR | CAN_INT_STATUS);
Interrupt_initModule();
Interrupt_initVectorTable();
EINT;
ERTM;
Interrupt_register(INT_CANA0,&canaISR);
Interrupt_enable(INT_CANA0);
CAN_enableGlobalInterrupt(CANA_BASE, CAN_GLOBAL_INT_CANINT0);
CAN_startModule(CANA_BASE);
}
void Msg_Init(void) // Message Object 初始化
{
CAN_setupMessageObject(CANA_BASE, RX_MSG_OBJ_ID, 0x750,
CAN_MSG_FRAME_EXT, CAN_MSG_OBJ_TYPE_RX, 0x00000FF1,
CAN_MSG_OBJ_RX_INT_ENABLE | CAN_MSG_OBJ_USE_ID_FILTER, 0);
}
__interrupt void
canaISR(void) //中斷函式
{
status = CAN_getInterruptCause(CANA_BASE);
if(status == CAN_INT_INT0ID_STATUS)
{
status = CAN_getStatus(CANA_BASE);
if(((status & ~(CAN_STATUS_RXOK)) != CAN_STATUS_LEC_MSK) &&
((status & ~(CAN_STATUS_RXOK)) != CAN_STATUS_LEC_NONE))
{
errorFlag = 1;
}
}
else
{
obj = status; // which mailbox was updated
CAN_readMessage(CANA_BASE, obj, rxMsgData, &dlc);
CAN_clearInterruptStatus(CANA_BASE, obj);
}
}