This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28388D: IPC error CM to CPU1

Part Number: TMS320F28388D
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