欢迎来到天天文库
浏览记录
ID:39548678
大小:4.70 MB
页数:22页
时间:2019-07-06
《DSP2812启动过程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2812的内部Flash启动过程2812的内部flash启动过程2812从内部flash启动的详细流程说明:a) 程序硬件复位或者软件复位b) 判断mp/mc是否为0c) 为0则从bootrom启动,否则从外部启动d) 到bootrom的0x3FFFC0处取出复位向量,跳到boot函数e) 采集IO管脚状态,f) 根据IO状态选择boot方式g) 如果是flash,程序退出boot函数,跳转到0x3F7FF6h) 取出跳转指令,跳转到自己的指定
2、地址或者C初始化的入口_C_INT00处i) 在C初始化的入口_C_INT00对一些变量,堆栈和寄存器进行必要的设置,该函数在c的库函数内j) 进入main函数 从上电到我们的主函数运行之间这段时间里2812到底做了些什么?2812是怎样引导程序运行的?下面叙述其启动过程。 在2812中引脚XMP/~MC,当该引脚的为高电平时表示是微处理器模式(microprocessor),为低电平时表示微机算计模式(microcomputer),当为微处理器模式时,2812内部的bootrom被禁止,通过zone7(0x
3、3FC000)从外部调引导程序启动。2812复位以后,其复位向量是固定的0x3FFFC0,如果为微处理器模式,那么复位后的复位向量指向的外部的地址,即0x3FFFC0是zone7处的地址,若为微机算计模式,那么0x3FFFC0指向的是2812的片内FLASH的地址。下面就以微机算计模式加以说明其过程。 上电复位后,复位向量是指向片内Flash的0x3FFFC0,2812有一块flash地址从0x3FF000-0x3FFFFF在出厂时已经固化好了引导程序。在0x3FFFC0处是一条跳转指令,跳到iniboot(地址0x3FFC00)函数处执行
4、iniboot代码,该iniboot代码就是TI在dsp出厂时固化在flash中的。InitBootassemblyRoutine将选择SelectBootModefunction启动模式函数。这个函数由GPIO引脚的状态决定启动类型。引导模式选择GPIOF4GPIOF12GPIOF3GPIOF2(SCITXDA)(MDXA)(SPISTEA)(SPICLK)PUNoPUNoPUNoPUModeSelected1XXX跳转到地址为0x3F7FF6的Flash,用户必须在这里编写分支语句优先于复位,以按需要重新定位代码的执行.01XX调用SPI_B
5、oot以从外部的EEPROM载入0011调用SCI_Boot以从SCI-A载入0010J跳转到H0SARAM0x3F80000001跳转到OTP地址0x3D78000000调用Parallel_Boot从GPIO端口B载入一旦启动结束,选择启动模式函数返回一入口地址给InitBoot函数。入口地址是退出bootloader之后代码开始执行的起始点。InitBoot接着将会调用ExitBoot子程序,把CPU寄存器的状态恢复到复位状态。比如flashboot模式,那么initboot执行完后跳转到0x3F7FF6处(codestart处),此位置刚
6、好在128位(CSM)密码位置之前,你要在0x3F7FF6处放置跳转指令,以跳转到你要去的地方,比如是bootloader或应用代码,通常的跳转去处是_c_int00。在0x3F7FF6处放置跳转指令的方法如下(DSP281x_CodeStartBranch.asm中):.sect"codestart"code_start: .ifWD_DISABLE==1 LBwd_disable ;Branchtowatchdogdisablecode .else LB_c_int00 ;Branchtostartofboot.as
7、minRTSlibrary .endif .ifWD_DISABLE==1 .textwd_disable: SETCOBJMODE EALLOW MOVZDP,#7029h>>6 MOV@7029h,#0068h EDIS LB_c_int00 .endif.endMEMERY { Page0: ………..RAML0:origin=0x008000,length=0x001000/*on-chipRAMblockL0*/OTP:origin=0x3D7800,le
8、ngth=0x000400/*on-chipOTP*/FLASHD:origin=0x3F0000,length=0x002000/*o
此文档下载收益归作者所有