ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:299.18KB ,
资源ID:27133793      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27133793.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(dsp2812启动过程1.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

dsp2812启动过程1.docx

1、dsp2812启动过程12812的内部Flash启动过程2812的内部flash启动过程2812从内部flash启动的详细流程说明:a) 程序硬件复位或者软件复位b) 判断mp/mc是否为0c) 为0则从boot rom启动,否则从外部启动d) 到boot rom的0x3F FFC0处取出复位向量,跳到boot函数e) 采集IO管脚状态,f) 根据IO状态选择boot方式g) 如果是flash,程序退出boot函数,跳转到0x3F 7FF6h) 取出跳转指令,跳转到自己的指定地址或者C初始化的入口_C_INT00处i) 在C初始化的入口_C_INT00对一些变量,堆栈和寄存器进行必要的设置,该

2、函数在c的库函数内j) 进入main函数从上电到我们的主函数运行之间这段时间里2812到底做了些什么2812是怎样引导程序运行的下面叙述其启动过程。 在2812中引脚XMP/MC,当该引脚的为高电平时表示是微处理器模式(microprocessor),为低电平时表示微机算计模式(microcomputer),当为微处理器模式时,2812内部的bootrom被禁止,通过zone7(0x3F C000)从外部调引导程序启动。2812复位以后,其复位向量是固定的0x3FFFC0,如果为微处理器模式,那么复位后的复位向量指向的外部的地址,即0x3FFFC0是zone7处的地址,若为微机算计模式,那么0

3、x3FFFC0指向的是2812的片内FLASH的地址。下面就以微机算计模式加以说明其过程。 上电复位后,复位向量是指向片内Flash的0x3F FFC0,2812有一块flash地址从0x3F F000-0x3F FFFF在出厂时已经固化好了引导程序。在0x3F FFC0处是一条跳转指令,跳到iniboot(地址0x3F FC00)函数处执行iniboot代码,该iniboot代码就是TI在dsp出厂时固化在flash中的。InitBoot assembly Routine将选择SelectBootMode function启动模式函数。这个函数由GPIO 引脚的状态决定启动类型。引导模式选择

4、GPIOF4GPIOF12GPIOF3GPIOF2(SCITXDA)(MDXA)(SPISTEA)(SPICLK)PUNo PUNo PUNo PUMode Selected1XXX跳转到地址为0x3F7FF6的Flash,用户必须在这里编写分支语句优先于复位,以按需要重新定位代码的执行.01XX调用SPI_Boot 以从外部的EEPROM载入0011调用SCI_Boot 以从SCI-A载入0010J跳转到 H0 SARAM 0x3F 80000001跳转到OTP地址 0x3D 78000000调用Parallel_Boot从GPIO 端口B载入一旦启动结束,选择启动模式函数返回一入口地址给I

5、nitBoot函数。入口地址是退出bootloader之后代码开始执行的起始点。InitBoot接着将会调用ExitBoot子程序,把CPU寄存器的状态恢复到复位状态。比如flash boot模式,那么initboot执行完后跳转到0x3F 7FF6处(codestart处),此位置刚好在128位(CSM)密码位置之前,你要在0x3F 7FF6处放置跳转指令,以跳转到你要去的地方,比如是boot loader或应用代码,通常的跳转去处是_c_int00。在0x3F 7FF6 处放置跳转指令的方法如下(中):.sect codestartcode_start: .if WD_DISABLE =

6、1 LB wd_disable ;Branch to watchdog disable code .else LB _c_int00 ;Branch to start of in RTS library .endif .if WD_DISABLE = 1 .textwd_disable: SETC OBJMODE EALLOW MOVZ DP, #7029h6 MOV 7029h, #0068h EDIS LB _c_int00 .endif.endMEMERY Page 0: .RAML0 : origin = 0x008000, length = 0x001000 /* on-chip R

7、AM block L0 */ OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */ FLASHD : origin = 0x3F0000, length = 0x002000 /* on-chip FLASH */ FLASHC : origin = 0x3F2000, length = 0x002000 /* on-chip FLASH */ FLASHA : origin = 0x3F6000, length = 0x001F80 /* on-chip FLASH */ CSM_RSVD : origin = 0x3F7F

