DSP28335 Digital Control Library配合Flash使用

本文介绍了如何在TI的C2000控制器上部署控制算法,涉及DigitalControlLibrary的使用、文件添加、内存地址配置以及从Flash到RAM的内存拷贝过程。解决了一个因代码运行环境限制导致的程序卡死问题。
摘要由CSDN通过智能技术生成

Digital Control Library 是TI用于C2000控制器部署常见控制算法的工具包,具体部署方式可以参考其用户手册,该手册可以在本文中找到,目前已经有更高版本的DCL,有需要的可以自行查找;此前,我的PI控制器通过下面3个步骤完成了配置:

  1. 添加对应的文件:也即"DCL.h"文件和"DCL_PI.asm"文件
  2. 在main.c中包含"DCL.h"文件:#include "DCL.h"
  3. 修改28335_RAM_Ink.cmd文件,添加dclfuncs对应的内存地址: 

 dclfuncs            : > RAML2,     PAGE = 0

然后在将代码转为写入Flash,断开仿真器重新上电后,对应的控制代码却无法使用(函数DCL_runPI(PI *p, float rk, float yk)无法调用,导致程序卡死);在经过查阅文档后,得出结论:该部分控制代码需要将Flash部分通过内存拷贝到RAM中才能运行,因为该函数是针对RAM中运行而写的汇编代码,在重新上电后RAM中并不含有对应的指令。

具体解决方式如下:

  1. 添加"DSP2833x_MemCopy.c"函数到工程中
  2. 定义需要拷贝的内存地址
    extern Uint16 dclfuncsLoadStart;
    extern Uint16 dclfuncsLoadEnd;
    extern Uint16 dclfuncsRunStart;

  3. 在main.c中完成内存拷贝:

        MemCopy(&dclfuncsLoadStart, &dclfuncsLoadEnd, &dclfuncsRunStart);
        InitFlash();

  4. 修改F28335.cmd文件,添加对应的RAM运行地址和Flash加载地址

            dclfuncs       : LOAD = FLASHE,
                             RUN = RAML2,
                             LOAD_START(_dclfuncsLoadStart),
                             LOAD_END(_dclfuncsLoadEnd),
                             RUN_START(_dclfuncsRunStart),
                             LOAD_SIZE(_dclfuncsLoadSize),
                             PAGE = 0

    其他配置和一般工程的Flash注意事项相同,重新烧写后,大功告成!

最后,关于将Flash拷贝到RAM的其他用法可以在本文提供的文档”Running an Application from Internal Flash Memory on th TMS320F28xxx DSP“中找到:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值