西工大DSP大作业
- 格式:docx
- 大小:336.75 KB
- 文档页数:23
西工大DSRt作业
实验1基于CCS的简单的定点DSF程序
一、实验要求
1、自行安装CCS3.3版本,配置和运行CCS
2、熟悉CCS开发环境,访问读写DSP勺寄存器AC0-AC3 AR0-AR7,
PC, T0-T3
3、结合C5510的存储器空间分配,访问DSR的内部RAM
4、编写一个最简单的定点DSP程序,计算下面式子
y=0.1*1.2+35*20+15*1.6
5、采用定点DSP进行计算,确定每个操作数的定点表示方法,最后结果的定点表示方法,并验证结果
6、对编写的程序进行编译、链接、运行、断点执行、单步抽并给出map映射文件
二、实验原理
DSP芯片的定点运算---Q格式(转)2008-09-03 15:47 DSP 芯片的
定点运算
1. 数据的溢出:
1>溢出分类:上溢(oveflow ): 下溢(underflow )
2>溢出的结果:Max Min
Min Max un sig ned char 0 255 sig ned char -128 127 un sig ned
int 0 65535 signed int -32768 32767
上溢在圆圈上按数据逆时针移动;下溢在圆圈上顺时钟移动。
例:signed int : 32767+1 = —32768 ; -32768-1 = 32767 unsigned char : 255+1 = 0; 0-1 = 255
3>为了避免溢出的发生,一般在DSP中可以设置溢出保护功能。当
发生溢出时,自动将结果设置为最大值或最小值。
2. 定点处理器对浮点数的处理:
1>定义变量为浮点型(float , double ),用C语言抹平定点处理器和浮点处理器
2>放大若干倍表示小数。比如要表示精度为0.01的变量,放大100倍去运算,3>定标法:Q格式:通过假定小数点位于哪一位的右侧,从而确定小
数的精度。Q0 :小数点在第0位的后面,即我们一般采用的方法Q15 小数点在第15位的后面,0~ 14位都是小数位。转化公式:Q= (int )
(F X pow(2, q)) F =(float ) (Qx pow (2,—q))
3. Q格式的运算
1>定点加减法:须转换成相同的Q格式才能加减
2>定点乘法:不同Q格式的数据相乘,相当于Q值相加
3>定点除法:不同Q格式的数据相除,相当于Q值相减
4>定点左移:左移相当于Q值增加
5>定点右移:右移相当于Q减少
4. Q格式的应用格式
实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。
所以要选择一个适当的定标格式才能更好的处理运算。一般用如下两
种方法:
1>
用时使用适中的定标,既可以表示一定的整数复位也可以表示小
数复位,如对于2812的32位系统,使用Q15格式,可表示—
65536.0 〜65535.999969482 区间内的数据。
三、实验步骤
启动CCS勺仿真平台的配着
选项。选择C5410 Device Simulator 。
2. 点击project菜单栏的new选项,新建一个LAB的工程注意存储的路径。
3. 把下图中用到的文件拷到工程文件目录的文 件路径下
lab^a.Rjt
MicrosoftVfiUd FoxP 「口 旷可旦ct 1KB
4.
在ccs 平台中将用到的程序导入到平台中,点 击 project
— >add file to project 。选择多
个文件时,可以按住ctrl 键。
5•将程序中的start 改为_main , INT_2改为
Winders N r 金令脚吕 1KB
^LAB^IAASM
:
ASM 袁件j h
STM #O,SWWSR
软件等待状态寄存器置0,不设等待
」nt_2。然后点击保存。
源程序代码
***************************************************
***************************************************
_c_intOO :
.title “ example.a sm ”
; 为汇编源程序取名 .mmregs
;
定义存储器映象寄存器
STACK .usect “
STACK ,10h ;分配10个单元的堆栈空间
.bss a,4 ; 为系数a 分配4个单元的空间 .bss x,4 ; 为变量x 分配4个单元的空间 .bss y,1 ; 为结果y 分配1个单元的空间 .def
_c_in t00
;
定义标号_c_in t00
.data
J
定义数据代码段
table: .word 1,2,3,4 ;
在标号table 开始的8个单兀中
.word 8,6,4,2
为这8个单元赋初值 定义文本代码段
.text example.asm
y=0.1*x1.2+35*20+15*x1.6
STM #STACK+10h,SP ; 设置堆栈指针初值
STM #a,AR1 ;AR1 指向a的地址
RPT #7 ;从程序存储器向数据存储器MVPD table,*AR1 + ;重复传送8个数据CALL SUM ; 调用SUM实现乘法累加和的子程序end: B end ;循环等待
SUM:STM #a,AR3 ;将系数a的地址赋给AR3
STM #x,AR4 ;将变量x的地址赋给AR3 RPTZ A,#3 ; 将A清0,并重复执行下条指令4次MAC *AR3+,*AR4+,A ;执行乘法并累加,结果放在A中
STL A,@y ;将A的低字内容送结果单元y
RET ;结束子程序
.end ;结束全部程序
Map文件
**********************************************************
*******************
TMS320C55X COFF Linker PC Versio n 3.83
**********************************************************
********************