8、80, length = 0x000076 BEGIN : origin = 0x3F7FF6, length = 0x000002 .SECTIONS . /* Allocate program areas: */ .cinit : FLASHA PAGE = 0 .pinit : FLASHA, PAGE = 0 .text : FLASHC PAGE = 0 codestart : BEGIN PAGE = 0 ramfuncs : LOAD = FLASHD, RUN = RAML0, LOAD_START(_RamfuncsLoadStart), LOAD_END(_Ramfuncs

9、LoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0 csmpasswds : CSM_PWL PAGE = 0 csm_rsvd : CSM_RSVD PAGE = 0 /* Allocate uninitalized data sections: */ .stack : RAMM0 PAGE = 1 .ebss : RAML1 PAGE = 1 .esysmem : RAML1 PAGE = 1 /* For SDFlash to program these, they must be allocated to page 0 */ .econst

10、 : FLASHA PAGE = 0 .switch : FLASHA PAGE = 0 . 上面代码执行后跳到C初始化的入口_c_int00(0x3F6000) ,在C初始化的入口,_c_int00对一些变量,堆栈和寄存器进行必要的设置,这个函数在运行支持库中,_c_int00函数为建立C运行环境,需完成以下工作:a. 为系统堆栈产生.stack块,并初始化堆栈指针;b. 从.cinit块将初始化数据拷贝到.bss块中相应的变量;c. 对寄存器进行必要的配置,调用main函数开始运行C程序;没有过多的资料介绍_c_int00这块,无法知道它的具体功能实现以及怎样跳转到主函数的,用户可以对c_

11、int00函数进行修改,但修改后的函数必须完成以上任务。TMS320F2812 flash运行时的启动过程 2812启动过程与2407所用的传统单片机的Vectors启动模式不同,且仿真运行与脱离仿真器运行时差别较大,所以一开始比较难理解。其启动过程可以分为Flash启动、SPI_Boot、SCI_Boot、H0_Boot、Parallel_Boot等几种模式,而最常用的就是内部Flash运行,也就是将程序编译好后通过JTAG口将程序 文件下载到芯片内部falsh中运行,所以此处就这种运行方式的启动过程作一说明。图1 2812内部地址图 首先要搞清楚的就是2812的内部地址,如图1所示,(1)

12、为放中断向量表的RAM,中断向量表在初始化中由用户完成设置;(2)为放程序的Flash,其中最底的128Bits(8Words)存放Password用;(3)为BootRom,即专门为DSP启动所设立的一块ROM,其中内容为厂家固化。由图2可以更清晰地看到BootRom的内容,其中0x3F F0000x3F FC00 放置的是IQmath库中用到的函数表,0x3F FC000x3F FFC0放置的是Bootloader functions,最底部分放置的是VectorTable。内部Flash运行的启动过程如图3所示:图2 2812内部BootRom地址图 图3 2812内部Flash启动过程

13、a)程序硬件复位或者软件复位 b)判断mp/mc是否为0,微计算机模式(为1,当为微处理器模式时,2812内部的bootrom被禁止,通过zone7从外部调引导程序启动。) c)为0则从boot rom启动,否则从外部启动(0x3F FC00) d)到boot rom的0x3F FC00处取出复位向量,跳到boot函数:2812有一块flash地址从0x3F F000-0x3F FFFF在出厂时ti已经固化好了引导程序iniboot:Iniboot函数判断几个GPIO引脚来判断使用哪一种引导模式,比如flash boot模式,检测SPICLKA,SCITXA,GPIO34的电平,当都为高电平时

14、表明是片内flash boot模式,那么initboot执行完后跳转到0x3F 7FF6处) e)采集io管脚状态,确定启动模式。2812提供几种启动模式: SCITXDA(GPIOF4) MDXA(GPIOF12) SPISTEA(GPIOF3) SPICLK(GPIOF2) 1 x x x FLASH启动 0 1 x x SPI启动 0 0 1 1 SCI启动 0 0 0 0 PARALLEL启动 f)根据io状态选择boot方式 g)如果是flash,程序退出boot函数,跳转到0x3F 7FF6(codestart) h)取出跳转指令,跳转到自己的指定地址或者C初始化的入口_C_INT

15、00(0x3F6000)处(中) i)在C初始化的入口_C_INT00对一些变量,堆栈和寄存器进行必要的设置,该函数在c的库函数内(RTS Library) j)进入main函数(0x3F658E)注:1根据INTER NET上别人的资料,以及针对程序的推敲,总结如上。 2地址均为我程序实际观测到的值,和网上别人所言有出入。如:有言boot rom地址为0x3F FFC0,iniboot(起始地址0x3F FB50)。dsp2812烧写经验总结 收藏 1、一般不用你换文件,用原来的就可以.2、换完FLASH的CMD后,不要烧写,看下.MAP文件,主要是看 0X3F 7FF8处有没有烧内容.如果

