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是给各种段分配地址的,是同时工作的.