专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

基于TMS320F28335DSP的FLASH烧写方法

作者:佚名   来源:本站原创   点击数:  更新时间:2014年01月22日   【字体:

想把一个原来是烧写到DSP的片内RAM的程序修改成是烧写到DSP片内FLASH的程序,不仅仅是修改一个cmd文件就结束了,还需要做其他几个步骤

第一步:把28335_RAM_lnk.cmd这个从project中移除,用右键选择28335_RAM_lnk.cmd然后选delate。如下图1,然后出现对话框,点YES,如图2 

 

 

 

 

第二步:右键选择project名称,然后选add file to project,如下图3,然后出现浏览框,在\Code of TMS320F28335 CCS4\v120\DSP2833x_common\cmd这个子文件夹下,选择F28335.cmd,点OK,至此可以在project的文件列表内看到F28335.cmd被添加到project中。 

 

 

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

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

 InitFlash(); 

上述两句话添加在InitPieVectTable();这句的下面的一行。 

添加语句的时候,注意不要添加错了,每一个字母都要正确,括号也要用英文括号。 

第四步:添加DSP2833x_MemCopy.c这个文件到project中,右键选择project名称,然后选add file to project,然后出现浏览框,找到\Code of TMS320F28335 CCS4\v120\DSP2833x_common\source文件夹中的DSP2833x_MemCopy.c这个文件,然后点OK 

第五步:编译,点rebuild,编译至少要保证没有ERROR,否则请检查一下 

 

 

在第三步操作的地方是不是有错误。 

需要注意的是:不是RAM中运行正确的程序,就在FLASH中运行也一定正确。这是因为同样的程序在DSPRAM中运行消耗的时间要远远短于在FLASH中运行的时间 

比如,有一个中断函数cpu_timer_isr10ms(),这个函数每隔10msCPU定时器1产生中断触发,自动跳转进入执行一次。这个cpu_timer_isr1ms()内部包括三个子函数依次是adc_sanple()pwm_update()gpio_toggle() 

如下 

cpu_timer_isr1ms() 

adc_sanple() 

pwm_update() 

gpio_toggle() 

其中假设adc_sanple()这个子函数在RAM中的执行时间是1mspwm_update()这个子函数在RAM中的执行时间是2msgpio_toggle()这个子函数在RAM中的执行时间是3ms,那么1+2+3=6<10,所以完全没有问题,在RAM中上面这些程序都可以运行很好。 

但是,如果把上面这些程序放到FLASH中运行,很有可能adc_sanple()这个子函数在FLASH中的执行时间是3mspwm_update()这个子函数在FLASH中的执行时间是7ms,这是因为同样的程序在DSPRAM中运行消耗的时间要远远短于在FLASH中运行的时间。这样前两个函数就把10ms都用掉了,根本轮不上gpio_toggle()这个子函数被执行,就被DSP强制终止了,所以很多时候根本就看不到gpio_toggle()的现象。 

关闭窗口

相关文章