7494|2

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

DSP的C语言心得记录-利用CCS分析DSP的时钟运行周期 [复制链接]

分别用C语言和汇编语言进行程序设计,计算正弦函数值,并比较代码效率。
1C语言编程
#include
#define NX 180
//
最大正弦角度
#define pi 3.14159
short i;
double x[NX]
//
定义输入正弦角度数组(弧度值)
double r[NX]
//
定义输出正弦结果数组
void main(void)
{

for (i=0;i //
将角度转换为弧度

{ x =pi*i/180;


r=sin(x);
//
计算正弦值

}


return;

}
    程序编译连接通过后,加载生成的.out文件,点击“Run”图标运行程序。我们在“Watch”窗口中可以观察输出的正弦值数组r 。(见图1)
利用CCS图形工具可以观察这段数据的波形。注意CCS图像显示参数设置中,正确填入数据的起始地址,数据长度设为180,数据类型要设为32位浮点数。(见图2)
2)汇编语言编程
     用汇编语言计算正弦值,一般采用泰勒级数展开的方法。角度正弦值的泰勒级数展开式如下:(见图3)
其中:x为弧度值。
注意:
l
x01,原因是CPU寄存器ST1中的FRCT位为1CPU处于小数模式。
l
程序文件中所有标号左对齐。
l
编译器默认的程序起始标号_c_int00
3)汇编程序如下:

.mmregs
;
伪指令,定义C54x寄存器符号              

.def
_c_int00
;
伪指令,声明在当前模块中定义的标号

.def
sin_start

;;;;;;;;;;;;;;;;;"coeff"段开始;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
d_coff
.sect
"coeff"


.word
01c7h
;1/72 *(215-1)
Q15
格式

.word
030bh
;1/42 *(215-1)


.word
0666h
;1/20 *(215-1)


.word
1556h
;1/6 *(215-1)

;;;;;;;;; 预留中间运算结果存储空间段;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
d_x
.usect
“sin_vars”,1

     ;伪指令,在 "sin_vars"段中预留1个字的空间
d_squr_x
.usect
"sin_vars",1

d_temp
.usect
"sin_vars",1

d_sinx
.usect
"sin_vars",1

C_1
.usect
"sin_vars",1

;;;;;;;;;;;.text段开始;;;;;;;;;;;;;;;;;;;;;;;;;;;

.text

_c_int00:
CALL sin_start

sin_start:


SSBX
FRCT
; ST1
中的FRCT位置1

STM
#d_coff,AR3


STM
#d_x,AR2


STM
#C_1,AR4


LD
#d_x, DP


ST
#06487h,d_x
; input x = PI/4


ST
#7fffh,C_1


SQUR
*AR2+,A
; A = x^2


ST
A,*AR2
; AR2 = x^2


|| LD
*AR4,B
; B = C_1


MASR
*AR2+,*AR3+,B,A

; A = (1-x^2/72), T = x^2


MPYA
A
; A = T*A = x^2*(1-x^2/72)


STH
A,*AR2
; d_temp = A = x^2*(1-x^2/72)


MASR
*AR2-,*AR3+,B,A
; A = 1-x^2/42(1-x^2/72),


; T = x^2(1-x^2/72)


MPYA
*AR2+
; B = x^2*(1-x^2/42(1-x^2/72))


ST
B,*AR2


|| LD
*AR4,B



MASR
*AR2-,*AR3+,B,A
; A = 1-x^2/20(1-x^2/42(1-x^2/72)


MPYA
*AR2+
; B = x^2*(1-x^2/20(1-x^2/42(1-x^2/72))


MASR
*AR2-,*AR3+,B,A
; A = 1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))


MPYA
d_x
; B = x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))


STH
B, d_sinx
; d_sinx = sin(x)


RET


.end

;;;;;;;;;;;;;;;;;.text段结束;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4)算法分析
l
运算速度:CCS主界面选择
Profile>Enable Clock,启动时钟分析
Profile
>View Clock,观察分析结果
C语言执行时间(见图4)
汇编语言执行时间(见图5)
l
代码长度:Profile>Start New Sessions
     输入name_profile --Range
分析程序代码长度。
(见图6、7)







最新回复

我顶一个,元旦过了,我选修的DSP也要开始做实验了,希望有所收获~!  详情 回复 发表于 2009-12-28 22:26
点赞 关注
 

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
使用有误时,需要注意
首先你要把程序分开来分析:
第一,可以把部分程序代码删掉,单步跟踪,看是不有变化,可以自己写一个简单的赋值程序或者是一个循环运行的程序,然后观测参变量的数值是否有变化。这样来这样来证明CCS的图形显示是否正确,若不正确,就是一些设置有点问题了;
第二,若第一种方式没有问题了,再重新把代码添进,究竟是用在线模拟的方式去做还是在线仿真的方式去做,这都得设定好,不然编译器不会做任何操作的。
通过以上两种方式,基本可以实现的。
 
 

回复

1861

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
我顶一个,元旦过了,我选修的DSP也要开始做实验了,希望有所收获~!
个人签名有目的的学习是最有效的学习!
 
 
 

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

随便看看
查找数据手册?

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