Other Parts Discussed in Thread: C2000WARE
Hello.
I am seeing an issue with CM to CPU1 ipc messages.
I have used the example, from CPU1 to CM with no issues, and then I set up the other way on CPU1 with:
//IPC
//
// Clear any IPC flags if set already
//
IPC_clearFlagLtoR(IPC_CPU1_L_CM_R, IPC_FLAG_ALL);
IPC_registerInterrupt(IPC_CPU1_L_CM_R, IPC_INT2, IPC_ISR2);
//
// Synchronize both the cores.
//
IPC_sync(IPC_CPU1_L_CM_R, IPC_FLAG31);
And I am cycling sending from CPU1 to CM sending, and it is working fine. Using:
IPC_sendCommand(IPC_CPU1_L_CM_R, IPC_FLAG0, IPC_ADDR_CORRECTION_ENABLE,
IPC_CMD_READ_MEM, (uint32_t)readData, 10);
//
// Wait for acknowledgment
//
IPC_waitForAck(IPC_CPU1_L_CM_R, IPC_FLAG0);
if(IPC_getResponse(IPC_CPU1_L_CM_R) == TEST_PASS)
Of course I am using different IPC_FLAGs. And if I remove on the CM side the IPC sending to CPU1, everything works fine again:
IPC_sendCommand(IPC_CM_L_CPU1_R, IPC_FLAG2, IPC_ADDR_CORRECTION_ENABLE, IPC_CMD_READ_MEM, buf_ipc_tx, 10);
//
// Wait for acknowledgment
//
IPC_waitForAck(IPC_CM_L_CPU1_R, IPC_FLAG2);
if(IPC_getResponse(IPC_CM_L_CPU1_R) == TEST_PASS){...}
The RX interrupt is triggered fine on CPU1, however once is triggered, the sending from CPU1 to CM is always waiting for the ACK. waiting in:
while((IPC_Instance[ipcType].IPC_Flag_Ctr_Reg->IPC_FLG & flag) != 0U)
Is it necessary to sync ipcs again?
Please, would you mind to check it on your side, it seems to me a mistake in the library too.
Note: I tried via polling (without interrupt on CPU1) and it is working with the same code. Is it a driverlib issue?
Best Regards