16、有别烧,改,直到这处没有烧入内容. 一般网上的都可以用,只要没有在此出烧入内容3、如果没有烧入其他的内容,则可以烧了.烧完后,RESET CPU 看是不是到 0X3F FFC0处,如果不是,看 是不是你的MP/MC=0了,并且是不是FLASH启动模式,即所有4个脚都是高(只要第一个脚是高就可以,即 1XXX)4、如果RESET CPU 是到 0X3F FFC0处,即可以断电,并且拔掉与板子相连的仿真器接口(注意拔电脑上的USB不好使),然后上电,自动运行.注意:其中遇到的问题:烧写时说 初始化RAM,和寻找都不用管_如果说是 NOT AN execuTivefile ,则在PROJECT_BU

17、LIT OPTION_LINK_OUT MODLE _absolute file最重要是可以断电,并且拔掉与板子相连的仿真器接口(注意拔电脑上的USB不好使),然后上电,自动运行.我遇到的是这些,我用以上方法解决了,但不知道为什么,所以大家都说说经验,让新手烧走弯路,少LOCK2812 2812从内部flash启动的过程 a)程序硬件复位或者软件复位 b)判断mp/mc是否为0,微计算机模式(为1,当为微处理器模式时,2812内部的bootrom被禁止,通过zone7从外部调引导程序启动。) c)为0则从boot rom启动,否则从外部启动(0x3F FC00) d) 到boot rom的0x

18、3F FC00处取出复位向量,跳到boot函数:2812有一块flash地址从0x3F F000-0x3F FFFF在出厂时ti已经固化好了引导程序iniboot:Iniboot函数判断几个GPIO引脚来判断使用哪一种引导模式,比如flash boot模式,检测SPICLKA,SCITXA,GPIO34的电平,当都为高电平时表明是片内flash boot模式,那么initboot执行完后跳转到0x3F 7FF6处) e)采集io管脚状态,确定启动模式。2812提供几种启动模式 SCITXDA(GPIOF4) MDXA(GPIOF12) SPISTEA(GPIOF3) SPICLK(GPIOF2

19、) 1 x x x FLASH启动 0 1 x x SPI启动 0 0 1 1 SCI启动 0 0 0 0 PARALLEL启动 f)根据io状态选择boot方式 g)如果是flash,程序退出boot函数,跳转到0x3F 7FF6(codestart) h)取出跳转指令,跳转到自己的指定地址或者C初始化的入口_C_INT00(0x3F6000)处(中) i)在C初始化的入口_C_INT00对一些变量,堆栈和寄存器进行必要的设置,该函数在c的库函数内(RTS Library)j)进入main函数(0x3F658E)2812上电引导过程从上电到我们的主函数运行之间这段时间里2812到底做了些什么

20、2812是怎样引导程序运行的下面叙述其启动过程。 在2812中引脚XMP/MC,当该引脚的为高电平时表示是微处理器模式(microprocessor),为低电平时表示微机算计模式(microcomputer),当为微处理器模式时,2812内部的bootrom背禁止,通过zone7从外部调引导程序启动。2812复位以后,其复位向量是固定的0x3F FFC0,如果为为处理器模式,那么复位后的复位向量指向的外部的地址,即0x3F FFC0是zone7处的地址,若为微机算计模式,那么0x3F FFC0指向的是2812的片内FLASH的地址。下面就以微机算计模式加以说明其过程。 上电复位后,复位向量是指

21、向片内Flash的0x3F FFC0,2812有一块flash地址从0x3F F000-0x3F FFFF在出厂时已经固化好了引导程序。在0x3F FFC0处是一条跳转指令,跳到iniboot(地址0x3F FB50)函数处执行iniboot代码,该iniboot代码就是ti在dsp出厂时固化在flash中的。Iniboot函数判断几个GPIO引脚来判断使用哪一种引导模式,比如flash boot模式,检测SPICLKA,SCITXA,GPIO34的电平,当都为高电平时表明是片内flash boot模式,那么initboot执行完后跳转到0x3F 7FF6处,此位置刚好在128位(CSM)密码

22、位置之前,你要在0x3F 7FF6处纺织跳转指令,以跳转到你要去的地方,比如是boot loader或应用代码。在0x3F 7FF6 处放置跳转指令的方法如下:.sect codestartcode_start: .if WD_DISABLE = 1 LB wd_disable ;Branch to watchdog disable code .else LB _c_int00 ;Branch to start of in RTS library .endif .if WD_DISABLE = 1 .textwd_disable: SETC OBJMODE EALLOW MOVZ DP, #7

23、029h6 MOV 7029h, #0068h EDIS LB _c_int00 .endif.endMEMERY Page 0: . Start:origin = 0x3F 7FF6,length = 0x000002 . SECTIONS . Codestart : Start page 0 . 上面的代码执行后跳到_c_int00处执行,_c_int00执行结束时调用用户的主程序main,则后续就是你自己的程序的执行了。本文来自CSDN博客,转载请标明出处:新手小记:F2812烧写问题的解决过程说在前面的话:由于是新手,今天解决的这个问题对于高手可能简单得有点可笑,但这个解决过程我想还是

