实验一CCS使用及DSP基本数学运算.ppt_第1页
实验一CCS使用及DSP基本数学运算.ppt_第2页
实验一CCS使用及DSP基本数学运算.ppt_第3页
实验一CCS使用及DSP基本数学运算.ppt_第4页
实验一CCS使用及DSP基本数学运算.ppt_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 CCS使用及DSP基本数学运算,一、实验目的 1熟悉CCS 集成开发环境,掌握工程的生成方法; 2熟悉SEED-DTK5416 实验环境; 3掌握CCS 集成开发环境的调试方法; 4了解数在计算过程中的定标,掌握数的定点、浮点表示方法,定点、浮点基本运算以及定点、浮点间的相互转换。,二、实验内容 1DSP源文件的建立; 2DSP程序工程文件的建立; 3编译与链接的设置,生成可执行的DSP文件; 4进行DSP程序的调试与改错; 5学习使用CCS集成开发工具的调试工具; 6观察实验结果;,三、实验背景知识 1.为什么DSP运算要做数的定标 2.数的定标方法 Q表示法 S表示法,四、实验程序结构说明 1.math.c这个文件中包含了实验关于DSP运算的主演函数。主要有: fixedadd(int x,int y):定点加法运算; fixedsub(int x,int y):定点减法运算; fixedmul(int x,int y):定点乘法运算; fixeddiv(int x,int y):定点除法运算; floatadd(double x,double y):浮点加法运算; floatsub(double x,double y):浮点减法运算; floatmul(double x,double y):浮点乘法运算; floatdiv(double x,double y):浮点除法运算; floatfixed(double x):浮点转定点运算; fixedfloat(int x):定点转浮点运算;,2.math.cmd文件 DSP的链接文件,也叫命令文件 。 命令文件的组成 file1.obj /子目标文件名1 file2.obj /子目标文件名2 file3.obj /子目标文件名3 - o prog.out /连接器操作指令,用来指定输出文件 - m prog.m /用来指定MAP文件 MEMORY 略 SECTIONS 略 otherlink.cmd,MEMORY伪指令 MEMORY用来建立目标存储器的模型,可以定义目标系统的各种类型的存储器及容量 MEMORY PAGE 0:name0(attr):origin = constant,length = constant name0n(attr):origin = constant,length = constant PAGE 1:name1(attr):origin = constant,length = constant name1n(attr):origin = constant,length = constant PAGE n:namen(attr):origin = constant,length = constant namenn(attr):origin = constant,length = constant ,SECTIONS伪指令 SECTIONS在程序里添加段名。 SECTIONS .text:所有.text输入段名 load加载地址 run =运行地址 .data:所有.data输入段名 load加载地址 run =运行地址 .bss:所有.bss输入段名 load加载地址 run =运行地址 .other:所有.other输入段名 load加载地址 run =运行地址 ,存储模型说明: .cinit:存放程序中的变量初值和常量 .const:存放程序中的字符常量、浮点常量和用const声明的常量 .switch:存放程序中switch语句的跳转地址表 .text:存放程序代码 .bss:为程序中的全局和静态变量保留存储空间 .far:为程序中用far声明的全局和静态变量保留空间 .stack:为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果,.sysmem:用于程序中的malloc 、calloc 、和realoc 函数动态分配存储空间 .vectors:中断向量表 .data:常数数据,如对变量的初始化数据 .trap: .cio:,地址说明 链接器为每个输出段都在目标存储器里分配两个地址:一个是加载地址,一个是运行地址 通常情况下两个地址是相同的,可以认为输出段只有一个地址,这时就可以不加“run=运行地址”这条语句; 有时需要将两个地址分开,比如将程序加载到FLASH,然后放到RAM中高速运行,这就用到了运行地址和加载地址的分别配置,“load加载地址”的几种写法: 首先“load”关键字可以省略 “”可以写成“” “加载地址”可以是:地址值、存储区间的名字、PAGE关键词等 “run =运行地址”中的“=”可以用“”,3.rts.lib库文件 rts.lib是一个库文件,主要包含了有关C的运行环境与相应的函数的代码。 该库文件存放在CCS的cgtoolslib中 。,4. GEL文件 GEL文件的功能是用于初始化DSP,实现对各种寄存器的初始化。 GEL在CCS下有一个菜单,可以根据DSP的对象不同,设置不同的初始化程序。,不同的DSP程序,其.cmd文件、.lib文件和.gel文件大小一样吗?,五、实验步骤 1硬件连接 将USB仿真器的USB插头插入PC机的USB插槽中;将DSP仿真器的JTAG插头与SEED-DEC54xx单元的J8相连接;启动计算机,当计算机启动后,打开SEED-DTK5416 的电源。观察SEED-DTK_IO单元的+5V、+3.3V、+15V、-15V的电源指示灯是否均亮;若有不亮的,请断开电源,检查电源。,2打开CCS集成开发环境,进入CCS的操作环境,新建源文件 创建一个未知名的源文件,编写源代码并保存 设保存源程序名为math.c,创建其它源程序(如.cmd)可重复上述步骤,创建或打开一个工程 建立新工程,点击ProjectNew,工程名及路径可任意确定,点击完成,已新建一个名为DTK-MATH.prj的工程,路径为D:ti5000myprojectsDTK-MATH 注:不认可汉字路径,加载源文件到工程 点击Project,选择Add Files to Project,添加math.c、math.cmd、rts.lib文件到工程中。,添加源文件到工程 在下拉菜单中选择.c点击打开,即可添加源程序到工程中,同样的方法可以添加文件math.cmd、rts.lib到工程文件中 在下面窗口中可以看到math.c、rts.lib文件已经加到工程文件中。,加载GEL文件 对各种寄存器的初始化 FileLoad GEL 例如: FileLoad GELCCS-FFTdtk-boot.gel,文件操作 以下操作可对工程中的文件进行打开、删除、查看属性等操作。,设置编译与连接选项,设置相应的编译参数,一般情况下,按默认值就可以,进行连接的参数设置,设置输出文件名、堆栈的大小以及初始化的方式,设置连接顺序。当使用rts.lib时将其放在最后,编译 生成目标文件:*.out 点击ProjectRebuild all,若正确则生成DTK-math.out; 若是修改程序,可以使用Project Build命令,Load文件并运行 加载文件: Fileload program debugDTK-MATH.out 载入debug文件夹下的可执行文件DTK-MATH.out 运行 Debug Run(F5),装载完毕,点击窗口左侧的Go Main回到C程序的入口,进入C程序入口,保存调试环境 点击FileWorkspaceSave Workspace保存调试环境,以便下次调试时,不再需要重新进行设置。,调试工具 断点调试,打开CPU与外设寄存器的观察窗 设置:Debug/Breakpoints 运行:Debug/Run,运行程序到第一个断点,在STDout观察窗内看定点运算是否正确;然后再运行程序到第二个断点,观察浮点运算是否正确。再运行程序,观察浮点与定点之间的转换是否正确。,观察CPU寄存器、Memory,在图示窗口中可观察到CPU个寄存器的值和外围寄存器的值,查看数据: View/Memory,调试工具(Debug) 在下拉菜单中可选择复位CPU、进入C主程序、重新开始等操作。,探测点调试Probe Points,查看程序执行到某一位置时各寄存器的值 设置:Debug/Probe points 与断点的区别:,这是CCS弹出有关Probe Points的设置表,进行如下设置,六实验说明 1.源程序错误 在函数fixed_add()中的z的定义未加“;”号; 函数float_add()中的号缺右边而未完整。 2.链接错误 DSP的空间分配重叠 DATA: origin = 3000h, length = 0120h /* Internal Data RAM */ STACK: origin = 3100h, length = 0500h /* Stack Memory Space */ 未给系统分配.stack堆栈段 /.stack STACK PAGE 1,六实验说明 1.源程序错误 在函数fixed_add()中的z的定义未加“;”号; 函数float_add()中的号缺右边而未完整。 2.链接错误 DSP的空间分配重叠 DATA: origin = 3000h, length = 0120h STACK: origin = 3100h, length = 0500h 未给系统分配.stack堆栈段 /.stack STACK PAGE 1,附件一: 程序解析,程序结构 #define Qx 4 #define Qy 4 #define Qz 4 void main() fixed_add(1556,40); fixed_sub(334,222); fixed_mul(188,188); fixed_div(188,18); float_add(2.5e3,1.2e3) ; float_sub(2.0e2,3.0e2); float_mul(2.0e2,3.0e2); float_div(2.0e4,2.0e2); float_fixed(9.735e1); fixed_float(1557); ,1.加法/减法运算的C语言定点模拟 设浮点加法运算的表达式为: float x,y,z; z=x+y; 将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标值一样。 若两者不一样,则在做加法/减法运算前先进行小数点的调整。 为保证运算精度,需使Q值小的数调整为与另一个数的Q值一样大。,结果不超过16位表示范围 设x的Q值为Qx,y的Q值为Qy,且QxQy,加法/减法结果z的定标值为Qz,则: zx+y,定点加法可以描述为: int x,y,z; long temp; /*临时变量*/ tempy(QxQz), 若QxQz z(int)(temp(QzQx), 若QxQz,举例:定点加法。 设x0.5,y3.1,则浮点运算结果为zx+y0.5+3.13.6; Qx15,Qy13,Qz13,则定点加法为: x16384;y25395; temp253952)29491; 因为z的Q值为13,所以定点值z29491即为浮点值z29491/81923.6,void fixed_add(int x,int y) long temp; int z; temp=y=Qz) z=temp(Qx-Qz); else z=temp(Qz-Qx); fprintf(stdout,“the result of fixed_add was %i !n“,z); ,举例:定点减法。 设x3.0,y3.1,则浮点运算结果为 zx-y3.0-3.1-0.1; Qx13,Qy13,Qz15,则定点减法为: x24576;y25395; temp25395; tempx-temp24576-25395-819; 因为QxQz,故 z(int)(-8192)-3276。由于z的Q值为15,所以定点值z-3276即为浮点值z-3276/32768-0.1,void fixed_sub(int x,int y) long temp; int z; temp=y=Qz) z=temp(Qx-Qz); else z=temp(Qz-Qx); fprintf(stdout,“the result of fixed_sub was %i !n“,z); ,2.乘法运算的C语言定点模拟 设浮点乘法运算的表达式为: float x,y,z; z = xy; 假设经过统计后x的定标值为Qx,y的定标值为Qy,乘积z的定标值为Qz,则 z = xy,定点表示的乘法为: int x,y,z; long temp; temp = (long)x; z = (temp*y) (Qx+Qy-Qz);,举例:定点乘法。 设x = 18.4,y = 36.8,则浮点运算值为z =18.436.8 = 677.12; 根据上节,得Qx = 10,Qy = 9,Qz = 5,所以有: x = 18841;y = 18841; temp = 18841L; z = (18841L*18841)(10+9-5) = 354983281L14 = 21666; 因为z的定标值为5,故定点 z = 21666即为浮点的 z = 21666/32 = 677.06,void fixed_mul(int x,int y) long temp; int z; temp=(long)x; z=(temp*y)(Qx+Qy-Qz); fprintf(stdout,“the result of fixed_sub was %i !n“,z); ,3.除法运算的C语言定点模拟 设浮点除法运算的表达式为: float x,y,z; z = x/y; 假设经过统计后被除数x的定标值为Qx,除数y的定标值为Qy,商z的定标值为Qz,则: z = x/y,定点表示的除法为: int x,y,z; long temp; temp = (long)x; z = (temp(Qz-Qx+Qy)/y;,举例:定点除法。 设x = 18.4,y = 36.8,浮点运算值为z = x/y = 18.4/36.8 = 0.5; 根据上节,得Qx = 10,Qy = 9,Qz = 15;所以有: x = 18841, y = 18841; temp = (long)18841; z = (18841L(15-10+9)/18841 = 308690944L/18841 = 16384; 因为商z的定标值为15,所以定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论