TI E2E 英文论坛海量技术问答的中文版全新上线,可点击相关论坛查看,或在站内搜索 “参考译文” 获取。

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.

LAUNCHXL-F280025C: 執行CAN library裡的CAN_getStatus(CANA_BASE), 得到error status=5

Part Number: LAUNCHXL-F280025C

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);

}

}

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 您好,

    返回值5代表着 CAN 总线上的一个节点正在发送passive error。 debug这种情况没有直接的方式,因为错误有多种形式,如位错误、填充错误、形式错误、CRC 错误或 ACK 错误。 当节点收到此类错误时,内部 CAN 错误计数器会根据错误类型递增。 如果错误计数器的计数值超过127,接收节点将发送passive error,以告知其他节点总线上的帧始终会产生此类错误。 

    您先检查下有无哪个连接松动了,或将 CANalyzer 连接到总线,以查看可能导致错误的节点。