我用KDS3.0生成库代码,生的CAN代码PE_ISR(CAN1_TxInterrupt),
ErrorFlags = MSCAN_PDD_GetRxStatusInterruptFlags(MSCAN_BASE_PTR); /* Read the status register */
LDD_TError CAN1_GetError(LDD_TDeviceData *DeviceDataPtr, LDD_CAN_TErrorMask *ErrorMaskPtr)
{
CAN1_TDeviceData *DeviceDataPrv = (CAN1_TDeviceData *)DeviceDataPtr;
/* {Default RTOS Adapter} Critical section begin, general PE function is used */
EnterCritical();
*ErrorMaskPtr = DeviceDataPrv->ErrorMask; /* Return last value of error mask */
DeviceDataPrv->ErrorMask = 0x00U;
/* {Default RTOS Adapter} Critical section end, general PE function is used */
ExitCritical();
return ERR_OK;
}
DeviceDataPrv->ErrorMask = 0x00U;,查看代码ErrorMask 为内存中数据,为什么ErrorMask 清零后总线可以立刻恢复。
HI@lzhjxgz
感谢您的耐心等待。
1.Regarding "MSCAN_PDD_RX_BUS_OFF for 0x30,查看手册中 MSCAN_CANRFLG ,bit5-4中为0b11时总线离线,但代码中判断不为0b11则为离线"、
->> 我同意你的观点--代码中的总线断开检测逻辑确实与硬件手册中的描述相反。
请手动输入代码并检查其是否正常工作。我也会向内部团队报告这个问题。
2。对于第二个问题,我认为清除 ErrorMask 和恢复 CAN 总线之间没有任何关系。总线断开恢复完全由硬件机制处理。
谢谢!
BR
爱丽丝