tms320f2812启动过程的一些理解

    初学dsp2812几天,看了不少讲解2812启动过程资料,现按照个人理解对启动过程进行简单总结。若有错误,欢迎指出。

    复位后首先判断mp/mc是否为0,为0则从0x3FFFC0复位向量启动,否则从外部启动。若cpu从0x3FFFC0复位向量启动,则跳转到Boot ROM(0x3FF000,共4K)里固化好的BootLoader程序(位于0x3FFC00)。BootLoader采集4个IO管脚的状态来决定启动类型。启动类型包括Boot to Flash、Boot to H0等模式,这将决定BooLoader返回后跳转到的地方。

    Boot to Flash启动。此模式下BootLoader会跳转至0x3F7FF6(FLASH入口指针),这个地址由固化在ROM里的Boot Loader决定,不可修改。这个地址需要被指定为codestart段(在cmd里设置),DSP281x_CodeStartBranch.asm的程序就放在这里。这一段程序的功能是可选地关闭看门狗,并跳转至_c_int00,这是C初始化的入口。在C初始化的入口,_c_int00对一些变量,堆栈和寄存器进行必要的设置,这个函数在运行支持库(rts.lib)中,_c_int00函数为建立C运行环境;我们不需要关心_c_int00的具体位置,它由编译器决定。_c_int00函数结束后则跳转到main函数。

    Boot to H0模式。此模式下BootLoader会跳转至0x3F8000(H0 SARAM的首地址),同样地这个地址是固定的,我们需要将它设为codetart段。CPU跳转到0x3F8000后开始执行DSP281x_CodeStartBranch.asm,然后跳转到_c_int00。

    BootLoader会采集4个管脚的状态,状态包括逻辑0、1以及是否上拉,这是硬件上设置的不易更改。对此我产生了疑问,由于通常会硬件上设置为Flash启动模式,那么将程序Load Program到内存的仿真模式是怎么做到的呢?其实,在CCS中Load Program后,CPU会跳转到Code Entry Point(默认为_c_int00),这样便自动跳过了Flash启动模式下在0x3F7FF6(FLASH入口指针)执行指令的过程。在仿真调试时,0x3F7FF6的Flash空间是没有烧写code_start代码的,因此若CPU运行到这里则必然会跑飞。例如,Load Program后用Debug->Reset CPU让2812跳转到BootLoader入口处,点Run就会跑飞。

    最后想说的是,CCS中Debug->Restart会让CPU跳到Code Entry Point,在Build Option中的Link页中的Code Entry Point(-e)编辑框里设置,默认(空)是_c_int00,若设为code_start可以在进入_c_int00前关闭看门狗;而Debug->Reset CPU会让CPU跳转至0x3FFC00,这是Boot Loader的入口。

转载于:https://www.cnblogs.com/Ilmen/archive/2013/06/12/3133137.html

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值