TMS320F28035使用学习系列分享(一)程序烧录配置RAM & FLASH | 您所在的位置:网站首页 › initflash函数 › TMS320F28035使用学习系列分享(一)程序烧录配置RAM & FLASH |
开发平台:CCS10, C2000Ware_4_00_00_00 使用芯片:TMS320F28035PNS 烧写到RAM和烧写到FLASH 的配置有些许不同。主要区别在于.cmd文件。 烧写到FLASH的需求是当烧写到RAM 之后,掉电之后,程序不会保存在MCU中。如果需要程度掉电后再上电时能够继续存在,就需要把程序烧写到FLASH之中去。 ![]() 1)采用RAM烧写时,需要选择28035_RAM_Ink.cmd。方法如下: ![]() 2)对28035_RAM_Ink.cmd 中进行修改,在28035_RAM_lnk.cmd 中找到如下文段: ![]() 删去一些部分,修改成如下 ![]() 完成上述操作之后,就可以进行烧写和调试。 ![]() 1)首先要进行F28035.cmd文件的选择,选择如下: ![]() 2)修改F28035.cmd的内容 ![]() 3)还需要在main.c中添加: 同时,在main主函数的InitPieVectTable();之后添加以下代码。 NOTE: 1) 此外,在官方手册《TMS320x2803x Piccolo Technical Reference Manual》中,提到FLASH模式的硬件引脚配置,建议GPIO37和GPIO34上拉10k电阻到3.3V,TRST引脚下拉10k电阻到GND,当然,你也可以选择用拨码开关进行切换。 ![]() 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中,所以要确保你的工程文件夹中存在该文件。 ![]() 1) 该函数定义在DSP2803x_Examples.h中,函数具体文件为DSP2803x_usDelay.asm, 对于DELAY_US()延时函数,在官方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)循环代码如下: ![]() 从实验结果来看,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 实验室设备网 版权所有 |