打印

利用CCS分析DSP的时钟运行周期

[复制链接]
2390|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
益友电子|  楼主 | 2012-8-1 19:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
分别用C语言和汇编语言进行程序设计,计算正弦函数值,并比较代码效率。
1C语言编程
#include <math.h>
#define NX 180
//
最大正弦角度
#define pi 3.14159
short i;
double x[NX]
//
定义输入正弦角度数组(弧度值)
double r[NX]
//
定义输出正弦结果数组
void main(void)
{

for (i=0;i<NX;i++)
//
将角度转换为弧度

{ x =pi*i/180;


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

}


return;

}
程序编译连接通过后,加载生成的.out文件,点击“Run”图标运行程序。我们在“Watch”窗口中可以观察输出的正弦值数组r 。(见图1)






利用CCS图形工具可以观察这段数据的波形。注意CCS图像显示参数设置中,正确填入数据的起始地址,数据长度设为180,数据类型要设为32位浮点数。(见图2)




2)汇编语言编程
用汇编语言计算正弦值,一般采用泰勒级数展开的方法。角度正弦值的泰勒级数展开式如下:(见图3)

相关帖子

沙发
益友电子|  楼主 | 2012-8-1 19:44 | 只看该作者
其中: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

使用特权

评论回复
板凳
益友电子|  楼主 | 2012-8-1 19:45 | 只看该作者

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)

使用特权

评论回复
地板
益友电子|  楼主 | 2012-8-1 19:45 | 只看该作者
图1:


图2:

使用特权

评论回复
5
益友电子|  楼主 | 2012-8-1 19:45 | 只看该作者

使用特权

评论回复
6
益友电子|  楼主 | 2012-8-1 19:45 | 只看该作者
图3:

使用特权

评论回复
7
益友电子|  楼主 | 2012-8-1 19:45 | 只看该作者
图4:

使用特权

评论回复
8
益友电子|  楼主 | 2012-8-1 19:45 | 只看该作者
图5:

使用特权

评论回复
9
益友电子|  楼主 | 2012-8-1 19:46 | 只看该作者
图6:

使用特权

评论回复
10
益友电子|  楼主 | 2012-8-1 19:46 | 只看该作者
图7:

使用特权

评论回复
11
丶tiantian| | 2012-8-2 13:46 | 只看该作者
很详细,多谢楼主。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

445

帖子

0

粉丝