TMS320F2812是目前性能非常优秀的32位定点DSP,集成了多种外设。对TMS320F2812开发通常利用TI公司的CCS2集成开发环境,使用JTAG接口仿真器连接目标板,可以不占用用户资源实现全速/断点调试;仿真调试完成后对CMD文件进行相关修改,并用RTS2800_FL04830.LIB替换RTS2800N.LIB,必要时对程序中变量与函数分配的空间做部分调整后,编译项目得到输出文件;在CCS2集成开发环境中完成下载、加密等操作后,断电脱离仿真机,成为独立运行的嵌入式系统。
然而,相当多的应用设计者常常面临程序仿真通过,但独立运行失败的情况,表现均为程序代码运行性能比估计的要差很多,以致来不及处理实时数据。由于代码在Flash中运行的时间比在SARAM中仿真的时间长,有的设计试验出现在Flash中运行比仿真慢4倍以上的结果,使设计只能停留在仿真通过的层次上。
1 分析
TI公司提供的一篇文档资料spra958e.pdf,描述了在内部Flash中运行程序的相关知识,说明当在RAM中仿真速度为150 MIPS时,相应Flash中的执行速度可达90~1OO MIPS;同时。在此文档资料中提供了参考实例,但介绍性文字较多,实现高性能的具体配置方式描述不够具体。经反复阅读TI公司的其他相关文档资料,并编程对比实验,笔者摸索出实现Flash中运行速度达到RAM中仿真速度的75%左右的方法,与TI指标相符合。下面详细说明试验程序与方法。限于篇幅,只列出与试验过程密切相关部分的配置情况。试验程序使用的空间分配如表1所列。
试验程序如下:
下面是CMD文件关键内容。因RAM仿真与下载Flash所用CMD文件有差异,故为节省篇幅,混合写在一起,差异部分参见说明。
试验程序运行时,用示波器在TMS320F2812的XF输出脚可以测量到重复脉冲(如图1所示),表2为对应的测量结果。
函数InitFlash()设置了等待参数。在100 MHz的系统时钟条件下,笔者的实例能保证正常执行的最佳参数;而其他设置会产生运行速度慢,或过快但运行不稳定的结果。观察表2的测量结果,可以发现各方式下T1时间不变,原因为指令“asm(“RPT#248||NOP”)”取指令只执行一次,然后在DSP中内部循环执行250次,而只有取指令才涉及等待参数问题,所以在试验的4种条件下T1基本相同(毕竟还是存在取指令过程,每种条件下T1并非完全一致,有微小差别)。因Flash本身访问速度比SARAM要慢,指令需要插入等待周期。
表2说明了下载到Flash中运行时的速度与在SARAM中仿真时相比,有所下降。T2/T3/T4虽然同为数据传送花费时间,但因分布空间不同,对应汇编指令数和指令类型相应有增减,故表现出不同的执行时间,其中数据在外部RAM中传输比在内部SARAM中传输要慢。
表2还显示出下载到Flash中运行,如果同时对芯片加密,则应当特别注意变量分配的空间位置。加密后Flash处于安全模块中,如果变量分配到HO,那么由于H0是非安全块,DSP工作时可以在两种模块中动态切换,不需要开发者附加代码。描述参见TI文档资料中的CSM章节,但并未说明需要额外增加时间开销。LOL1是安全块,如果变量分配到L0L1或是没有加密,则因不存在安全与非安全模块的切换时间开销,速度比较快。当采用保护芯片知识产权而需要加密Flash时必须注意分配变量空间,把对运行速度敏感的参数分配到LOLl中,否则会发现程序执行速度降低到仿真时的1/4。由于内部SARAM空间有限,应用系统往往需要外扩RAM,数据交换将比在内部SARAM执行时有所增多。
2 结论
通过前面的试验,可以得到几个在TMS320F2812应用开发中,运行于Flash中的代码如何提高性能的指导原则:
①根据系统时钟选择合适的等待参数;
②数据分配空间从指令类型与数量上影响程序执行效率;
③Flash加密后,对执行速度有快速性要求的应用系统,应当在CMD文件中指定运行空间在SARAM的L0L1段,并注意变量分配的段空间。
设计系统如果满足上面几个原则,那么程序执行效率就可达到SARAM仿真时的70%。
关键字:TMS320F2812 Flash
引用地址:
TMS320F2812芯片开发中Flash代码性能的研究
推荐阅读最新更新时间:2024-05-02 21:19
基于DSP的分布式温度采集记录仪的设计与实现
随着现代信息技术的飞速发展,分布式温度测量控制系统在工业、农业及人们的日常生活中扮演了一个越来越重要的角色。因此,对温度采集控制系统的设计与研究就具有十分重要的意义。 系统总体设计方案 TMS320F2812是TI公司推出的150MHz高速处理能力的高精度定点数字信号控制器。本设计采用TMS320F2812作为数据处理与控制单元,以Maxim公司的单线数字温度计DS28EA00为基础,通过DSP控制温度传感器顺序采集各个测量点的温度,经处理送LED显示并暂存到外扩RAM中,当满足特定的要求时,将数据存储到U盘或SD卡以便于以后分析处理。温度采集记录仪的硬件电路主要包含6个部分:DS28EA00温度测量模块、USB接
[嵌入式]
数据中心需求猛增,NAND Flash Q4营收季提升8.5%
据集邦咨询半导体研究中心(DRAMeXchange)调查显示,由于2019年第四季资料中心需求成长,NAND Flash供应库存下降;2020年第一季在量缩价增的情形下,营收表现持平上季... 根据DRAMeXchange调查显示,受惠于数据中心需求成长,2019年第四季NAND Flash整体位元出货量季增近10%。供给面受6月铠侠四日市厂区跳电影响,供不应求使得合约价止跌回涨。整体而言,第四季整体产业营收较第三季增长8.5%,达125亿美元。 由于需求面在第四季表现优于预期,供应商库存水位已恢复正常,因此减少对渠道市场Wafer的供应量,并着重于较高毛利的产品出货。 展望2020年第一季,考量疫情可能影响手机
[嵌入式]
stm32程序升级SD卡读取hex文件写入flash
日期:2019,1,14 芯片:STM32F1ZET6 参考文献: 1、了解hex文件: https://wenku.baidu.com/view/930d6583ec3a87c24028c403.html 2、stm32SD卡hex文件升级:看这位博客的【MCU实战经验】+ 通过SD卡升级HEX格式程序(附源码): https://blog.csdn.net/niepangu/article/details/50683754 【MCU实战经验】+ 通过SD卡升级HEX格式程序(附源码) 3、boot与app的切换可以了解一下正点原子的教程: www.openedv.com/posts/list/11494.htm 4、st
[单片机]
预测:供需失衡,DRAM与NAND Flash第四季至明年价格双双走跌
根据集邦咨询半导体研究中心最新调查,虽然下半年是产业旺季,但市场持续供过于求,DRAM第三季合约价格季涨幅缩小到仅1~2%,第四季可能反转下跌5%,也不排除跌幅持续扩大的可能性,终结价格连九季上涨的超级周期(super cycle)。而NAND Flash均价在第三季下跌约10%之后,第四季因受中美贸易摩擦波及,预估跌幅将大于第三季,扩大至约10~15%,渠道市场主流3D TLC颗粒合约价跌幅甚至将超过15%。 服务器内存价格走弱拖累,2019年DRAM年均价恐下滑15~20% DRAMeXchange指出,下半年削弱DRAM需求的主要原因,包括智能手机硬件规格已难以吸引换机
[手机便携]
STM32学习笔记:读写内部Flash
首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同。 RAM起始地址是0x2000 0000,结束地址是0x2000 0000加上芯片的RAM大小。不同的芯片RAM也不同。 Flash中的内容一般用来存储代码和一些定义为const的数据,断电不丢失, RAM可以理解为内存,用来存储代码运行时的数据,变量等等。掉电数据丢失。 STM32将外设等都映射为地址的形式,对地址的操作就是对外设的操作。 stm32的外设地址从0x4000 0000开始,可以看到在库文件中,是通过基于0x4000 0000地址的偏
[单片机]
【STM8S】 FLASH与EEPROM读写操作
以下为FLASH操作: #include flash.h #include stm8s_flash.h void Flash_Write_bytes(uint32_t Address , uint8_t * DataBuff,uint16_t length) { uint16_t Count=0; for( Count=0 ; Count length ; Count++ ) { FLASH_ProgramByte_User(Address+Count,DataBuff ); } } void FLASH_ProgramByte_User(uint32_t Address, uint8_t
[单片机]
8051单片机操作K9KF5608 FLASH存储器程序
//-----------------------函数声明,变量定义-------------------------------------------------------- #include reg51.h #include stdio.h #include intrins.h #include reg51.h sbit FLASH_CLE=P1^0; sbit FLASH_ALE=P1^1; sbit FLASH_WE=P1^2; sbit FLASH_WP=P1^3; sbit FLASH_CE=P1^4; sbit FLASH_RD=P1^5; sbit FLASH_RB=P1^6; void WriteCom
[单片机]
为什么STM32的Flash地址要设置到0x08000000
我们言简意赅的普及下这个知识点,争取让大家不伤脑细胞 一、背景知识: M3,M4内核芯片上电复位后,要固定从0x0000 0000地址读取中断向量表,获取复位中断服务程序的入口地址后,进入复位中断服务程序,其中0x0000 0000是栈顶地址,0x0000 0004存的是复位中断服务程序地址。 ARM官方回复: Documentation – Arm Developer 二、引出问题: 既然ARM规定了M3,M4内核要从地址0x0000 0000读取中断向量表,而STM32设置Flash地址到0x0800 0000怎么办? STM32支持了个内存重映射功能,将地址0x0800 0000开始的内容重映射
[单片机]