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.

TMS320F28377D: cpu1在执行IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH)初始化语句时死循环

Part Number: TMS320F28377D

刚接手一个程序,现象是:每次仿真器下载程序之后,程序没有运行起来;但断电再上电之后,正确运行。

于是我就在线仿真查看,为什么下载程序后运行不起来?

有了如下发现:

我在cpu1的初始化语句中执行IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH),这个函数里面有句话:

经测试程序在红色框中死循环,函数原型为蓝色框中,也就是说IPC_BOOTSTS一直是0,不是C2_BOOTROM_READY(这个宏定义官方值为2)

现在卡死原因知道了,查阅手册说:

也就是IPC_BOOTSTS是由cpu2定义的,我就查cpu2的初始化语句,发现在cpu2初始化时IPC_BOOTSTS被初始化为0,除此之外再无任何其他对IPC_BOOTSTS的操作

我有如下疑问:

(1)我可以在cpu2初始化时将IPC_BOOTSTS赋为2,从而避免cpu1在while中死循环,程序也跑起来了,但这样总觉得显得有点“为了解决问题而进行的临时措施的意味”。

我想知道,IPCBootCPU2的本意是由cpu1控制cpu2的boot,但如果我通过gpio已经单独控制了cpu2的boot,是否就必须  在cpu2初始化时将IPC_BOOTSTS赋为2从而避免死循环呢?

(2)我想知道本身的程序,也就是cpu2初始化时IPC_BOOTSTS被初始化为0时,为何断电再上电,程序能正常跑起来呢?为什么进入while死循环的条件达成却没有进入死循环呢?而下载程序后死循环了?

(3)C2_BOOTROM_READY,这个宏定义官方值为2,这个2是从何而来的呢?为什么不是1,3?

谢谢。