TMS320F28035使用学习系列分享(一)程序烧录配置RAM & FLASH 您所在的位置:网站首页 initflash函数 TMS320F28035使用学习系列分享(一)程序烧录配置RAM & FLASH

TMS320F28035使用学习系列分享(一)程序烧录配置RAM & FLASH

2023-03-27 10:58| 来源: 网络整理| 查看: 265

开发平台:CCS10, C2000Ware_4_00_00_00

使用芯片:TMS320F28035PNS

    烧写到RAM和烧写到FLASH 的配置有些许不同。主要区别在于.cmd文件。

    烧写到FLASH的需求是当烧写到RAM 之后,掉电之后,程序不会保存在MCU中。如果需要程度掉电后再上电时能够继续存在,就需要把程序烧写到FLASH之中去。

1. 烧写至RAM

    1)采用RAM烧写时,需要选择28035_RAM_Ink.cmd。方法如下:

图1 在project->properties 中配置28035_RAM_Ink.cmd

    2)对28035_RAM_Ink.cmd 中进行修改,在28035_RAM_lnk.cmd 中找到如下文段:

图2 原文件

    删去一些部分,修改成如下

图3 修改后(这里建议最好时用注释的方法进行操作)

    完成上述操作之后,就可以进行烧写和调试。

2. 烧写到FLASH

    1)首先要进行F28035.cmd文件的选择,选择如下:

图4 project->properties 中配置28035.cmd

    2)修改F28035.cmd的内容

图5 F28035.cmd内容的修改

    3)还需要在main.c中添加:

 同时,在main主函数的InitPieVectTable();之后添加以下代码。

NOTE:

    1) 此外,在官方手册《TMS320x2803x  Piccolo Technical Reference Manual》中,提到FLASH模式的硬件引脚配置,建议GPIO37和GPIO34上拉10k电阻到3.3V,TRST引脚下拉10k电阻到GND,当然,你也可以选择用拨码开关进行切换。

图6 官方手册中提到的FLASH模式的引脚配置

    2)对于老版本的CCS(有多老我就不确定,以后确定了再补充),有些教程会使用MemCopy,而不是用的memcpy。我查了一下ti论坛,找到以下帖子:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/849265/ccs-tms320f28035-memcopy-ramfuncsloadstart-ramfuncsloadend-ramfuncsrunstart-is-right

其中,“Do note that we don't recommend that use of MemCopy. memcpy is now recommended. “,说明了不再推荐使用MemCopy,而推荐使用memcpy。

     3) InitFlash()在DSP2803x_SysCtrl.c中,所以要确保你的工程文件夹中存在该文件。

3. 将DELAY_US()延时函数烧写至FLASH

    1) 该函数定义在DSP2803x_Examples.h中,函数具体文件为DSP2803x_usDelay.asm,

对于DELAY_US()延时函数,在官方DSP2803x_usDelay.asm 的配置如下:

图7 DSP2803x_usDelay.asm的内容

    参考 up主小靜靜紫陌璃的文章的说法,这一步的目的就是指定把ramfuncs放在RAM中运行,这样就解决了程序在Flash中卡死和编译警告的问题。【作者:小靜靜紫陌璃 https://www.bilibili.com/read/cv11381976?spm_id_from=333.999.0.0 出处:bilibili】

    2)所以不用做额外的修改,可以直接使用DELAY_US()。为了验证在FLASH中是否运行良好。我采用了GPIO口电平翻转实验,每隔100us进行翻转。其中while(1)循环代码如下:

图8 DELAY_US(100)在FLASHZ中的运行效果图

    从实验结果来看,DELAY_US()函数在FLASH中的运行是相当成功的。

    对于你想要在RAM中运行的函数,你可以在main.c之前添加以下代码

    其中,xxx就是你想要运行的代码函数名,它可以是中断服务函数等。

参考资料及其关键文段

1.    关于RAM和FLASH运行速度的差别

来自 

首先,ramfuncs段中的内容我们都是要让它在RAM中跑的,里面包含一些flash的初始化设置函数,这些函数必须只能在RAM中运行,还有一些对时间比较敏感的函数,也是需要复制在RAM中运行的,因为RAM的速度远快于flash,我们通常讲的60MHz的执行速度,指的是去RAM的运行速度,flash一般只能跑到1/3的速度。

       DELAY_US是1us的延时,它是基于RAM的速度来实现的精确的1us延时,如果把这段代码放在flash,由于flash的初始化等待状态不同,会导致flash执行速度不同,不能精确的得到1us的延时,只能是大于1us。

2.    TI C2000 , .cmd文件,.TI.ramfunc,将程序分配为在RAM中运行/Flash运行的配置方法和原理讲解,(如28375S ,280049,28335等等芯片)

来自

3.   细读DSP延时函数DSP28x_usDelay()及解决烧录至FLASH出错的方法 

来自

4.  memCopy()函数的理解

来自

InitFlash函数对Flash的访问的等待周期等进行设置,主要配置PAGEWAIT,RANDWAIT和OTPWAIT,在对这些寄存器配置之前,都是有默认值的,分别是15、15和32个sysclk,所以没有InitFlash函数并不影响访问Flash空间。谢谢!

5. tms320f28069 程序运行问题

来自

跑不起了,copy在ram里程序 执行时间不对,  不是代码逻辑的问题,

搞定了,主要是 注意 copy到ram的函数 相应调用的子函数 要靠考虑效率, 小的函数用 static lnline 声明, 大的函数 也同样 段声明 CODE_SECTION(cpu_timer0_isr, "ramfuncs"); 

然后运行时间就对了



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有