TI中文支持网
TI专业的中文技术问题搜集分享网站

dsp2812烧写经验总结

1、一般不用你换GEL.LIB文件,用原来的就可以.

2、换完FLASHCMD,不要烧写,看下.MAP文件,主要是看  0X3F 7FF8处有没有烧内容.如果有别烧,,直到这处没有烧入内容.

    一般网上的都可以用,只要没有在此出烧入内容

3、如果没有烧入其他的内容,则可以烧了.烧完后,RESET CPU 看是不是到 0X3F FFC0,如果不是, 是不是你的MP/MC=0,并且是不是FLASH启动模式,即所有4个脚都是高(只要第一个脚是高就可以, 1XXX)

4、如果RESET CPU 是到 0X3F FFC0,即可以断电,并且拔掉与板子相连的仿真器接口(注意拔电脑上的USB不好使),然后上电,自动运行.

注意:其中遇到的问题:

烧写/时说 初始化RAM,和寻找BOOT.ASM都不用管_

如果说是 NOT AN execuTivefile ,则在PROJECT_BULIT 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的0x3F 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)

  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)处(DSP281x_CodeStartBranch.asm中)

 i)在C初始化的入口_C_INT00对一些变量,堆栈和寄存器进行必要的设置,该函数在c的库函数内(RTS Library)

j)进入main函数(0x3F658E)

2812上电引导过程

从上电到我们的主函数运行之间这段时间里2812到底做了些什么?2812是怎样引导程序运行的?下面叙述其启动过程。

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

        上电复位后,复位向量是指向片内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)密码位置之前,你要在0x3F 7FF6处纺织跳转指令,以跳转到你要去的地方,比如是boot loader或应用代码。在0x3F 7FF6 处放置跳转指令的方法如下:

.sect "codestart"

code_start:

    .if WD_DISABLE == 1

        LB wd_disable      ;Branch to watchdog disable code

    .else

        LB _c_int00        ;Branch to start of boot.asm in RTS library

    .endif

    .if WD_DISABLE == 1

    .text

wd_disable:

    SETC OBJMODE       

    EALLOW             

    MOVZ DP, #7029h>>6 

    MOV @7029h, #0068h 

    EDIS              

    LB _c_int00        

.endif

.end

MEMERY

                        {

                                Page 0:

                                        ………..

                                Start:origin = 0x3F 7FF6,length = 0x000002

                                        ………..

                        }

                        SECTIONS

                        {

                                ……….

                                Codestart   :> Start  page 0

                                  ……….

                        }

        上面的代码执行后跳到_c_int00处执行,_c_int00执行结束时调用用户的主程序main,则后续就是你自己的程序的执行了。

deyisupport:

谢谢分享!

赞(0)
未经允许不得转载:TI中文支持网 » dsp2812烧写经验总结
分享到: 更多 (0)