24、值得分享一下的,谢谢进入该帖子的朋友。-问题描述:我用的是DEC2812,将仿真调试好的程序换了网上提供的标准和.lib文件后,重新编译生成烧写用的.out文件。但是在烧写过程中提示:Warning: This program contains initialized RAM data.It may run successfully under Code Composer Studiobut not as a standalone system because of this. Ifyour Flash program requires initialized data in RAM,you

25、will need to write Flash code to initialize RAM memory.Erase/Program/Verify Operation succeeded-解决过程:1. 首先在论坛里找了半天,碰到这个问题的人还真不少,都说是.cmd文件的问题:“这个问题是cmd中有程序写在了RAM中,看看改到Flash就可以了”。但是没有具体的方法。我用的是网上下载的TI标准版,看了半天没发现什么异常,只好查自己的程序,了解自己把一些变量初始化是放在main()之外,作为全局变量处理的。未必这些就是所谓“写在RAM”的数据因此我把这些变量初始化统统移到main()里面了。

26、这下更惨,编译都报错了:declaration may not appear after executable statement in block第1步失败!2. 由于在编译期间还有如下报警,但是并不影响.out文件的生成,我就认为是这个报警导致烧写过程中的问题。 C:MyProjectssci_testflash, line 82: warning: (.const) not found warning: load address of uninitialized section .const ignored于是自己写了个很短的串口通信程序,仿真通过后,用编译,还是出现上述报警。不管了烧下

27、去再说,发现一切正常,板子复位后可独立运行。看来这个编译报警似乎并不影响程序运行。3. 在google上用initialize RAM memory搜索,发现有个哥们的blog记载了同样错误,他没搭理,直接复位运行,说是没有问题。于是大喜,不管那么多,有报警也l烧写进去再说。结果发现断电复位让程序单独运行,通信根本不通。未必板子没有跑起来由于手上无示波器,立即在程序里加了定时器中断,反复点亮目标板上的小灯,用来表征程序运行。再编译,烧写,期间报警照旧。断电复位后,发现灯在闪烁,大喜,立即建立通信,结果灯不闪了,通信不通,程序显然死掉了。反复进行了几次,都是一样的现象。很郁闷,只好又上网到处问,

28、碰到同样烧写报警的人是多,但都说是.cmd文件的问题,又没有具体的方法。4.看来还是.cmd文件的问题,在坛子里面搜索“.cmd”关键字的帖子,一篇篇翻看。突然发现一篇有关.switch定义的帖子,突然想起我的通信程序就是switch语句构成。进去一看发现里面贴出的.cmd文件和我的不同。多了好几项定义,其中就包括.switch。另外.const的定义也不一样,直接定义到FLASHA中,不像我的标准版,又是loadFLASHA又是runRAML0L1,还有一堆_const_run,(.const)什么的。于是照着帖子修改我的,该加的加,.const的一堆语句都删掉,直接定义到FLASHA。一编

29、译,居然又报错了:说是我的里面的_const_run之类没有定义。晕,刚刚才在.cmd中删掉的,换了个.lib还是同样报错。晕了。真是越改麻烦越多了。5.好了,直奔主题。最后又重新加载标准的,毕竟这个版本还是能生成.out文件的。想了半天,可能问题还是.switch定义上。第2.节中,我编的串口通信小程序的确也用了switch语句,但是数量很少,所以在.cmd中没有.switch的定义,也能正常烧写。正式的程序switch语句多,里面还有常量。于是硬着头皮只在标准的中加了.switch定义。编译, (.const) not found报警依旧;烧写,居然顺利通过!于是断电复位,板子独立运行,指

30、示灯闪烁。现在关键看通信,随着串口调试助手上发送键的按下,我紧张到极点,瞬间,数据接收区显示到接收到数据!成功! 首先说下,我接触2812也不久,遇到的问题只知道弄好了,但不知道原因,但我想把我说遇到的,清楚的说下,对新手有帮助。下面是正题:先说我遇到的一:正常的烧写不用你换文件,用原来的就可以.二:换完FLASH的CMD后,不要烧写,看下.MAP文件,主要是看 0X3F 7FF8处有没有烧内容.如果有别烧,改,直到这处没有烧入内容. 一般网上的都可以用,只要没有在此出烧入内容三:如果没有烧入其他的内容,则可以烧了.烧完后,RESET CPU 看是不是到 0X3F FFC0处,如果不是,看 是不是你的MP/MC=0了,并且是不是F

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1