重要资料连接:
http://blog.sina.com.cn/s/blog_762cf5f80101apfx.html
DSP28335— DELAY_US 总结 (2013-11-05 15:03:42)转载▼标签: dsp 分类: 学习交流
在很多程序中都会调用延时程序 DELAY_US(A),在文件 DSP281x_Examples.h 中有如下宏定
义:
#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) -
9.0L) / 5.0L)
从定义很容易推算出,需要延时 A 微妙就把 DELAY_US()的参数设置为 A 即可。
在仿真调试的情况下运行程序,延时是较准确的,但是当把程序烧写到 flash 里运行时,如
果程序上不做修改,就会很容易发现延时的时间比你设置的要长(通过延时控制 LED 灯闪烁,
很直观)。这是因为,DSP 访问 flash 时需要等待时间的,而访问 RAM 时几乎是零等待,所
以在使用 DELAY_US(A)时要想延时时间准确必须使其在 RAM 里运行,在程序上需做如下
修改:
1、在 DSP2833x_usDelay.asm 中,有如下代码:
.def _DSP28x_usDelay
.sect "ramfuncs"
.global __DSP28x_usDelay
_DSP28x_usDelay:
SUB ACC,#1
BF _DSP28x_usDelay,GEQ ;; Loop if ACC >= 0
LRETR
其中.sect "ramfuncs"语句的作用就是就把用汇编写的函数 DSP28x_usDelay 定位在 ramfuncs
段。
2、在 工程中 添加源 文件 DSP2833x_MemCopy.c,该 文件中的函数 void MemCopy(Uint16
*SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr),实现把你想复制的代码从装载地址
RamfuncsLoadStart—RamfuncsLoadEnd 拷贝到 RamfuncsRunStart 开始的 SARAM 空间中。
3、在文件 DSP2833x_SysCtrl.c 开头,通过伪指令定义一个代码段,注意位置一定要放在函数
前面(如下图所示)。
评论1