This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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 rom0x3F FC00处取出复位向量,跳到boot函数:2812有一块flash地址从0x3F F000-0x3F FFFF在出厂时ti已经固化好了引导程序inibootIniboot函数判断几个GPIO引脚来判断使用哪一种引导模式,比如flash boot模式,检测***SCITXAGPIO34的电平,当都为高电平时表明是片内flash boot模式,那么initboot执行完后跳转到0x3F 7FF6)
  e)采集io管脚状态,确定启动模式。2812提供几种启动模式
 SCITXDA(GPIOF4) MDXA(GPIOF12) SPISTEA(GPIOF3) ***(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 FFC0zone7处的地址,若为微机算计模式,那么0x3F FFC0指向的是2812的片内FLASH的地址。下面就以微机算计模式加以说明其过程。
        上电复位后,复位向量是指向片内Flash0x3F FFC02812有一块flash地址从0x3F F000-0x3F FFFF在出厂时已经固化好了引导程序。在0x3F FFC0处是一条跳转指令,跳到iniboot(地址0x3F FB50)函数处执行iniboot代码,该iniboot代码就是tidsp出厂时固化在flash中的。Iniboot函数判断几个GPIO引脚来判断使用哪一种引导模式,比如flash boot模式,检测***SCITXAGPIO34的电平,当都为高电平时表明是片内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,则后续就是你自己的程序的执行了。