[讨论] 关于DSP上电引导的提问

xkdwangcs   2011-6-9 13:49 楼主
最近看了两个TI的文档呢。
DSP281x_HeaderFiles_QuickStart_Readme
spru095a_TMS320F28x Boot ROM Reference Guide (Rev. A)
这两个文档。
了解了一下 DSP有了复位信号后,会跳到0x3FFFC0这个地址上去,
假设现在是BOOT-ROM映射到0x3FF000这个地址上面。这样话,DSP会进入INIT_BOOT函数
然后根据GF组IO口得状态来选择引导方式 一,跳到FLASH
                                                                 二,跳到H0
                                                                  三,跳到OTP
                                                                 四,选择SCI,SPI,GPIO来进行引导。

然后我在第一个文档里面看到有这样一个流程图:
RESET
   |
BOOT 时序
   |
DSP281x_CodeStartBranch.asm
Disable WD (Optional)
Branch to C Init Routine
      ||
  C Init
     ||
  主函数

其中BOOT时序就是我最上面分析的。
然后接下来,怎么跟DSP281x_CodeStartBranch.asm和C_INIT结合起来呢。
我知道DSP281x_CodeStartBranch.asm是咱们自己写的。
C_INIT这个入口,我一直都没有看到 是编译器产生的吗

这些是怎么联系的?
希望不要说是通过CMD文件的。如果可以的 怎么通过CMD文件联系可以解释一下了。


回复评论 (8)

关于DSP上电引导的提问

这里不是讨论吗?怎么没有人维护?没有人进来帮助呢?
点赞  2011-6-10 12:01

算了 我自己来解答吧

算了我自己来解答吧
论坛看来也是 给个希望而已了。

最近看了一些文档了。
个人总结了一下:
根据JTAG信号中的TRST的电平状态来选择,DSP运行在仿真器模式下面,还是在正常的操作模式下面。
第一种:如果TRST为低电平,也就是默认的状态。TRST具有内部下拉电阻。为正常的DSP运行状态。
第二种:如果TRST为高电平。也就是仿真器模式下进行仿真,这个高电平信号是由仿真器给出的。

先来分析第二种方式:
在仿真器状态的话,因为的CCS为3.1版本的。我就讲述这个版本的。仿真下面的DSP在干什么
当你打开CCS的时候,CCS会调用F2812.GEL文件中的。StartUp()进行CCS的基本配置,当然这些配置不能够有访问DSP的。因为
目前还没有连接到DSP。
然后当你点击CCS的connect的时候,DSP如果一切正常的话,就正确的连接上去了。这个时候,CCS是调用GEL文件中的。OnConnectDevice()
函数来进行操作的。这里面的函数包括了访问DSP 的操作。
这些函数的具体内容可以查看有关GEL文件的一些文档。TI 官方上面有
然后你看PC指针会指向MEMORY的0x3fffc0这个复位的地址。
然后你开始编译工程,然后Load程序到DSP中。这个过程,CCS会自动生成一个c_int00的地址可以在MAP文件中看到。
当你开始点击RUN的时候,应该DSP会直接跳到C_INT00这个地址上去,去建立一个C的环境 然后开始调用MAIN函数。
开始执行其他的代码。
这里在仿真模式下面,不涉及到任何上电引导的内容。


然后来解释第一种情况:
如果你已经下载程序到DSP中去了。要脱离仿真器运行的时候,才会涉及到上电引导。
脱离仿真器,然后开始给DSP上电。DSP开始复位,DSP设置为C27模式运行。然后指针知道ox3fffc0这个地址
这个地址上面有个跳转指令,LB 0x3ffc00,当然我这里只考虑MC/MP=0的情况、
然后就开始跳到BOOT-INIT函数的首地址了。
开始将DSP设置为C28模式运行。
然后初始化一些寄存器应该我没有记错的话,有14个寄存器
然后开始检查GPIOF组的状态
然后根据IO口得状态来选择引导模式:
如果这里是内部FLASH引导的话,
接下来PC指针会跳到0X3F7FF6这个地址上面去了。
如果需要用户在这个地址上面烧好一条跳转指令 LB C_INT00
接下来程序就会跳到这个地址建立C环境。然后调用MAIN函数
开始这姓程序。

虽然我还有几点没有明白,
比如:在FLASH内部引导的部分,0X3F7FF6里面的跳转指令需要咱们自己烧进去,还是程序已经帮咱们生成好了?
但是我看了很多这方面的。有些人理解是要烧写进去,
有些人理解是CCS生成的。类似仿真模式
但是我现在理解是:需要烧写进去的。因为咱们有个CodeStartBranch.asm函数了。
以上是个人想法
欢迎 纠正。
点赞  2011-6-20 13:01

回复 板凳 xkdwangcs 的帖子

起始地址是自己在cmd文件中定义,然后通过CCS生成的,所有下载到C2000中的目标文件,都是按照TI C2000的hex文件格式,首先下载到flash中的就是reset的地址,即你的目标代码的首地址。
点赞  2011-6-20 13:53
学习了
工程 = 数学+物理+经济
点赞  2011-10-10 16:58

留下脚印,以后瞻顾!

点赞  2011-10-10 20:12

回复 板凳 xkdwangcs 的帖子

分析的挺靠谱的,学习了,谢谢
点赞  2011-11-16 21:22
学习了
点赞  2011-11-19 12:24
分析得很到位
没有行不行,只有做不做
点赞  2014-3-10 22:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复