6594|2

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何计算DSP芯片F2812中delay_loop()函数的延时时间长度? [复制链接]

延时函数如下所示:
delay_loop()
{
     long i;
     for (i = 0; i < 1000; i++) {}
}
实验板用的是F2812型DSP芯片。工作频率在150Mhz,Datasheet说其最小指令周期为6nS。
实验是这样的,先把相关的GPIO引脚设置为高、低电平,然后用延时函数延时一段时间,再把GPIO相应引脚翻转,再进行延时。就这样循环,然后输出一个一定频率的信号。这个信号用示波器量了一下是6.xx Khz。然后我把延时函数的1000改为2000,再用示波器去量GPIO的引脚,发现频率变成了3.xx Khz。

就是这个时间是怎么来算的?怎么就成了6Khz了呢?

源程序如下:
//就是通过这个循环来实现信号的输入
while(1)
        {   
        GpioDataRegs.GPADAT.all    =0xAAAA;   
        GpioDataRegs.GPBDAT.all    =0xAAAA;     
        GpioDataRegs.GPDDAT.all    =0x0022;   
        GpioDataRegs.GPEDAT.all    =0x0002;
        GpioDataRegs.GPFDAT.all    =0xAAAA;   
        GpioDataRegs.GPGDAT.all    =0x0020;                                      
    delay_loop();//?????í??????
   
    GpioDataRegs.GPADAT.all    =0x5555;                            
        GpioDataRegs.GPBDAT.all    =0x5555;     
        GpioDataRegs.GPDDAT.all    =0x0041;    // Four I/Os only
        GpioDataRegs.GPEDAT.all    =0x0005;    // ThreeI/Os only
        GpioDataRegs.GPFDAT.all    =0x5555;   
        GpioDataRegs.GPGDAT.all    =0x0010;    // Two  I/Os only
    delay_loop();//?????í??????       
    }
       
反汇编程序如下:

3F819A      L1:
3F819A 761F MOVW    DP,#0x01C3
3F819C 2820 MOV     @32,#0xAAAA
3F819E 2824 MOV     @36,#0xAAAA
3F81A0 282C MOV     @44,#0x0022
3F81A2 2830 MOV     @48,#0x0002
3F81A4 2834 MOV     @52,#0xAAAA
3F81A6 2838 MOV     @56,#0x0020
3F81A8 767F .word   0x767F
3F81A9 81BB SUB     ACC,*0++ << 1
3F81AA 761F MOVW    DP,#0x01C3
3F81AC 2820 MOV     @32,#0x5555
3F81AE 2824 MOV     @36,#0x5555
3F81B0 282C MOV     @44,#0x0041
3F81B2 2830 MOV     @48,#0x0005
3F81B4 2834 MOV     @52,#0x5555
3F81B6 2838 MOV     @56,#0x0010
3F81B8 767F .word   0x767F
3F81B9 81BB SUB     ACC,*0++ << 1
3F81BA 6FE0 SB      L1,UNC

3F81BB      delay_loop:
3F81BB FE01 ADDB    SP,#1
3F81BC 2B41 MOV     *-SP[1],#0
3F81BD 1B41 CMP     *-SP[1],#1000
3F81BF 6305 SB      L3,GEQ

3F81C0      L2:
3F81C0 0A41 INC     *-SP[1]
3F81C1 1B41 CMP     *-SP[1],#1000
3F81C3 64FD SB      L2,LT

3F81C4      L3:
3F81C4 FE81 SUBB    SP,#1
3F81C5 0006 .word   0x0006

最新回复

我也使用LZ的方法延时,但是很不精确,需要精确定时必须用定时器。   详情 回复 发表于 2009-6-3 11:28
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
要精确的延时就别算指令了,你又没关中断,没有啥意义的

看看定时器啥的吧,要不用RTOS

呵呵。。。
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我也使用LZ的方法延时,但是很不精确,需要精确定时必须用定时器。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表