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.
When booting a dual core application, CPU1 waits for a signal from CPU2 to confirm it has booted. This is checked by the function IPCGetBootStatus() in F2837xD_Ipc_Driver_Util.c, which checks IpcRegs.IPCBOOTSTS.
When the application was configured to boot from RAM, this worked fine, and both cores were booting and running. When I change to boot from flash, I found CPU1 was stuck in the loop waiting for IPCBOOTSTS to become non-zero. If I explicitly set IPCBOOTSTS in CPU2 code after booting, both cores seem to boot and run fine (with the exception of CPU2 CAN interrupts in my application, though I'm not sure if this is related).
How is IPCBOOTSTS set if I don't set it explicitly?
Should it be set when booting from flash without me needing to set it explicitly?
Hi Dave,
When booting from FLASH, IpcRegs.IPCBOOTSTS is only set by CPU2 when the device does not have an active JTAG connection. If you are stepping through your program in a CCS debug session, IPCBOOTSTS will not be set.
I will need to ask another expert about why this happens, so I will get back to you with an explanation soon.
Best Regards,
Ben Collier
Hi Ben,
That's useful to know, thanks. I realised also that the reason it's not a problem when booting from RAM is that the IPCBootCPU2 function is only used when the _FLASH and _STANDALONE symbols are defined.
It would be nice to have a bit more background on this, so please let me know if you find out more. In the meantime, I guess using an #ifdef to include a line which explicitly sets IPCBOOTSTS when _FLASH is defined, but not _STANDALONE, should be a good workaround?
Cheers,
Dave
Hi Dave,
That sounds like a good workaround. There is probably something in the standalone boot ROM that would set IPCBOOTSTS, but the device follows a different boot flow when the emulator is connected.
Best Regards,
Ben Collier