2333124_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2333124_zh-CN

2333124_zh-CN

KEA128 CAN

我用KDS3.0生成库代码,生的CAN代码PE_ISR(CAN1_TxInterrupt),

ErrorFlags = MSCAN_PDD_GetRxStatusInterruptFlags(MSCAN_BASE_PTR); /* Read the status register */

if (
    ((ErrorFlags & MSCAN_PDD_RX_BUS_OFF) != MSCAN_PDD_RX_BUS_OFF)||         ((ErrorFlags & MSCAN_PDD_TX_BUS_OFF) != MSCAN_PDD_TX_BUS_OFF)
  )
  { /* Is bus-off detected? */
 
      DeviceDataPrv->Stats.BusOffs++;  /* Increase BusOffs interrupt counter */
      CAN1_OnBusOff(DeviceDataPrv->UserData); /* Invoke user event */
    }
MSCAN_PDD_RX_BUS_OFF为0x30,查看手册中 MSCAN_CANRFLG ,bit5-4中为0b11时总线离线,但代码中判断不为0b11则为离线。

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 清零后总线可以立刻恢复。

Kinetis EA Series MCUsRe: KEA128 CAN

HI@lzhjxgz

感谢您的耐心等待。

1.Regarding "MSCAN_PDD_RX_BUS_OFF for 0x30,查看手册中 MSCAN_CANRFLG ,bit5-4中为0b11时总线离线,但代码中判断不为0b11则为离线"、

->> 我同意你的观点--代码中的总线断开检测逻辑确实与硬件手册中的描述相反。
请手动输入代码并检查其是否正常工作。我也会向内部团队报告这个问题。

2。对于第二个问题,我认为清除 ErrorMask 和恢复 CAN 总线之间没有任何关系。总线断开恢复完全由硬件机制处理。


谢谢!


BR

爱丽丝

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎03-21-2026 03:28 AM
更新者: