TMS320F28035使用学习系列分享(四)程序烧录配置
1.烧写至RAM
定时器程序配置好后,不妨设置一个累加变量 CpuTimer0.InterruptCount++(官方例程的变量),用来关注变量的变化。
采用RAM烧写,就在工程设置(Properties)->常规(General)->CMD文件(Linker commend file)中选择 28035_RAM_Ink.cmd

烧写例程后,会进入调试界面,选中变量CpuTimer0.InterruptCount,右键添加观察变量(Watch Expression),变量就会显示在窗口中了。


点击运行按钮,程序就开始运行啦。

在变量观察栏中点击持续更新(Continuous Refrensh),就可以观察到数值的改变。


2.烧写至Flash
程序内容庞大后,一般都要烧写至Flash,而且DSP程序烧写至RAM掉电后不会保存。总而言之程序最终都要烧写至Flash中。
我们先在(Properties)->常规(General)->CMD文件(Linker commend file)中选择 F28035.cmd

进行下载,C2000系列DSP通常有8个Flash扇区,下载前会分别擦除。下载后运行操作效果同上。

3.关于Delay定时函数烧写至Flash
程序中有时往往也会使用到延时函数DELAY_US()函数来完成定时效果,该函数定义在DSP2803x_Examples.h中,函数文件为DSP2803x_usDelay.asm。若直接烧写至Flash中会出现一点问题,首先会出现一个警告

运行过程代码量小的时候基本正常,但是代码变多后就有问题了,程序很容易卡死。

这是因为程序在RAM中运行速度很快,而在Flash中运行需要一段时间,导致运行出错。因此我们需要对Flash运行环境进行初始化。
解决办法如下:
操作配置文件:
DSP2803x_MemCopy.c
DSP2803x_SysCtrl.c
DSP2803x_usDelay.asm
调用的函数
MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr)
InitFlash()
DELAY_US(A)
其中MemCopy()在DSP2803x_MemCopy.c中,InitFlash()在DSP2803x_SysCtrl.c中。
步骤:
(1)在路工程径下添加DSP2803x_MemCopy.c
(2)在main函数初始化时调用函数
MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
InitFlash();
(3)在F28035.cmd文件 SECTIONS 中添加
ramfuncs : > RAML0 PAGE = 0
这样分配是因为在DSP2803x_usDelay.asm中,该函数被分配在ramfuncs段

这一步的目的就是指定把ramfuncs放在RAM中运行,这样就解决了程序在Flash中卡死和编译警告的问题。
