S32K144 flexcan init stuck when wakeup from VLPS mode

显示  仅  | 搜索替代 

S32K144 flexcan init stuck when wakeup from VLPS mode

2,149 次查看
Contributor II


I try to initialization flexcan1 module when S32K144 power mode switch from VLPS to RUN, but it stuck while poll the LPMACK register, see below code (from flexcan_hw_access.c'), 

void FLEXCAN_Enable(CAN_Type * base)
   /* Check for low power mode */
      /* Enable clock */
      base->MCR = (base->MCR & ~CAN_MCR_MDIS_MASK) | CAN_MCR_MDIS(0U);
      base->MCR = (base->MCR & ~CAN_MCR_FRZ_MASK) | CAN_MCR_FRZ(0U);
      base->MCR = (base->MCR & ~CAN_MCR_HALT_MASK) | CAN_MCR_HALT(0U);
      /* Wait until enabled */
      while (((base->MCR & CAN_MCR_LPMACK_MASK) >> CAN_MCR_LPMACK_SHIFT) != 0U) {}

The code excute sequence is like below when quit from VLPS power mode:

Check_wakeupEvent_valid();  //check wakeup interrupt valid

PINS_DRV_Init();                   // PIN initialization

POWER_SYS_Init();              // Power manager initialization

POWER_SYS_SetMode(POWER_MANAGER_RUN, ..);  // change power mode to Run mode

CAN_Transceiver_SetMode(Normal); // set CAN transceiver to normal mode

CanInit(1);                             //flexcan1 Init  ---> stuck here !!


If MCU just switch from STOP mode or any other low power mode to run mode, the flexcan1 is OK!

I am very puzzled, please let me know where is the problem ? 

Many thanks! 

4 回复数

1,345 次查看
Contributor I

Facing same issue, but not very time.
I'm facing this issue on intermediate but within few try only I'm facing this issue.

Can someone please help me to get out from this issue?

0 项奖励

1,338 次查看
Contributor II

Sorry for not update the result at that time,here is the answer for my case, for your reference:

1.Normal Clock & System Power Init

CLOCK_SYS_Init ->CLOCK_SYS_UpdateConfiguration->POWER_SYS_Init---->(Goto work)
        ↑                                           ↓
        --------------------[Re-init after wakeup]-----------(Enter VLPS)

If follow the above clock & System power init, it is OK when wakeuped from VLPS

2. Abnormal Init sequence

CLOCK_SYS_Init ->CLOCK_SYS_UpdateConfiguration->POWER_SYS_Init---->(Goto work)
                                                      ↑ |
                                                       | |
                                             ————————————————| |
                                               ↑ ↓
                                             [Re-init after wakeup]----------(Enter VLPS)

above init sequence when wakeup from VLPS is OK in SDK0.86, but not OK for SDK RTM 2.0.0(when enter VLPS sdk close Pll clock).
So take care the code from old SDK!

0 项奖励

1,618 次查看
Contributor I

HI, David Shu

Forgive me for not being able to solve your problem, and I want to ask a question. I want to use FlexCAN interrupt to wake up LVPS mode, but fail. Can you show me your code?


0 项奖励

1,618 次查看
Contributor II

Thanks for your reply!

MCU will not wakeup from VLPS by CAN wakeup ISR in my case, but wakeup by GPIO connected with CAN transceiver ERR Pin which will become logic high when CAN bus state become normal from idle.

Below is my example code:

Step 1: enable GPIO extern interrupt before MCU go to VLPS mode


Step 2: MCU will wakeup by GPIO external interrupt from VLPS mode when wakeup event happened


I use CAN1 in my project, not have CAN wakeup IRQ. Could you explain what's the usecase for CAN wakeup IRQ? 

0 项奖励