加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

DSP28335——在CCS5.5.0中如何将代码烧写到Flash

发布时间:2020-12-15 20:01:34 所属栏目:百科 来源:网络整理
导读:把一个原来是烧写到DSP的片内RAM的程序修改成是烧写到DSP片内FLASH的程序,需要以下几个步骤: 1.添加DSP2833x_CodeStartBranch.asm文件 添加D:tidcsc28DSP2833xv131DSP2833x_commonsourceDSP2833x_CodeStartBranch.asm文件,此文件负责上电后程序执

把一个原来是烧写到DSP的片内RAM的程序修改成是烧写到DSP片内FLASH的程序,需要以下几个步骤:

1.添加DSP2833x_CodeStartBranch.asm文件

添加D:tidcsc28DSP2833xv131DSP2833x_commonsourceDSP2833x_CodeStartBranch.asm文件,此文件负责上电后程序执行顺序跳转的;

2.添加DSP281x_Headers_nonBIOS.cmd文件

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

3.删除28335_RAM_lnk.cmd文件

把28335_RAM_lnk.cmd文件从project中移除,用右键选择28335_RAM_lnk.cmd然后选delete;

4.添加F28335.cmd文件

右键选择project名称,然后选add file to project,然后出现浏览框,在D:tidcsc28DSP2833xv131DSP2833x_commoncmd这个子文件夹下,选择F28335.cmd,点OK,至此可以在project的文件列表内看到F28335.cmd被添加到project中;

5.添加两行代码

在main()函数中添加如下语句:

 MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
 InitFlash();

 
 
上述两句话添加在InitPieVectTable();这句的下面的一行,添加语句的时候,注意不要添加错了,每一个字母都要正确,括号也要用英文括号; 

6.添加DSP2833x_MemCopy.c文件

右键选择project名称,然后选add file to project,然后出现浏览框,找到D:tidcsc28DSP2833xv131DSP2833x_commonsource文件夹中的DSP2833x_MemCopy.c文件,然后点OK;

7.选择Boot mode

DSP开发板上的拨码开关都拨到ON,本质含义是:将F28335的GPIO84、GPIO85、GPIO86、GPIO87这四个引脚用1k到10k之间电阻上拉到3.3V,这样就把Boot mode选为从DSP内部FLASH处boot程序的模式;

8.编译后进行Debug

编译没有错误后即可进行Debug,此时将代码烧写到FLASH中,而不是RAM中,如下图所示:

9.注意事项

(1)不是RAM中运行正确的程序,就在FLASH中运行也一定正确。

这是因为同样的程序在DSP的RAM中运行消耗的时间要远远短于在FLASH中运行的时间。假如,有一个中断函数cpu_timer_isr10ms(),这个函数每隔10ms由CPU定时器1产生中断触发,自动跳转进入执行一次。这个cpu_timer_isr1ms()内部包括三个子函数依次是adc_sanple(),pwm_update(),gpio_toggle():

cpu_timer_isr1ms()
{
adc_sanple();
pwm_update();
gpio_toggle();
}

 
其中假设adc_sanple()这个子函数在RAM中的执行时间是1ms,pwm_update()这个子函数在RAM中的执行时间是2ms,gpio_toggle()这个子函数在RAM中的执行时间是3ms,那么1+2+3=6<10,所以完全没有问题,在RAM中上面这些程序都可以运行很好。
但是,如果把上面这些程序放到FLASH中运行,很有可能adc_sanple()这个子函数在FLASH中的执行时间是3ms,pwm_update()这个子函数在FLASH中的执行时间是7ms,这是因为同样的程序在DSP的RAM中运行消耗的时间要远远短于在FLASH中运行的时间。这样前两个函数就把10ms都用掉了,根本轮不上gpio_toggle()这个子函数被执行,就被DSP强制终止了,所以看不到gpio_toggle()的现象;

(2)可以Load program到RAM的Out文件和可以固化(烧写)到FLASH的out文件内容是不同的;

(3)一般使用CCS仿真器时,我们把程序烧进RAM中运行,这样运行速度快,方便实际项目的开发与调试,此时用的是28335_RAM_lnk.cmd文件;当项目完成时,我们会选择将程序烧进Flash中,以摆脱仿对真器的依赖,当我们用f28335.cmd连接文件时,会把程序烧进28335内部的Flash中,此时,就可以脱离仿真器运行了,从Flash启动。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读