Hi,
I am trying to trigger an interrupt on MC4 using IPC notify on CM0+.
I am failing to verify that the interrupt is indeed triggered on CM4.
Here is what I am doing:
IPC_INTR_STRUCT_Type *myIpcHandleInt;
myIpcHandleInt = Cy_IPC_Drv_GetIntrBaseAddr(MY_IPC_CHANNEL);
Cy_IPC_Drv_SetInterruptMask (myIpcHandleInt, 0xFFFF, 0xFFFF);
IPC_INTR_STRUCT_Type *myIpcHandleInt;
myIpcHandleInt = Cy_IPC_Drv_GetIntrBaseAddr(MY_IPC_CHANNEL);
Cy_IPC_Drv_SetInterruptMask (myIpcHandleInt, 0xFFFF, 0xFFFF);
I am trying to verify the interrupt indeed occurred by using the debugger on CM4, and placing a break-point at the Default_Handler (startup_psoc63_cm4.S).
What am I missing?
** The project is attached.
Use CE216795_DualCoreSharedMemory01.cyprj as the project file.
Thanks
Solved! Go to Solution.
You could also use the IPC Pipes or Semaphore layer APIs that comes with the PDL.
This layer makes very easy to handle synchronization and messages between the cores.
We are creating a code examples to show off how to use them. From now, you can refer to the PDL documentation.
Hello,
I will be easier for the community to help you if you share your project (just make a minimal archive of your project with PSoC Creator).
Could you share your project?
A topic with a similar problem (interrupt not occurred with dual application) reveals that : "The reason for this fix is that the vector table on the CM4 must be 0x400 aligned."
You check this point.
yours,
Robin.
Thanks Robin.
I have now attached the project to the original message.
Use CE216795_DualCoreSharedMemory01.cyprj as the project file.
Thanks
Some more information:
When I manually set IPC_INT_1 to PENDING [ NVIC->ISPR[1] |= 0x400; ], I do manage to stop with the debugger at the Default_Handler in CM4.
It means that the interrupt table is ok, and the interrupt itself is enabled.
Still, when using IPC to trigger the same interrupt, the debugger won't stop on the Default_Handler, that is, the interrupt is not really triggered.
According to the INTR_MASK register, the notification has passed to CM4, and the mask is enabled.
Any clue would be great
Thanks
You could also use the IPC Pipes or Semaphore layer APIs that comes with the PDL.
This layer makes very easy to handle synchronization and messages between the cores.
We are creating a code examples to show off how to use them. From now, you can refer to the PDL documentation.