西工大DSP大作业

  • 格式:docx
  • 大小:336.75 KB
  • 文档页数:23

下载文档原格式

  / 23
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西工大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

**********************************************************

********************