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: CM在线调试时如何复位CPU1?

Part Number: TMS320F28388D


步骤1: CPU1 烧录工程led_ex1_c28x_cm_blinky_cpu1(FLASH)

步骤2: CM烧录led_ex1_c28x_cm_blinky_cm(FLASH)

这时候CM没有运行,处于In Reset状态,CPU1也处于Reset状态,无法在线调试CM代码

现象是LED灯都不闪烁,CPU1和CM都没运行。

如果这时候退出在线仿真,重新给新品上电,程序会运行,LED会闪烁。

问题:先烧CPU1后,然后在线调试CM时,如何控制CPU1也Reset,由CPU1的初始化代码Device_bootCM()去复位CM?

反过来,如果先烧CM代码,然后再烧录CPU1代码并在线调试CPU1,程序都是可以运行的。

  • 你好,我没明白你的意思啊。

    你是说先烧CPU1再烧CM核的话,程序会无法运行,没办法调试。

    反而先烧CM核再烧CPU1的话是可以正常调试的?

    有对例程做过修改吗?包括例程本身也需要做修改:

    //! \note Before running the example, the below configuration is expected to
    //! be done through the dcsm_ex1_f2838x_dcsm_zxotp.asm :
    //!
    //! - Allocate CM's C0RAM to zone 1 , C1RAM to zone 2
    //! ZSBx_Z1_GRABRAM2R 0x0AAAAA09
    //! ZSBx_Z2_GRABRAM2R 0x0AAAAA06
    //! - Password of zone 1 is 0xFFFFFFFF4D7FFFFFFFFFFFFFFFFFFFFF
    //! - Password of zone 2 is 0xFFFFFFFF1F7FFFFFFFFFFFFFFFFFFFFF

  • 你好,用的是下面的blinky工程,不是dcsm工程。

    (1)led_ex1_c28x_cm_blinky_cpu1(FLASH)

    (2)led_ex1_c28x_cm_blinky_cm(FLASH)

    先烧CM工程,再烧CPU1工程,可以调试CPU1,这没问题。

    先烧录CPU1,然后在线调试CM后,通过以下2个现象,判断CM程序没有运行。 

    (1)CPU1和CM分别控制1个LED,此时观察2个LED都不不闪烁,说明CPU1的程序也没运行。

    (2)CCS debug页面显示CPU1(Running-A reset occcured on the target),   Cortex_M4(In Reset)

    疑问1:在线烧录CM后,CM是否需要CPU1再执行一次Device_bootCM()才能工作?

    疑问2:在线烧录CM后,会触发CPU1和CM都复位吗?

     

    退出CM的在线仿真,给开发板重新上电,2个LED都闪烁,说明CPU1和CM都正常工作,我猜测的过程是:

    (1)上电

    (2) CPU1运行 并控制LED1闪烁

    (3)CPU1调用Device_bootCM()启动CM

    (4)CM控制LED2闪烁

    最后我的问题是:先烧CPU1工程,然后在线调试CM工程,程序无法运行,CPU1和CM都处于reset状态,请问如何调试CM呢?

  • 额,不好意思最近帖子太多,应该是看岔了,我会再看一下,尽快回复你。

  • 你好,请问你有对例程本身做过修改吗?或者,测试用的硬件是自己设计制作的还是TI的开发板?

    我这边测试了ram和flash两种模式下进行先烧写CPU1,再烧写CM核的操作,都没有出现你提到的CPU1或者CM核不工作的情况。

    在线仿真的时候ram和flash两种模式下两个核都工作正常,断开仿真器之后flash模式下两个核也能正常工作。

    也就是说在没修改例程的情况下,直接烧写就能正常运行了。

  • 没有修改历程,直接ccs import的。

    我发现,通过CM工程进入在线调试后,需要再手动load一下CPU1的.out文件,再分别选择CPU1和CM并运行,就正常了。

    可是,CPU1的程序之前已经烧录到FLASH了,为什么还要再load一遍?

    如果不再load一次CPU1的.out文件,CPU1和CM都处于reset状态,程序都不运行。

  • 你是说,调试的时候之前都是通过CM核进入在线调试,然后在没有load CPU1的.out文件的情况下开始仿真的?这样会出错?

    而如果是通过CPU1的工程进入在线调试,并且没有load CM核的.out文件的话可以正常调试?

  • 是这样的。

    再详细描述一下过程:

    (1)  CM进入在线仿真(进入的过程会自动load程序到CM flash)   -->退出CM在线仿真 -->  CPU1进入在线仿真(进入过程会l自动oad 程序到CPU1 flash)

          --> 开始调试CPU1, 没问题。

    (2)  CPU1进入在线仿真(进入的过程会自动load程序到CPU1 flash)   -->退出CPU1在线仿真 -->  CM进入在线仿真(进入过程会自动load 程序到CM flash)

          --> 开始调试CM, 有问题,CPU1和CM都处于reset 状态,2个led都不闪烁,也说明程序没运行。

    (3)  CPU1进入在线仿真(进入的过程会自动load程序到CPU1 flash)   -->退出CPU1在线仿真 -->  CM进入在线仿真(进入过程会自动load 程序到CM flash)

          --> 再次选中CPU1并手动load一次CPU1的.out文件

          -->开始调试CM,没问题。

    疑问1:(3)比(2)在进入CM在线仿真后,多了一步再次手动load CPU1程序的过程,这个是必须的吗?

    疑问2: 在(2)中,CM进入在线仿真的过程,会影响CPU1的运行吗?  会让CPU1进入reset状态? 如果是,好像只有再次load CPU1的程序才能让CPU1退出                  reset状态。

    补充一下:硬件是官方的开发板。

  • 额,你这样说的话就明确了,这个没什么问题,因为CPU2和CM核都是需要由CPU1来boot的,CPU1不启动,自然其他两个核也没办法启动。

    而仿真模式下,CPU1的启动是由仿真器控制的,不会自动从flash启动,所以也就没办法单独仿真CM核。

    具体的你可以看一下芯片datasheet的8.6 Boot ROM and Peripheral Booting