- The primary idle hook runs on the idle task of the primary core.
- The passive idle hook runs on secondary cores when no tasks are available for execution.
All cores idle requirement
Core 0 doesn’t enter wait for interrupt (WFI) unless all active cores in the system are idle. A global atomic counter tracks the number of cores that are ready for sleep. Before entering WFI, core 0 compares this value against the active core count. If any active core is still processing work, core 0 exits the sleep entry sequence, resets its idle counter, and waits for the next sleep opportunity. The active core count is determined during scheduler initialization based on a GPIO boot configuration pin:- In lock-step cluster mode, three cores are considered active.
- In normal mode, all four cores are considered active.
Wakeup sequence
Secondary core wakeup Secondary cores (core 1, core 2, and core 3) exit WFI when a peripheral interrupt assigned to the respective core is received. Examples include interrupts from CAN, IPCC, and other peripheral sources.NoteUART interrupts are registered on core 0. Therefore, UART activity can’t wakeup core 1, core 2, and core 3 from the Sleep state.
IPCC_Trigger to notify core 0 through the IPCC channel. This notification causes core 0 to exit WFI.
Note
Disabling SLEEP_ENABLE from
Disabling SLEEP_ENABLE from
freertos_init.h is therefore a safe way to completely bypass the sleep subsystem for debugging and bring-up without removing any code
