KEA128 CAN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

KEA128 CAN

430 Views
lzhjxgz
Contributor I

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

Labels (1)
0 Kudos
Reply
1 Reply

335 Views
Alice_Yang
NXP TechSupport
NXP TechSupport

HI @lzhjxgz 

Thanks for your patience.

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

->> I agree with you — the Bus‑Off detection logic in the code is indeed opposite to what is described in the hardware manual.
Please the code manually and check whether it works correctly. I will also report this issue to the internal team.

2. For  second question, I think there is no relationship between clearing ErrorMask and the CAN bus being restored. The Bus‑Off recovery is handled entirely by the hardware mechanism.

 

Thank you.

 

BR

Alice

0 Kudos
Reply