
TMS320F2812从内部Flash启动的详细流程说明:
1>程序硬件复位或者软件复位;
2>判断XMP/MC信号状态;若该信号为高电平时是微处理器模式,此时外部接口Zone7有效,Zone7被映射到存储空间的高位,这样向量表指向外部,系统从Zone7启动。若该信号为低电平时是微计算机模式,此时Zone7被禁止,向量表指向Boot ROM,这样系统既可以从内部存储空间启动,也可以从外部存储空间启动。
3>到Boot ROM的0x3FFC00处取出复位向量,跳到Boot函数;(TMS320F2812有一块Flash地址从0x3FF000-0x3FFFFF在出厂时TI已经固化好了引导程序InitBoot,InitBoot函数判断几个GPIO引脚来判断使用哪一种引导模式,比如Flash Boot模式,检测SPICLKA(GPIOF2),SPISTEA(GPIOF3),SCITXDA(GPIOF4),MDXA(GPIOF12)的电平,当都为高电平时表明是片内Flash Boot模式,那么InitBoot执行完后跳转到0x3F7FF6处,这个时候指令占据两个字节,刚好在代码模块之前。一定是跳转指令才行)
4>采集I/O管脚状态;
5>根据I/O状态选择Boot方式;

6>如果是Flash,程序退出Boot函数,跳转到0x3F7FF6(codestart);
7>取出跳转指令,跳转到自己的指定地址或者C初始化的入口_C_INT00(0x3F6000)处(DSP281x_CodeStartBranch.asm中);
8>在C初始化的入口_C_INT00对一些变量,堆栈和寄存器进行必要的设置,该函数在C的库函数内(RTS Library);
9>进入main函数(0x3F658E,这个地址不是固定的,但是在Flash里面)。
从上电到我们的主函数运行之间这段时间里TMS320F2812到底做了些什么?TMS320F2812是怎样引导程序运行的?下面叙述其启动过程:
在TMS320F2812中有一个引脚XMP/MC,当该引脚的为高电平时表示是微处理器模式(Microprocessor),当该引脚为低电平时表示微机算计模式(Microcomputer)。tms320f2812当为微处理器模式时,TMS320F2812内部的Boot ROM被禁止,通过Zone7(0x3FC000)从外部调引导程序启动,TMS320F2812复位以后,其复位向量是固定的0x3FFFC0,如果为微处理器模式,那么复位后的复位向量指向的外部的地址,即0x3FFFC0是Zone7处的地址;若为微机算计模式,那么0x3FFFC0指向的是TMS320F2812的片内Flash的址。下面就以微机算计模式加以说明其过程。

上电复位后,复位向量是指向片内Flash的0x3FFFC0,TMS320F2812有一块Flash地址从0x3FF000-0x3FFFFF在出厂时已经固化好了引导程序。在0x3FFFC0处是一条跳转指令,跳到InitBoot(地址0x3FFC00)函数处执行InitBoot代码,该InitBoot代码就是TI在DSP出厂时固化在Flash中的。InitBoot Assembly Routine将选择SelectBootMode Function启动模式函数。这个函数由GPIO 引脚的状态决定启动类型。
一旦启动结束,选择启动模式函数返回一入口地址给InitBoot函数。tms320f2812入口地址是退出BootLoader之后代码开始执行的起始点。InitBoot接着将会调用ExitBoot子程序,把CPU寄存器的状态恢复到复位状态。比如Flash Boot模式,那么InitBoot执行完后跳转到0x3F7FF6处(codestart处),此位置刚好在128位(CSM)密码位置之前,你要在0x3F7FF6处放置跳转指令,以跳转到你要去的地方,比如是BootLoader或应用代码,通常的跳转去处是_c_int00。在0x3F7FF6处放置跳转指令的方法如下(DSP281x_CodeStartBranch.asm中):
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-39166-1.html
抽检是随机调查
你就是王子