I'm trying to set up IPC communication between the 2 cores on the Delfino F28377D using parts of your sample code "cpu01_to_cpu02_ipcdrivers_lite_cpu01.c" and "cpu01_to_cpu02_ipcdrivers_lite_cpu02.c".
After both cores are running I call IPCLiteLtoRDataWrite() from core 1 with the 2 event flags IPC_FLAG0 and IPC_FLAG31 as in your example.
That function checks if those event flags are cleared in IpcRegs.IPCFLG before attempting communication with core 2 and returns FAIL if they are set.
Problem is that this check very often fails, and inspecting the IpcRegs.IPCFLG bits confirms that they are set.
I tried to add this right before calling IPCLiteLtoRDataWrite():
IpcRegs.IPCCLR.bit.IPC0 = 0;
IpcRegs.IPCCLR.bit.IPC31 = 0;
test = IpcRegs.IPCFLG.all;
IPCLiteLtoRDataWrite(...);
and when IPCLiteLtoRDataWrite() fails I can check "test" and see that the event flags are still set in IpcRegs.IPCFLG.
This happens even after power up when no communication (or interrupts) has taken place with core 2 yet.
What am I missing?
Why are the event flags set from the start?
And why will an IPCCLR not clear the events in IPCFLG?
/Michael