欢迎光临散文网 会员登陆 & 注册

TMS320F28035使用学习系列分享(四)程序烧录配置

2021-05-21 22:03 作者:小靜靜紫陌璃  | 我要投稿

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中卡死和编译警告的问题。

程序正常运行图

        


TMS320F28035使用学习系列分享(四)程序烧录配置的评论 (共 条)

分享到微博请遵守国家法律