3568|0

8

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

DSP28335— DELAY_US总结 [复制链接]

在很多程序中都会调用延时程序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开头,通过伪指令定义一个代码段,注意位置一定要放在函数前面(如下图所示)。

4、在main函数中要调用MemCopy函数,注意该函数放置的位置。
5、修改用于烧写的CMD文件
6、注意在头文件DSP281x_GlobalPrototypes.h 别忘做如下声明:


 
点赞 关注
个人签名zmg

回复
举报
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表