SPRUI30H November 2015 – May 2024 DRA745 , DRA746 , DRA750 , DRA756
Each Cortex-M4 core can interrupt the other Cortex-M4 core by setting up an interrupt register (CORTEXM4_CTRL_REG). This register is used to trigger the corresponding 'per core' HWSEM_M4_IRQ interrupt (interrupt number 19). Because the priority level for that interrupt can be defined, it is possible to choose the task level at which the interrupt will run. For example, if IPUx_C0 was active and IPUx_C1 was idle (WFI state), when IPUx_C0 completes its task it sets the bit for IPUx_C1 in the control register (CORTEXM4_CTRL_REG[16] INT_CORTEX_2) and goes into sleep mode. IPUx_C1 wakes up seeing this interrupt, and starts running its task. After the completion of its task, IPUx_C1 sets the interrupt for IPUx_C0 (CORTEXM4_CTRL_REG[0] INT_CORTEX_1), and then goes into WFI state. This kind of handshake ensures that if IPUx_C0 and IPUx_C1 are accessing the same resources (memory, registers etc.), only one of the CPUs at a time is active.