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.

2812 上电引导 疑问



DSP单机上电引导顺序(微计算机模式(XMPNMC= 0)):
1、上电复位
2、执行iniboot程序
3、根据GPIOF4(SCITXDA)、GPIOF12(MDXA)、GPIOF3(SPISTEA)、GPIOF2(***)的状态选择boot模式,假设选择了flash。
GPIOF4(SCITXDA)                       GPIOF12(MDXA)                                   GPIOF3(SPISTEA)                            GPIOF2(***)                         boot模式
          1                                                     X                                                               X                                                           X                                              flash
         0                                                     0                                                                1                                                            0                                             H0 SARAM
        0                                                      0                                                                0                                                            1                                             OTP

4、运行codestart程序
5、运行_c_int00程序
6、运行main函数
疑问:
1、CPU如何判断引脚GPIOF4(SCITXDA)、GPIOF12(MDXA)、GPIOF3(SPISTEA)、GPIOF2(***)的状态?通过查看寄存器GPIOFDAT的相应的位吗?另外,如何在DSP刚上电的时候就改变这些引脚的值呢?我觉得通过软件肯定是行不通的,因为我们的程序是在选择boot模式之后才开始运行的,在这个阶段(选择boot模式阶段),寄存器GPIOFDAT的值都是默认值,只能通过外围电路强行拉低或拉高。请问是这样的吗?
2、codestart程序是只在DSP下线运行时才需要,还是在在线仿真模式时也是需要的呢?我看TI的官方例程只是在工程中添加了一个DSP281x_CodeStartBranch.asm文件,然后再F2812.cmd文件中把该段链接到一个单独的段,load到对应的地址,源程序的其他地方没就没看到codestart程序。是只要把codestart程序load到对应的地址,带DSP上电引导后,就会直接运行了是吧?还要不要再在CCS中设置什么?
3、TI官方例程中有两个cmd文件:F2812.cmd和DSP281x_Headers_nonBIOS.cmd,这个哪个是SRAM.cmd?哪个是FLASH.cmd?看名字F2812.cmd应该是SRAM.cmd,DSP281x_Headers_nonBIOS.cmd是FLASH.cmd。但是看内容又觉得DSP281x_Headers_nonBIOS.cmd是SRAM.cmd,而F2812.cmd是FLASH.cmd。一次编译只需要一个cmd文件吧?

谢谢!

DSP281x_Headers_nonBIOS.cmd文件的MEMORY

DSP281x_Headers_nonBIOS.cmd文件的SECTIONS

F2812.cmd文件的MEMORY

F2812.cmd文件的SECTIONS

  • 1.改变Boot方式通过硬件管脚改变,不能通过软件改变IO口寄存器来改;

    2、codestart是在进入客户程序main之前自动运行的,主要进行一个判断:

        .sect "codestart"

    code_start:
        .if WD_DISABLE == 1
            LB wd_disable       ;Branch to watchdog disable code
        .else
            LB _c_int00         ;Branch to start of boot.asm in RTS library
        .endif

    3、DSP281x_Headers_nonBIOS.cmd是对片内外设的寄存器分配地址的,不是什么决定代码放在RAM或Flash的cmd,一般TI给的cmd文件的文件名能看出是RAM或是Flash的,如28069_RAM_lnk.cmd的明显是代码在RAM中的, F28069.cmd是在Flash中的。

  • 还有区分代码在RAM或是Flash中可以看,text段放在哪,如你给的F2812.cmd中 ,text->FlashA,所以是放在Flash中。谢谢!

  • 嗯,真的非常感谢!thank you so much!

    还有两个疑问:

    1、code_start程序中,有跳转语句:LB _c_int00;而code_start程序中_c_int00函数的定义是.ref  _c_int00。也就是说_c_int00是在外部定义,在code_start程序中引用,想请问下_c_int00是被定义在哪个文件中,听说是在库文件中?是不是只要将相应的库文件添加到工程中就可以了,不用自己再在某个文件中定义_c_int00了?

    2、把code_start程序直接改成如下:

    .ref _c_int00

    .sect"codestart"

    EALLOW ;
    MOVZ DP, #7029h>>6 
    MOV @7029h, #0068h 
    EDIS 
    LB _c_int00

    应该也可以吧?就省得去判断WD_DISABLE了,code_start程序的主要作用不就是禁止watchdog,然后跳转到_c_int00吗?

    3、一个文件中同时有两个CMD文件,在程序编译链接时,应该一次只有一个cmd文件在起作用吧?比如说上面提到的两个cmd文件:DSP281x_Headers_nonBIOS.cmd和F2812.cmd。是先F2812.cmd起作用,然后是DSP281x_Headers_nonBIOS.cmd起作用或者顺序反过来,应该不会是连个cmd文件同时起作用吧?

    多谢!

  • 1.不用自己定义_c_int00了,在rts库中,只需在工程中添加rts库即可; 2.不能省去判断WD_DISABLE,因为code_start只有两个字节长度,禁止watchdog的程序是跳转到.text段中,可以参考DSP28xx_CodeStartBranch.asm; 3.DSP281x_Headers_nonBIOS.cmd是对片内外设的寄存器分配地址的,F2812.cmd是给各种段分配地址的,是同时工作的.