TI中文支持网
TI专业的中文技术问题搜集分享网站

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

}

}

Cherry Zhou:

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

,

Cherry Zhou:

您好,

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

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

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHXL-F280025C: 執行CAN library裡的CAN_getStatus(CANA_BASE), 得到error status=5
分享到: 更多 (0)