TI中文支持网
TI专业的中文技术问题搜集分享网站

2812 上电引导 疑问

DSP单机上电引导顺序(微计算机模式(XMPNMC= 0)):
1、上电复位
2、执行iniboot程序
3、根据GPIOF4(SCITXDA)、GPIOF12(MDXA)、GPIOF3(SPISTEA)、GPIOF2(SPICLK)的状态选择boot模式,假设选择了flash。
GPIOF4(SCITXDA)                       GPIOF12(MDXA)                                   GPIOF3(SPISTEA)                            GPIOF2(SPICLK)                         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(SPICLK)的状态?通过查看寄存器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

Martin Yu:

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中的。

DSP单机上电引导顺序(微计算机模式(XMPNMC= 0)):
1、上电复位
2、执行iniboot程序
3、根据GPIOF4(SCITXDA)、GPIOF12(MDXA)、GPIOF3(SPISTEA)、GPIOF2(SPICLK)的状态选择boot模式,假设选择了flash。
GPIOF4(SCITXDA)                       GPIOF12(MDXA)                                   GPIOF3(SPISTEA)                            GPIOF2(SPICLK)                         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(SPICLK)的状态?通过查看寄存器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

Martin Yu:

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

DSP单机上电引导顺序(微计算机模式(XMPNMC= 0)):
1、上电复位
2、执行iniboot程序
3、根据GPIOF4(SCITXDA)、GPIOF12(MDXA)、GPIOF3(SPISTEA)、GPIOF2(SPICLK)的状态选择boot模式,假设选择了flash。
GPIOF4(SCITXDA)                       GPIOF12(MDXA)                                   GPIOF3(SPISTEA)                            GPIOF2(SPICLK)                         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(SPICLK)的状态?通过查看寄存器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

yong yan:

回复 Martin Yu:

嗯,真的非常感谢!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文件同时起作用吧?

多谢!

DSP单机上电引导顺序(微计算机模式(XMPNMC= 0)):
1、上电复位
2、执行iniboot程序
3、根据GPIOF4(SCITXDA)、GPIOF12(MDXA)、GPIOF3(SPISTEA)、GPIOF2(SPICLK)的状态选择boot模式,假设选择了flash。
GPIOF4(SCITXDA)                       GPIOF12(MDXA)                                   GPIOF3(SPISTEA)                            GPIOF2(SPICLK)                         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(SPICLK)的状态?通过查看寄存器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

Harry xie1:

回复 yong yan:

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

赞(0)
未经允许不得转载:TI中文支持网 » 2812 上电引导 疑问
分享到: 更多 (0)