西工大DSP大作业
实验实验 1 1基于基于 CCSCCS 的简单的定点的简单的定点 DSPDSP 程序程序 一、实验要求一、实验要求 1、自行安装 CCS3.3 版本,配置和运行 CCS 2、熟悉CCS 开发环境,访问读写DSP 的寄存器 AC0-AC3, ARO-AR7, PC, T0-T3 3、结合 C5510 的存储器空间分配,访问 DSP 的内部 RAM 4 、 编 写 一 个 最 简 单 的 定 点DSP程 序 , 计 算 下 面 式 子 y=0.1*1.2+35*20+15*1.6 5、采用定点 DSP 进行计算,确定每个操作数的定点表示方法, 最后 结果的定点表示方法,并验证结果 6、对编写的程序进行编译、链接、运行、断点执行、单步抽并给出 map 映射文件 二、实验原理二、实验原理 DSP 芯片的定点运算---Q 格式(转) 2008-09-03 15:47DSP 芯片的定点 运算 1.数据的溢出: 1溢出分类:上溢(overflow) : 下溢(underflow) 2溢出的结果:MaxMin Min Max unsigned char 0 255 signed char -128 127 unsigned int 0 65535 signed int-3276832767 上溢在圆圈上按数据逆时针移动;下溢在圆圈上顺时钟移动。 例 : signedint: 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×pow(2,q) )F=(float) (Q×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 区间内的数据。 三、实验步骤三、实验步骤 1. 双击 Simulator。 ,启动 CCS 的仿真平台的配着选项。选择C5410 Device 2.点击 project 菜单栏的 new 选项,新建一个 LAB 的工程注意存储的路径。 3. 把下图中用到的文件拷到工程文件目录的文件路径下。 4.在 ccs 平台中将用到的程序导入到平台中,点击project—add project。选择多个文 件时,可以按住 ctrl 键。 5.将程序中的 start 改为_main,INT_2 改为_int_2。然后点击保存。 源程序代码源程序代码 *************************************************** ** * * *************************************************** ** .title “example.asm”;为汇编源程序取名 .mmregs;定义存储器映象寄存器 STACK.usect“STACK”,10h;分配 10 个单元的堆栈空间 .bssa,4;为系数 a 分配 4 个单元的空间 .bssx,4;为变量 x 分配 4 个单元的空间 .bssy,1;为结果 y 分配 1 个单元的空间 .def_c_int00;定义标号_c_int00 example.asmy=0.1*x1.2+35*20+15*x1.6 .data;定义数据代码段 table:.word1,2,3,4;在标号 table 开始的 8 个单元中 .word8,6,4,2;为这 8 个单元赋初值 .text;定义文本代码段 _c_int00 : STM#0,SWWSR STM#STACK+10h,SP STM#a,AR1 RPT#7 MVPDtable,*AR1+ CALLSUM end:Bend SUM:STM#a,AR3 STM#x,AR4 RPTZA,#3 MAC*AR3+,*AR4+,A STLA,@y RET .end ;软件等待状态寄存器置 0,不设等待 ;设置堆栈指针初值 ;AR1 指向 a 的地址 ;从程序存储器向数据存储器 ;重复传送 8 个数据 ;调用 SUM 实现乘法累加和的子程序 ;循环等待 ;将系数 a 的地址赋给 AR3 ;将变量 x 的地址赋给 AR3 ;将 A 清 0,并重复执行下条指令 4 次 ;执行乘法并累加,结果放在 A 中 ;将 A 的低字内容送结果单元 y ;结束子程序 ;结束全部程序 MapMap 文件文件 *********************************************************** ****************** TMS320C55x COFF Linker PC Version 3.83 *********************************************************** ******************* Linked Mon May 31 11:03:33 2010 OUTPUT : ENTRY POINT SYMBOL: “_main“address: 0000e000 MEMORY CONFIGURATION nameoriginlengthused attrfill ----------------------------------------------------------- PAGE0: EPROM0000e00000000100 0000001dRWIX vecs0000ff8000000004 00000000RWIX PAGE1: SPRAM0000006000000020 0000000bRWIX DARAM0000008000000100 0000001aRWIX SECTION ALLOCATION MAP outputattributes/ sectionpageoriginlength sections ----------------------