F2812烧写个人总结增加程序知识分享.docx

上传人:b****1 文档编号:17974743 上传时间:2023-04-24 格式:DOCX 页数:10 大小:1.32MB
下载 相关 举报
F2812烧写个人总结增加程序知识分享.docx_第1页
第1页 / 共10页
F2812烧写个人总结增加程序知识分享.docx_第2页
第2页 / 共10页
F2812烧写个人总结增加程序知识分享.docx_第3页
第3页 / 共10页
F2812烧写个人总结增加程序知识分享.docx_第4页
第4页 / 共10页
F2812烧写个人总结增加程序知识分享.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

F2812烧写个人总结增加程序知识分享.docx

《F2812烧写个人总结增加程序知识分享.docx》由会员分享,可在线阅读,更多相关《F2812烧写个人总结增加程序知识分享.docx(10页珍藏版)》请在冰豆网上搜索。

F2812烧写个人总结增加程序知识分享.docx

F2812烧写个人总结增加程序知识分享

 

F2812烧写个人总结----增加程序

F2812烧写个人总结----增加程序

在仿真器中将程序调试好,将程序烧入flash之前,需要做以下工作:

一、硬件上确保DSP的XMP/MC管教接地,且SCIATXDA脚接高电平;

    XMP/MC接地为低电平:

表示微机算计模式,那么0x3FFFC0指向的是2812的片内FLASH的地址。

上电复位后,复位向量是指向片内Flash的0x3FFFC0。

2812有一块flash地址从0x3FF000-0x3FFFFF在出厂时已经固化好了引导程序。

在0x3FFFC0处是一条跳转指令,跳到iniboot(地址0x3FFB50)函数处执行iniboot代码,该iniboot代码就是ti在dsp出厂时固化在flash中的。

Iniboot函数判断几个GPIO引脚来判断使用哪一种引导模式,比如flashboot模式,检测SPICLKA,SCITXA,GPIO34的电平,当都为高电平时表明是片内flashboot模式,那么initboot执行完后跳转到0x3F7FF6处,此位置刚好在128位(CSM)密码位置之前,你要在0x3F7FF6处放置跳转指令(codestart:

>BEGIN,PAGE=0),以跳转到你要去的地方。

    BEGIN       :

origin=0x3F7FF6,length=0x000002

    /*PartofFLASHA.  Usedfor"boottoFlash"bootloadermode.*/

    codestart           :

>BEGIN       PAGE=0

    SCIATXDA脚接高电平:

是为那选择2812以FLASH作为引导模式

    我们在这里可以看到Flash启动模式,需要将GPIOF4,设置为高电平,其他三个引脚状态任意。

其配置如下:

二、向工程中添加F2812_EzDSP_FLASH_lnk.cmd文件,它是用于flash烧写的CMD文件,用于替换原有的用于RAM中调试的F2812_EzDSP_RAM_lnk.cmd文件。

三、添加DSP281x_Headers_nonBIOS.cmd文件,用于将DSP28头文件中的外设结构与存储器地址对应起来;

四、添加DSP281x_CodeStartBranch.asm文件,此文件负责上电后程序执行顺序跳转的;

 

五、main函数

六、编写定义Initflash()函数,并且添加语句#pragmaCODE_SECTION(InitFlash,"ramfuncs"),改语句功能是将InitFlash函数写入RAM中,因为InitFlash经常被调用,这样省得每次都从flash中写入RAM。

如果还有经常反复调用的函数,也可自行添加类似语句,需注意#pragmaCODE_SECTION(InitFlash,"ramfuncs")应该写在函数Initflash()所在的C文件中,并且在函数之前声明;

七、在main函数中写以下语句,功能是从flash中将程序复制到RAM中,

         memcpy(&ramfuncs_runstart,

                 &ramfuncs_loadstart,

                 &ramfuncs_loadend-&ramfuncs_loadstart);

注意ramfuncs_runstart、ramfuncs_loadstart、ramfuncs_loadend三个变量一定要和F2812_EzDSP_RAM_lnk.cmd文件中ramfuncs处的三个变量完全一致,并且这三个变量要进行全局变量申明

八、main函数中,在memcpy之后,执行Initflash(),接着再写别的功能函数。

 

     这些工作都做好了的话,至于在CCS中具体的烧写操作,就很简单了,有很多资料可以参考,注意别误操作把flash锁死就行。

呵呵,说完了,希望能对别人有用。

PS:

我用的3.3,所以步骤1不用

 

2.下载烧写FLASH配套CMD文件、LIB文件以及起始代码asm文件。

CMD文件名称:

DSP281x_Headers_nonBIOS.cmd

CMD文件名称:

F2812.cmd

LIB文件名称:

rts2800_ml.lib

ASM文件名称:

DSP281x_CodeStartBranch.asm

另外在RAM调试时用以下两个文件:

F2812_EzDSP_RAM_lnk.cmd

DSP281x_Headers_nonBIOS.cmd

PS:

这些文件可在sprc097压缩文件里面找到

3.配置C文件

配置好主程序的C文件,才能将FLASH成功烧录,并且将FLASH中的文件拷贝到RAM中运行。

关于C文件的配置。

首先在F2812.CMD文件中,我们可以看到有关于加载FLASH到RAM的内容:

ramfuncs          :

LOAD=FLASHD,

                     RUN=RAML0,

                     LOAD_START(_RamfuncsLoadStart),

                     LOAD_END(_RamfuncsLoadEnd),

                     RUN_START(_RamfuncsRunStart),

                     PAGE=0

以及在C文件中调用FLASH到RAM的函数memcpy,将它放在系统初始化(InitSystem();)之后即可:

InitSystem();

memcpy(&RamfuncsRunStart,

&RamfuncsLoadStart,

&RamfuncsLoadEnd-&RamfuncsLoadStart);

Initflash();

所以,我们需要定义所用变量:

externUint16RamfuncsLoadStart;

externUint16RamfuncsLoadEnd;

externUint16RamfuncsRunStart;

我的这些定义都是:

DSP281x_GlobalPrototypes.h当中,当然,也可以放在其他系统初始化的地方。

Memcpy这个函数应该是rts2800_ml.lib库文件中自带的,不需要我们定义。

关于FLASH的初始化配置Initflash();

我把它放置在Memcpy函数之后。

关于ramfuncs,则在系统初始化中定义即可。

如:

sysctrl.c中

#pragmaCODE_SECTION(InitFlash,"ramfuncs");

另外,许多朋友没有注意需要定义自己其他子程序,导致最终运行的主程序还是在FLASH中,比如你需要运行的子程序ABC,则需要定义#pragmaCODE_SECTION(ABC,"ramfuncs")

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

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

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