实验一DSP的常用指令实验

合集下载

dsp实验注释

dsp实验注释

dsp实验注释实验一:简单指令程序运行实验代码(含注释):.mmregs.global _main_main:stm #3000h,sp ;sp为堆栈指针寄存器,stm为存储器映射寄存器寻址ssbx xf ;xf赋值为1,灯亮call delay ;调用delay函数,延迟0.5秒rsbx xf ;xf赋值为0,灯灭call delay ;调用delay函数b _main ;无条件调用_main函数nopnop;delay .5 second ;延时5秒delay:stm 270fh,ar3 ;ar3赋值207fh,十进制为9999dloop1:stm 0f9h,ar4 ;ar4赋值0f9h,十进制为249dloop2:banz loop2,*ar4- ;若不为0,ar4减1banz loop1,*ar3- ;若不为0,ar3减1,共进行10000*250次跳转retnopnop.end实验操作:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF 灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁。

实验二:资料存储实验本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA 的数值,然后读出,并存储到0X1008开始的8个地址空间。

在CCS 中可以观察DATA内存空间地址0X1000~0X100F值的变化。

代码(含注释):.mmregs.global _main_main:;store data ;存储数据stm 1000h,ar1 ;将立即数1000h送入辅助寄存器ar1 (内存地址) rpt #07h ;循环执行下一条指令,8次st 0aaaah,*ar1+ ;将立即数0xaaaah赋给辅助寄存器ar1的1000h地址内,;之后ar1的地址加1,8次;ar1的地址变1008,内存0x1000-- ox1007中的数据均为0xaaaah;read data then re-store ;读入数据重新存储stm 7h,ar3 ;令辅助寄存器ar3的初值为07hstm 1000h,ar1 ;重新将立即数1000h送入辅助寄存器ar1stm 1008h,ar2 ;将立即数1008h送入辅助寄存器ar2loop: ;进入循环ld *ar1+,t ;将辅助寄存器ar1的值0xaaaah存入T寄存器中,且ar1的地址加1 st t,*ar2+ ;将T寄存器内容0xaaaah存入辅助寄存器ar2 ,并且ar2的地址加1 banz l oop,*ar3- ;寄存器ar3的值不为0时,执行循环loop,ar3的地址值减1直至为0时退出循环here:b here.end ;结束(地址0x1000-- 0x100F,程序完成对16个内存单元赋值)实验操作:1.用“View”下拉菜单中的“Memory”查看内存单元;2.输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;3.查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;4.单击“Halt”暂停程序运行;5.查看0x1000H~0x100FH单元内数值的变化;6.关闭各窗口,本实验完毕。

北邮-DSP数字信号处理 实验-实验报告

北邮-DSP数字信号处理 实验-实验报告

北京邮电大学电子工程学院电子实验中心<数字信号处理实验>实验报告班级: xxx学院: xxx实验室: xxx 审阅教师:姓名(班内序号): xxx 学号: xxx 实验时间: xxx评定成绩:目录一、常规实验 (3)实验一常用指令实验 (3)1.试验现象 (3)2.程序代码 (3)3.工作原理 (3)实验二数据储存实验 (4)1.试验现象 (4)2.程序代码 (4)3.工作原理 (4)实验三I/O实验 (5)1.试验现象 (5)2.程序代码 (5)3.工作原理 (5)实验四定时器实验 (5)1.试验现象 (5)2.程序代码 (6)3.工作原理 (9)实验五INT2中断实验 (9)1.试验现象 (9)2.程序代码 (9)3.工作原理 (13)实验六A/D转换实验 (13)1.试验现象 (13)2.程序代码 (14)3.工作原理 (18)实验七D/A转换实验 (19)1.试验现象 (19)2.程序代码 (19)3.工作原理 (37)二、算法实验 (38)实验一快速傅里叶变换(FFT)算法实验 (38)1.试验现象 (38)2.程序代码 (38)3.工作原理 (42)实验二有限冲击响应滤波器(FIR)算法实验 (42)1.试验现象 (42)2.程序代码 (42)3.工作原理 (49)实验三无限冲击响应滤波器(IIR)算法实验 (49)1.试验现象 (49)2.程序代码 (49)3.工作原理 (56)作业设计高通滤波器 (56)1.设计思路 (56)2.程序代码 (57)3.试验现象 (64)一、常规实验实验一常用指令实验1.试验现象可以观察到实验箱CPLD右上方的D3按一定频率闪烁。

2.程序代码.mmregs.global _main_main:stm #3000h,spssbx xf ;将XF置1,D3熄灭call delay ;调用延时子程序,延时rsbx xf ;将XF置0,D3点亮call delay ;调用延时子程序,b _main ;程序跳转到"_MAIN"nopnop;延时子程序delay:stm 270fh,ar3 ;将0x270f(9999)存入ar3loop1:stm 0f9h,ar4 ;将0x0f9(249)存入ar4loop2:banz loop2,*ar4- ;*ar4自减1,不为0时跳到loop2的位置banz loop1,*ar3- ;*ar3自减1,不为0时跳到loop1的位置ret ;可选择延迟的返回nopnop.end3.工作原理主程序循环执行:D3熄灭→延时→D3点亮→延时。

DSP实验报告

DSP实验报告

姓名:班级:自动化15 学号:2015实验一数据存储实验一实验目的1。

掌握TMS320F2812程序空间的分配;2。

掌握TMS320F2812数据空间的分配;3。

能够熟练运用TMS320F2812数据空间的指令。

二实验步骤与内容实验步骤1.在进行DSP实验之前,需先连接好仿真器、实验箱及计算机,连接方法如下所示:2.F2812CPU板的JUMP1的1和2脚短接,拨码开关SW1的第二位置ON;其余OFF3.E300底板的开关SW4的第2位置ON,其余位置OFF.其余开关设置为OFF.4.上电复位在硬件安装完成后,确认安装正确、各实验部件及电源连接无误后,启动计算机,接通仿真器电源,此时,仿真器上的指示灯应点亮,否则DSP开发系统与计算机连接存在问题。

5.运行CCS程序1)待计算机启动成功后,实验箱220V电源置“ON",实验箱上电2)启动CCS5.5,工作环境的路径选择:E:\E300Program\E300TechV-2812\normal ;6.成功运行CCS5.5程序后,出现如下图所示界面:7.右键点击Project Explorer窗口下的工程文件“e300_01_mem”,选择“Open Project"命令打开该工程,如下图所示,可以双击才看左侧源文件;8.点击菜单栏Project/Build All命令编译整个工程,编译完成后点击按钮进入仿真模式,完全进入后如下图所示:9.用“View"下拉菜单中的“Memory/Browser”查看内存单元,参数设置如下图:注意:下面的参数设置都是以16进制。

此时可以观测到以0x003F9020为起始地址的存储单元内的数据;10.单击按钮,开始运行程序,一段时间后,单击按钮,停止程序运行,0x003F9020H~ 0x3F902FH单元的数据的变化,如下图所示:11.关闭Memory Browser窗口,点击按钮,退出仿真模式。

实验一 DSP指令实验

实验一  DSP指令实验

实验一DSP指令实验实验目的:了解DSP的结构及管脚功能(请参阅TMS320C5000系列原理说明书)掌握DSP的基本指令实验要求:让学生了解怎样连接对DSP进行简单的编程操作,运算控制等基本汇编语言及算术语言实验测试及除错验证。

实验说明:DSP指令实验,主要是对54系列DSP一个基本的了解实验,主要是熟悉54系列的语句、了解54系列DSP的基本框架、了解DSP的特征。

该实验所需硬件主要是TMS320C5402DSP芯片,以及发光二极管等有可观性电路。

实验过程是:让学生了解怎样连接对DSP进行简单的编程操作,运算控制等基本汇编语言及算术语言实验测试及除错验证。

实验步骤:安装CCS的Simulator方式:双击桌面上的Setup CCS C5000 图标,关闭Import Configuration 窗口,在System Configuration中的My System的下面可看到一个类似板卡的图标,如果该图标的名称是“tisim54x”的话,就可直接关闭该窗口,不存盘退出。

如果该图标的名称不是“tisim54x”的话,在该图标上点击右键,选择remove删除该结构,然后在Available Board Types中双击“tisim54x”的图标(如果有的话),弹出Board Properties的对话框点击“next”、“finish”然后关闭Code Composer Setup窗口,存盘退出即可。

如果在Available Board Types中没有“tisim54x”的图标,则在右边框内单击“Install a Device Driver”,在路径“c:\ti\driver\”中打开tisim54x.dvr 文件,在Available Board Types中可看到“tisim54x”的图标,然后按上述操作。

即生成CCS 的Simulator方式。

1、以Simulator方式启动CCS,在[Project]-[Open]菜单中打开ex1.mak;2、在左边树状列表框内双击[Project]展开目录树,双击[ex1.asm]打开源程序文件(或者打开自己编写的程序),参考程序中的注释仔细阅读源程序;3、在[Project]-[Build]菜单中编译项目文件,编译成功后在下端的状态窗口中显示Build Complete,0 Errors,0 Warnings;4、在[File]-[Load Programm]中加载输出执行代码文件ex1.out,此时,反汇编窗口将显示在前端,当前PC指针为0000:0080(黄色高亮显示),指令代码将以汇编语言方式显示,可以在反汇编窗口中点击鼠标右键,在弹出菜单中选择[Properties]-[Dis-Assembly Options]打开反汇编选项对话框,在[Dis-Assembly Style]选项中选择[Algebraic],以算术语言方式显示指令代码(注意:此时可能标号显示异常,按PageUP再按PageDown即可刷新显示);5、选择[View]-[CPU Registers]-[CPU Register](或点击左边工具栏的快捷按钮)打开处理器映射寄存器窗口;6、选择[View]-[Memory](或点击左边工具栏的快捷按钮),在弹出的[Windows Memory Options]对话框的Address文本框中输入0x0200,Page下拉框中选中Data,确定后将打开数据存储器查询窗口,此时数据存储器地址0x0200~0x0203将对应ex1.asm中声明的标号DAT0~DAT3;7、调整[Dis-Assembly][memory][CPU Registers]三个窗口的大小,以便于观察;8、依次把光标移动到反汇编窗口中标号为bk?(?表示从0开始的整数)的标号行下的指令处,选择菜单[Debug]-[Breakpoint](或者点击快捷按钮)设置断点,断点设置后,都将以紫色高亮显示;9、选择[Debug]-[Run](也可以按快捷键F5或点击快捷按钮)执行程序;10、程序将在第一个断点bk0处停止,bk0标号下的指令将以半黄半紫高亮显示,在处理器映射寄存器窗口和数据存储器查询窗口中双击相应操作数的内容,即可进行修改(注意:如步骤6所述,DAT0~DAT3对应地址为0X0200~0X0203),试修改下一条指令操作数的内容,然后按F5执行程序,再在处理器映射寄存器窗口中或数据存储器查询窗口中观察指令执行结果;11、重复执行9、10步骤,依次观察加法指令、减法指令、乘法指令、除法指令、平方指令以及3数累加宏指令的执行结果;12、上指令执行完毕后,程序转到bk0处,可再次进行熟悉运算控制的实验。

dsp实验报告CCS 设置和常用指令

dsp实验报告CCS 设置和常用指令

北京联合大学智慧城市学院实验报告课程名称:DSP 技术与应用实验名称: CCS设置和常用指令班级:通信14姓名学号:2017 年 10 月 21 日实验一 CCS 设置和常用指令一、实验目的熟悉CSS设置方法;会建立汇编语言源文件;会建立工程项目;会将文件加入到工程;会使用汇编、链接命令;会加载、运行程序。

二、实验内容1、编写汇编语言常用的装入和存储指令、算术指令、逻辑指令、程序控制指令50句。

2、使用汇编命令检查所编写的汇编语言源语句格式是否正确,如果有错误则找出并改正,直到没有错误为止。

三、实验设备每组PC 机一台;CCS-DSP 集成开发环境。

四、实验步骤1)CCS 设置及源文件编写、汇编、链接、加载、运行过程1、仿真器驱动的安装2、打开CCS,双击Setup CCS 环境设置3、连接试验箱系统4、建立新工程Project New5、建立新文件,编写源文件、链接命令文件6、加新建的文件到项目7、汇编源、链接文件8、加载、运行程序2)编写常用汇编语言指令装入和存储指令、算术指令、逻辑指令、程序控制指令共计50 句。

使用汇编命令菜单Project-Compile file,检查语句,如果有错误改正之,直到汇编没有错误为止。

五、实验报告1、CCS 工作环境设置过程:要有截图和说明。

新建工程并建立工作区建立ASM文件并保存2、编写的汇编语言语句和程序,要有截图。

3、汇编、链接、运行的结果:要有截图和说明。

4、实验结论通过本次实验,我熟悉了CCS的集成开发环境和运行环境,同时熟悉了CSS设置方法,在编译器里面进行源文件的编写,将文件添加到工程,最后经行加载、运行程序。

今天的这次实验让我对DSP的汇编语言有了更深一步的了解,在编译的过程中,我们组遇到了很多问题,但是最后通过查书和其他组的帮助,将问题一一解决。

及时地完成了任务。

附录:SUBB 1,B;从累加器中减去带借位减操作数DELAY 16;储存器单元延迟ADDC 1000h,A;带进位的加法SUBC 1000h,A;有条件减法SQUR 1000h,A;1000位置的数字的平方加到累加器A中DADD 12,A;双精度12加到累加器AADD 1H,A ; 操作数1加至累加器AADD 2H,2,A ; 操作数2移位后加至累加器AABS A;取绝对值CMPL A;累加器取反EXP A;求累加器中数据的指数MAX A;求累加器A最大值MIN B;求累加器B最小值NORM A;归一化SAT A;累加器饱和运算SUB #30,A;从累加器中减去30ADD #10,B;10加到累加器BMPY #20,A;20和累加器相乘MAC #10,#40,A;10和40相乘放到累加器A中SUB 3,A ;从累加器A中减去操作数3ROR B;累加器B经过进位位循环右移OR #1,B;1和累加器B相或XOR 10,A;10和累加器相异或RETE;开中断,从中断返回RETF;开中断,从中断快速返回ROL A;累加器A经过进位位循环左移SFTC A;累加器A条件移位BITT 1;测试由T寄存器指定的位AND 14,A ;操作数14与累加器A相与AND #1,A;1与累加A相与CMPM 1,#1k;储存单元与长立即数比较BACC A;按累加器规定地址转移PSHD 1;将1压入堆栈CALA A;按累加器的地址调子程序RPT #10;重复执行下调指令11次FRAME 1;堆栈指针偏移一个立即数值LD 31,16,A ;操作数左移16位后加载至累加器。

实验一 DSP的常用指令实验

实验一 DSP的常用指令实验
本DSP实验通过借用计算机资源仿真DSP的内部结构,以学习DSP的基本编程。实验目的主要是熟悉CCS编程环境及TMS320C54xDSP的基本算术运算指令,了解TMS320C5402的存储空间分配WS98以上操作系统和CCS2.0的计算机。实验内容包括使用CCS编程环境进行DSP基本算术运算指令的编程调试,具体步骤涵盖启动CCS、打开项目文件、编译加载程序、设置断点、执行程序并观察记录各类指令如加法、减法、乘法、除法、平方及3数累加宏指令的执行结果。此外,还涉及修改源程序以进行多次熟悉运算控制的实验。通过这一系列操作,实验者能够深入理解和掌握DSP编程的基本原理和实际操作技能。

DSP实验:常用指令及数据存储实验

DSP实验:常用指令及数据存储实验

DSP实验一:常用指令及数据存储实验一、实验目的1、了解DSP开发系统的组成和结构;2、熟悉DSP开发系统的连接;3、熟悉CCS的开发界面;4、熟悉C54X系列的寻址系统;5、熟悉常用C54X系统指令的用法6、掌握TMS320C54的程序空间和数据空间的分配7、熟悉操作TMS320C54数据空间的指令二、实验设备计算机、CCS2.0版软件,DSP仿真器、实验箱。

三、实验系统相关资源1、DSP芯片引脚XF连接LED5,可通过ssbx,rsbx改变XF的值来控制LED52、系统时钟频率为10MHz3、TMS320VC54存储器分配图四、实验步骤1、用仿真机将计算机与数字信号处理实验箱连接好,并依次打开实验箱电源、仿真机电源,然后运行CCS软件。

2、新建一个工程:点击Project-new,输入项目名Exp1, 并将工程文件保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS软件不能识别以中文命名的文件夹。

3、编写源程序:3.1 新建一个源文件File-New-Source File,出现文本编辑窗口3.2 复制以下代码到编辑窗口;File Name:exp01.asm;the program is compiled at no autoinitialization mode.mmregs.global _main;声明_main可被其他模块引用,程序加载到目标板后,;会自动跳转到标号为_main的汇编指令STACK: .usect ".stack",10h.text_main:stm #STACK+10h,sp ;设置堆栈指针STM #0, CLKMD ; (to divider mode before setting) TstStatu1:LDM CLKMD, AAND #01b, A ;poll STATUS bitBC TstStatu1, ANEQSTM #0xF7FF, CLKMD ; set C5402 DSP clock to 10MHz loop:ssbx xf ;将XF置1,熄灭LED5call delay ;调用延时子程序,延时rsbx xf ;将XF置0,点亮LED5call delay ;调用延时子程序,b loop ;程序跳转到"loop";延时子程序delay:stm 270fh,ar3 ; 270fh=9999loop1:stm 0f9h,ar4 ; 0f9h=249loop2:banz loop2,*ar4-banz loop1,*ar3-ret.end注意:(1)源代码的书写有一定的格式,每一行代码分为三个区:标号区、指令区和注释区。

DSP实验54x常用指令实验pp

DSP实验54x常用指令实验pp

实验一C54x常用指令实验一:实验目的1.了解C54x常用的寻址方式2.了解C54x常用的指令3.熟悉C54x汇编程序的编写二:实验原理寻址方式是指指令中操作数的获取方式,熟悉并灵活运用各种寻址方式是学习编写汇编程序的重要环节。

下面简单说明C54x的一些常用寻址方式及其简要说明:1.立即寻址(1)可以对累加器A,B载入立即数。

(2)可以对存储器映射寄存器(MMR: memory-mapped register)载入立即数。

(3)可以对ASM载入立即数,ASM是状态寄存器ST1的(4-0)位。

ASM的取值范围是-16~15。

(4)可以对DP载入立即数,DP是状态寄存器ST0的(8-0)位,作为数据空间直接寻址时的高9位(A15~A7),与指令中包含的低7位地址(A6~A0)结合形成绝对地址。

2.直接寻址方式采用直接寻址方式时,应当注意:当CPL=0时,绝对地址=DP(9)+Offset(7);当CPL=0时,绝对地址=SP(16)+Offset(7);3.间接寻址这种寻址方式利用辅助寄存器ARx(x=0,1,2,3,4,5,6,7)对数据寄存器空间进行访问。

数据空间的地址被存储在ARx当中,ARx加星号(*)前缀表示的是ARx地址所指向的存储器单元。

而且保存在ARx中的地址在存储单元访问前/后可以进行修改,如下所示。

45.绝对寻址:说明(略)6.存储器映像寄存器寻址:说明(略)7.堆栈寻址:说明(略)在本实验中,学生通过自行编写一些程序来了解和熟悉C54x的一些常用指令和数据寻址方式,关于C54x的指令和数据寻址方式的详细介绍,请参考课程讲稿以及T1公司相应的文档。

三:实验内容及步骤1.创建一个新工程创建一个新工程的步骤如下:(1)CCS运行环境设置参考实验一。

(3)运行CCS,在Project菜单中选择New命令,弹出如图1.1所示的ProjectCreation对话框。

设CCS 安装在D:\ti目录下,在Project栏中输入需要创建的工程名字:qinhua1其默认名为*.pjt。

DSP实验程序代码

DSP实验程序代码

基本D 触发器module DFF(Q,D,CLK);output Q;input D,CLK;reg Q;always @(posedge CLK)beginQ <= D;endendmodule带异步清0、异步置1 的D 触发器module DFF1(q,qn,d,clk,set,reset);input d,clk,set,reset;output q,qn;reg q,qn;always @(posedge clk or negedge set or negedge reset) beginif (!reset) beginq <= 0; //异步清0,低电平有效qn <= 1;endelse if (!set) beginq <= 1; //异步置1,低电平有效qn <= 0;endelse beginq <= d;qn <= ~d;endendendmodule带同步清0、同步置1 的D 触发器module DFF2(q,qn,d,clk,set,reset);input d,clk,set,reset;output q,qn;reg q,qn;always @(posedge clk)beginif (reset) beginq <= 0; qn <= 1; //同步清0,高电平有效endelse if (set) beginq <=1; qn <=0; //同步置1,高电平有效endelse beginq <= d; qn <= ~d;endendendmodule带异步清0、异步置1 的JK触发器module JK_FF(CLK,J,K,Q,RS,SET);input CLK,J,K,SET,RS;output Q;reg Q;always @(posedge CLK or negedge RS or negedge SET) beginif(!RS) Q <= 1'b0;else if(!SET) Q <= 1'b1;else case({J,K})2'b00 : Q <= Q;2'b01 : Q <= 1'b0;2'b10 : Q <= 1'b1;2'b11 : Q <= ~Q;default: Q<= 1'bx;endcaseendendmodule8-3 优先编码器module encoder8_3(none_on,outcode,a,b,c,d,e,f,g,h); output none_on;output[2:0] outcode;input a,b,c,d,e,f,g,h;reg[3:0] outtemp;assign {none_on,outcode}=outtemp;always @(a or b or c or d or e or f or g or h)beginif(h) outtemp=4'b0111;else if(g) outtemp=4'b0110;else if(f) outtemp=4'b0101;else if(e) outtemp=4'b0100;else if(d) outtemp=4'b0011;else if(c) outtemp=4'b0010;else if(b) outtemp=4'b0001;else if(a) outtemp=4'b0000;else outtemp=4'b1000;endendmodule【例9.8】用函数定义的8-3 优先编码器module code_83(din, dout);input[7:0] din;output[2:0] dout;function[2:0] code; //函数定义input[7:0] din; //函数只有输入端口,输出为函数名本身if (din[7]) code = 3'd7;else if (din[6]) code = 3'd6;else if (din[5]) code = 3'd5;else if (din[4]) code = 3'd4;else if (din[3]) code = 3'd3;else if (din[2]) code = 3'd2;else if (din[1]) code = 3'd1;else code = 3'd0;endfunctionassign dout = code(din); //函数调用endmodule3-8 译码器module decoder_38(out,in);output[7:0] out;input[2:0] in;reg[7:0] out;always @(in)begincase(in)3'd0: out=8'b11111110;3'd1: out=8'b11111101;3'd2: out=8'b11111011;3'd3: out=8'b11110111;3'd4: out=8'b11101111;3'd5: out=8'b11011111;3'd6: out=8'b10111111;3'd7: out=8'b01111111;endcaseendendmodule七段数码管译码器module decode47(a,b,c,d,e,f,g,D3,D2,D1,D0);output a,b,c,d,e,f,g;input D3,D2,D1,D0; //输入的4位BCD码reg a,b,c,d,e,f,g;always @(D3 or D2 or D1 or D0)begincase({D3,D2,D1,D0}) //用case语句进行译码4'd0: {a,b,c,d,e,f,g}=7'b1111110;4'd1: {a,b,c,d,e,f,g}=7'b0110000;4'd2: {a,b,c,d,e,f,g}=7'b1101101;4'd3: {a,b,c,d,e,f,g}=7'b1111001;4'd4: {a,b,c,d,e,f,g}=7'b0110011;4'd5: {a,b,c,d,e,f,g}=7'b1011011;4'd6: {a,b,c,d,e,f,g}=7'b1011111;4'd7: {a,b,c,d,e,f,g}=7'b1110000;4'd8: {a,b,c,d,e,f,g}=7'b1111111;4'd9: {a,b,c,d,e,f,g}=7'b1111011;default: {a,b,c,d,e,f,g}=7'bx;endcaseendendmodule用case语句描述的 4 选1 MUXmodule mux_case(out,in0,in1,in2,in3,sel);output out;input in0,in1,in2,in3;input[1:0] sel;reg out;always @(in0 or in1 or in2 or in3 or sel)begincase(sel)2'b00: out=in0;2'b01: out=in1;2'b10: out=in2;default: out=in3;endcaseendendmodule用if-else语句描述的 4 选 1 MUX module mux_if(out,in0,in1,in2,in3,sel); output out;input in0,in1,in2,in3;input[1:0] sel;reg out;always @(in0 or in1 or in2 or in3 or sel) beginif(sel==2'b00) out=in0;else if(sel==2'b01) out=in1;else if(sel==2'b10) out=in2;else out=in3;endendmodule带置位和复位端的 1 位数据锁存器module latch_2(q,d,clk,set,reset);output q;input d,clk,set,reset;assign q = reset ? 0 : (set ? 1 : (clk ? d : q)); endmodule8 位数据寄存器module reg8(out_data,in_data,clk,clr); output[7:0] out_data;input[7:0] in_data;input clk,clr;reg[7:0] out_data;always @(posedge clk or posedge clr) beginif(clr) out_data <=0;else out_data <=in_data;endendmodule8 位数据锁存器module latch_8(qout,data,clk);output[7:0] qout;input[7:0] data;input clk;reg[7:0] qout;always @(clk or data)beginif (clk) qout<=data;endendmodule8 位移位寄存器module shifter(din,clk,clr,dout);input din,clk,clr;output[7:0] dout;reg[7:0] dout;always @(posedge clk)beginif (clr) dout<= 8'b0; //同步清0,高电平有效elsebegindout <= dout << 1; //输出信号左移一位dout[0] <= din; //输入信号补充到输出信号的最低位endendendmodule4 位串并转换器module serial_pal(clk,reset,en,in,out);input clk,reset,en,in;output[3:0] out;reg[3:0] out;always @(posedge clk)beginif(reset) out<=4'h0;else if(en) out<={out,in}; //使用连接运算符endendmodule8 位全加器module add8(sum,cout,b,a,cin); output[7:0] sum;output cout;input[7:0] a,b;input cin;assign {cout,sum}=a+b+cin; endmodule。

dsp1-6实验指令

dsp1-6实验指令

实验二、CCS操作Cmd文件(实验二、三、四)MEMORY{PAGE 0:VECS: org=0x0080, len=0x80PROM: org=0x1000, len=0x1000 /* 4k words */PAGE 1:STACK: org=0x100, len=0x400 /* 1k words */DARAM: org=0x2000, len=0x1000 /* 4k words */}SECTIONS{ .text :> PROM PAGE 0vectors :> VECS PAGE 0.bss :> DARAM PAGE 1.data :> DARAM PAGE 1}S54文件;An example to show how to write an assembly language source file; y=a1*x1+a2*x2;******************************************************************************STACK_ADDR .set 0x0500 ;设置堆栈底端地址;在变量段分配数据,为未初始化的变量保留空间.bss a,2.bss x,2.bss y,1;在数据段分配数据,存入初始化数据.datatable:.word 10,5 ;初始化a1=10,a2=5.word 8,6 ;初始化x1=8,x2=6.mmregs ;开启系统默认的寄存器.global main ;定义全局符号;------------------------------------------------------------------------------.text ;开始编写程序main:stm #STACK_ADDR, SP ;设置堆栈stm #0x00a8, PMSTstm #0x0000, SWWSR;================================================stm #a, AR2 ;设置AR1 指向 astm #table, AR3 ;设置AR3指向tablerpt #1mvdd *AR3+, *AR2+ ;循环一次,将0x000A和0x0005存放在地址0x2000 stm #x, AR2 ;设置AR2指向xrpt #1mvdd *AR3+, *AR2+ ;将地址0x2005低16位的0x0008和0x0006存放到地址为0x2002的存储器空间call SUM ;执行sum模块的功能;死循环,使PC在当程序结束时锁定在一个已知的区域dead_loop:nopnopnopb dead_loop;================================================; y=a1*x1+a2*x2SUM:stm #a, AR3 ;设置AR3指向astm #x, AR4 ;设置AR4指向xrptz A, #1 ;清零寄存器A,并设置将下条乘加指令循环一次mac *AR3+, *AR4+, A ;完成a1*x1+a2*x2,最终的结果存放在A中stl A, *(y) ;将寄存器A的底16位存放在地址0x2004ret;------------------------------------------------------------------------------.sect "vectors" ;定义初始化了的带名称的段int_RESET:b main ;当有复位中断时,跳转至mainnopnop.space 124*16 ;若没有其他的中断,保留空间初始化时将A与X互换位置实验三:使用者如果希望修改其功能,可以直接编写gel文件,保存并重新装载。

DSP实验报告 基本指令操作

DSP实验报告 基本指令操作

实验二基本指令操作周二第三大节一实验目的(1)了解DSP数据表示格式(2)了解DSP汇编语言的编写格式(3)了解DSP配置文件的编写(4)了解DSP汇编与C混合编写的方法二实验内容1、css下的汇编语言实现2、css下的C语言与汇编语言混合编程三、实验过程例1 用汇编语言实现乘积累加的运算,y=∑(Ai*Xi)把data段的40个数据移动到bss段的a和x中,每个分别存放20个数据,然后分别取出a和x中位置相对应的一些数据,用块循环的方法完成数据的乘积和累加的运算。

最后结果保存在y中。

.title "asm.asm".mmregs.bss a,20.bss x,20.bss y,2STACK .usect "STACK",30.datatable: .word 1,2,3,4,5,6,7,8,9,10,11,12.word 13,14,15,16,17,18,19,20.word 1,2,3,4,5,26,27,28,29,30.word 1,2,3,4,5,6,7,8,9,10.def start.textstart: STM #a,AR1RPT #39MVPD table,*AR1+LD #0,BSTM #a,AR2STM #x,AR3STM #y,ar5STM #4,BRCRPTB done-1LD *AR2+,TMPY *AR3+,AADD A,Bdone: STH B,*ar5+STL B,*ar5end: b end.end相应的配置文件为:-e startMEMORY{PAGE 0:EPROM: org=0100H,len=1000H PAGE 1:SRAM org=02000H,len=1000H }SECTIONS{.text :> EPROM PAGE 0.data :> EPROM PAGE 0.bss :> SRAM PAGE 1.STACK :> SRAM PAGE 1}运行后,Memory下的结果例2 汇编程序和C程序混合编程的方法在一个工程中分别包含汇编源程序和C源程序,实现相互之间函数和变量的调用。

dsp 基本算数运算

dsp 基本算数运算

实验一:基本算数运算1 、实验目的和要求加、减、乘、除是数字信号处理中最基本的算术运算。

本实验学习使用定点DSP 实现16 位定点加、减、乘、除运算的基本方法和编程技巧。

本实验的演示文件为exer1.out。

2 、实验原理1) 定点DSP 中的数据表示方法在DSP 中一个16 进制的数可以表示不同的十进制数,或者是整数,或者是小数(如果表示小数,必定小于1),但仅仅是在做整数乘除或小数乘除时,系统对它们的处理才是有所区别的,而在加减运算时,系统都当成整数来处理。

2) 实现16 位定点加法在本实验中,我们使用下列代码来说明加法运算:ld temp1,a ;将变量temp1 装入寄存器Aadd temp2,a ;将变量temp2 与寄存器A 相加,结果放入A 中stl a,add_result ;将结果(低16 位)存入变量add_result 中。

注意,这里完成计算temp3=temp1+temp2,我们没有特意考虑temp1 和temp2 是整数还是小数,在加法和下面的减法中整数运算和定点的小数运算都是一样的。

3) 实现16 位定点减法在本实验中,我们使用下列代码来说明减法运算:stm #temp1,ar3 ;将变量temp1 的地址装入ar3 寄存器stm #temp3,ar2 ;将变量temp3 的地址装入ar2 寄存器sub *ar2+, *ar3,b ;将变量temp3 左移16 位同时变量temp1 也左移16 位,然后;相减,结果放入寄存器B(高16 位)中,同时ar2 加1。

sth b,sub_result ;将相减的结果(高16 位)存入变量sub_result。

4) 实现16 位定点整数乘法在本实验中,我们使用下列代码来说明整数乘法运算:rsbx FRCT ;清FRCT 标志,准备整数乘ld temp1,T ;将变量temp1 装入T 寄存器mpy temp2,a ;完成temp2*temp1,结果放入A 寄存器(32 位)例如,当temp1=1234H(十进制的4660),temp2=9876H(十进制的-26506),乘法的结果在A 寄存器中为0F8A343F8H(十进制的-123517960)。

dsp实验报告

dsp实验报告

dsp实验报告实验一:CCS入门实验实验目的:1. 熟悉CCS集成开发环境,掌握工程的生成方法;熟悉SEED-DEC643实验环境; 掌握CCS集成开发环境的调试方法。

2.学习用标准C 语言编写程序;了解TI CCS开发平台下的C 语言程序设计方法和步骤; 熟悉使用软件仿真方式调试程序。

3. 学习用汇编语言编写程序; 了解汇编语言与 C 语言程序的区别和在设置上的不同;了解TMS320C6000 汇编语言程序结果和一些简单的汇编语句用法学习在CCS 环境中调试汇编代码。

4. 在了解纯C 语言程序工程和汇编语言程序工程结构的基础上,学习在C 工程中加入汇编编程的混合编程方法; 了解混合编程的注意事项;理解混合编程的必要性和在什么情况下要采用混合编程5. 熟悉CCS集成开发环境,掌握工程的生成方法; 熟悉SEED-DEC643实验环境;掌握CCS集成开发环境的调试方法。

实验原理:CCS 提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。

CCS 提供了基本的代码生成工具,它们具有一系列的调试、分析能力序。

使用此命令后,要重新装载.out 文件后,再执行程序。

使用 CCS常遇见文件简介1. program.c: C 程序源文件;2. program.asm: 汇编程序源文件;3. filename.h: C 程序的头文件,包含DSP/BIOS API模块的头文件;4. filename.lib: 库文件;5. project.cmd: 连接命令文件;6. program.obj: 由源文件编译或汇编而得的目标文件;7. program.out: 经完整的编译、汇编以及连接后生成可执行文件; 8. program.map: 经完整的编译、汇编以及连接后生成空间分配文件; 9.project.wks: 存储环境设置信息的工作区文件。

P.S(CMD文件中常用的程序段名与含义1. .cinit 存放C程序中的变量初值和常量;2. .const 存放C程序中的字符常量、浮点常量和用const声明的常量;3. .text 存放C程序的代码;4. .bss 为C 程序中的全局和静态变量保留存储空间;5. .far 为C 程序中用far声明的全局和静态变量保留空间;6. .stack 为 C 程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;7. .sysmem 用于 C 程序中malloc、calloc 和 realloc 函数动态分配存储空间。

基于TMS320C5402的DSP指令实验和交通灯设计

基于TMS320C5402的DSP指令实验和交通灯设计

目录1、概述 (1)1.1、DSP(digital signal processing)芯片概述 (1)1.2、TMS320C54X概述 (2)1.3、32位乘法器概述 (3)2、实验一:DSP指令实验 (4)2.1、实验目的 (4)2.2、实验要求 (4)2.3、实验步骤 (4)2.4、实验源程序 (5)2.5、实验结果 (7)3、实验三、存储器实验 (9)3.1、实验目的 (9)3.2、实验要求 (9)3.3、实验步骤 (9)3.4、实验源程序 (10)3.5、实验结果 (13)4、实验四:交通灯控制 (17)4.1、实验内容 (17)4.2、实验源程序 (17)4.3、实验结果 (21)5、设计小结 (22)1、概述1.1、DSP(digital signal processing)芯片概述DSP数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。

20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。

数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。

在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。

德州仪器、Freescale等半导体厂商在这一领域拥有很强的实力。

DSP微处理器DSP(digital signal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。

其工作原理是接收模拟信号,转换为0或1的数字信号,再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。

它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。

它的强大数据处理能力和高运行速度,是最值得称道的两大特色。

DSP实验报告参考

DSP实验报告参考

以下仅供参考实验原理和步骤你们自己写,我只写了问题分析和讨论。

实验一CCS5000软件及使用实验问题分析与讨论在运行CCS C5000应用软件前,一定要先通过Setup CCS C5000做好相应的运行环境的软件和硬件驱动程序的配置。

通过这次实验,熟悉了软件仿真的基本步骤,掌握了:检查、修改CPU寄存器和存储单元的内容,断点的设置、检查和撤销,用观察窗口检查变量等程序调试的基本方法。

实验二常用指令实验问题分析与讨论实验通过两个循环嵌套语句实现延时,通过调用语句两次调用延时程序实现开发板上和DSP的XF引脚连接的发光二极管闪烁。

实验中可以通过改变AR3或AR4两个辅助寄存器中的数来改变延时的时间来控制发光二极管的闪烁周期。

通过实验熟悉了分支转移和调用语句的使用。

实验三基本算术运算实验问题分析与讨论实验程序实现了两个浮点数相加及产生正弦信号的功能。

通过菜单view-→watch window可以查看变量X0,Y0,Z0和数组sin_value[ ]的值。

如果要在内存中查看,通过菜单view→memory,输入地址时对于变量要加取地址符号&,而数组就用数组名(数组名就表示地址)。

可以通过view→graphic菜单将内存从sin_value地址开始的100个正弦信号的数据显示出来。

C语言定点乘法模拟运算程序如下:int x,y,z;long temp;temp = (long)x;z = (temp×y) >> (Qx+Qy-Qz);C语言定点除法模拟运算程序如下:int x,y,z;long temp;temp = (long)x;z = (temp<<(Qz-Qx+Qy))/y;实验四DSP中断实验问题分析与讨论实验程序实现了定时器每发生200次中断才能使XF引脚的电平改变一次,也就是实验板上的发光二极管闪烁一次。

中断前IFR寄存器的内容为0x0000,中断后为0x0080。

dsp实验全部程序

dsp实验全部程序

dsp实验全部程序实验1_常用指令实验; 文件名:exp01。

asm;延时子程序delay:stm270fh,ar3loop1:stm0f9h,ar4loop2:banzloop2,*ar4-banzloop1,*ar3-retnopnop.end实验2_u数据存储*filename:exp02.asm; GetSomeKnowledgeOfcMDFile;storedatastm1000h,ar1;addressofinternalmemoryrpt#07hst0bbbbh,*ar1+;将数据\存放到以地址1000h~1007h的八个存储单元中.;readdatathenre-storestm7h,ar3stm1000h,ar1stm1008h,ar2循环:;按1000h~1007h到1008h~100F的八个单位循环复制数据;八个存储单元ld*ar1+,tstt,*ar2+banzloop,*ar3-.end实验3_uIO实验;filename:exp03.asm; 学习如何操作I/O端口;获得一些关于旅行的知识。

libfile;在i/ospace0x8000=>8个交换机中;0x8001=>8LED。

嗯。

全球主要城市。

主要文本:stm3100h、spstm1000h、ar1端口8000H、*ar1;读取I/o8000h数据,并将其存储在10000HNOP的数据空间中;NOP是一个空操作,具有延迟nopportw*AR18001H的功能;将数据空间中1000小时机组的数据写入I/O8000HNOPNOB_uuu_u2;main;程序跳转到\execute nopnop.end实验4定时器实验.mmregs.global_initial_initial:nopld#0,dp;resetdatapointerstm#0,clkmd;soft waresettingofdspclockstm#0,clkmd;(todividermodebeforesetting)tststatu1:ldmclkmd,aand#01b,a;pollstatusbitbctststatu1,aneqstm#0xf7ff,clkmd;setc5402dspclockto10mh zstm0x3fa0,pmst;vectorsat3f80hstm300h,ar1;initial300hdataaddressst#00h,*ar1ssb x1,11;setst1.intm=1,stopallinterrruptstm0ffffh,ifr;clearallinterruptindicatestm00h,imr;setimr=0,STOPALLINTERRUPTSTM410H,tcr;珠江三角洲stoptimerstm4e1fh;setprd=4e1fhstm420h,tcr;starttimerstm08h,imr;allowtimerinterruptrsbx1,11;设置1。

dsp实验程序

dsp实验程序

dsp实验程序外部中断#include "2407c.h"ioport unsigned int port8000;ioport unsigned int port8005;ioport unsigned int port8007;void interrupt xint(void);/* 中断服务程序,外部中断调用*/unsigned int uWork,nCount;int * pf;main(){int i;*WDCR=0x6f;*WDKEY=0x5555;*WDKEY=0xaaaa; /* 关闭看门狗中断*/*SCSR1=0x81fe; /* 设置DSP运行频率40m */(*MCRB)=0;asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰*/uWork=(*MCRC); /* 将PWM12/IOPE6设置成通用I/O口,以控制实验箱上指示灯*/uWork&=0x0ffbf;(*MCRC)=uWork;*IMR=0x1; /* 使能中断(INT1) */*IFR=0xffff; /* 清除中断标志*/*XINT2CR=0x1; //使能外部中断2port8000=0; // 初始化ICETEK-CTRport8000=0x80;port8000=0;port8000=0x82;port8007=0; // 关闭东西方向的交通灯port8007=0x40; // 关闭南北方向的交通灯port8007=0xc8;//使能键盘外中断asm(" clrc INTM"); /* 开中断*/for(;;);}// 中断服务程序:响应INT2中断void interrupt xint(void) /* 中断服务程序定义,须使用interrupt声*/ {uWork=(*PIVR); /* 读外设中断向量寄存器*/switch(uWork){case 0x11:{*XINT2CR=0x8001;//清除中断标志位uWork=(*PEDA TDIR); /* 设置指示灯状态翻转一次*/uWork|=0x4000;uWork^=0x0040;(*PEDA TDIR)=uWork;break;}}}I\O管脚应用#include "2407c.h"ioport unsigned int port8000;ioport unsigned int port8005;ioport unsigned int port8001;ioport unsigned int port8002;ioport unsigned int port8003;ioport unsigned int port8004;ioport unsigned int port8007;#define CTRGR port8000#define CTRLCDCMDR port8001#define CTRKEY port8001#define CTRLCDCR port8002#define CTRCLKEY port8002#define CTRLCDLCR port8003#define CTRLCDRCR port8004#define CTRLA port8005#define CTRLR port8007void Delay(int nDelay); /* 延时子程序*/main(){unsigned int uWork;*WDCR=0x6f;*WDKEY=0x5555;*WDKEY=0xaaaa; /* 关闭看门狗*/*SCSR1=0x0202; /* DSP运行频率40m */(*MCRB)=0;uWork=(*MCRC); /* 将PWM12/IOPE6设置成通用I/O口*/ uWork&=0x0ffbf;(*MCRC)=uWork;CTRGR=0; // 初始化ICETEK-CTRCTRGR=0x80;CTRGR=0;CTRLR=0; // 关闭东西方向的交通灯CTRLR=0x40; // 关闭南北方向的交通灯CTRGR=2;while ( 1 ){uWork=(*PEDATDIR); /* PWM12/IOPE6的控制寄存器*/uWork|=0x4000; /* 输出*/uWork^=0x0040; /* 输出状态*/(*PEDATDIR)=uWork;Delay(256); /* 延时片刻*/}}void Delay(int nDelay){int i,j;unsigned int k;for ( i=0;i<="" p="">for ( j=0;j<64;j++ )k++;}定时器#include "2407c.h"#define T1MS 0x9c3f /* 9c3fH=40000-1 */ioport unsigned int port8000;ioport unsigned int port8005;ioport unsigned int port8007;void interrupt gptime1(void); /* 中断服务程序,定时器计数T1MS次时中断调用*/void gp_init(void); /* 定时器初始化*/unsigned int uWork,nCount;int * pf;main(){int i;*WDCR=0x6f;*WDKEY=0x5555;*WDKEY=0xaaaa; /* 关闭看门狗中断*/*SCSR1=0x81fe; /* 设置DSP运行频率40m */(*MCRB)=0;asm(" setc INTM"); /* 关中断,进行关键设置时不允许发生中断,以免干扰*/uWork=(*MCRC); /* 将PWM12/IOPE6设置成通用I/O口,以控制实验箱上指示灯*/uWork&=0x0ffbf;(*MCRC)=uWork;gp_init(); /* 设置定时器*/*IMR=0x2; /* 使能定时器中断(INT2) */*IFR=0xffff; /* 清除中断标志*/port8000=0; // 初始化ICETEK-CTRport8000=0x80;port8000=0;port8000=0x82;port8007=0; // 关闭东西方向的交通灯port8007=0x40; // 关闭南北方向的交通灯asm(" clrc INTM"); /* 开中断*/for(;;);}// 中断服务程序:响应INT2中断void interrupt gptime1(void) /* 中断服务程序定义,须使用interrupt声*/ {uWork=(*PIVR); /* 读外设中断向量寄存器*/switch(uWork){case 0x27: /* T1PINT,0x27为定时器1的周期中断的向量值*/ {(*EV AIFRA)=0x80; /* 清除中断标志T1PINT */nCount++;if ( nCount>=500 ) /* 计数500此=500ms=0.5秒*/{uWork=(*PEDA TDIR); /* 设置指示灯状态翻转一次*/uWork|=0x4000;uWork^=0x0040;(*PEDA TDIR)=uWork;nCount=0;}break;}}}void gp_init(void){*EVAIMRA = 0x80; /* 使能T1PINT即通用定时器1周期中断*/ *EVAIFRA = 0xffff; /* 清除中断标志*/*GPTCONA = 0x0000;*T1PR = T1MS; /* 周期寄存器=40000 */*T1CNT = 0; /* 计数初值=0 */*T1CON = 0x1040; /* 启动计数器*/}pwm#include "regs240x.h"main(){unsigned int uWork;asm(" setc INTM"); /* 关中断*/asm(" setc SXM"); /* 符号位扩展有效*/asm(" clrc OVM"); /* 累加器中结果正常溢出*/asm(" clrc CNF"); /* B0被配置为数据存储空间*/WDCR=0x6f;WDKEY=0x5555;WDKEY=0xaaaa; /* 关闭看门狗中断*/SCSR1=0x81fe; /* DSP工作在40MHz */IMR=0; /* 屏蔽所有可屏蔽中断*/IFR=0x0ffff; /* 清除中断标志*/uWork=WSGR; /* I/O引脚0等待*/uWork&=0x0fe3f;WSGR=uWork;MCRA=MCRA|0x0fc0; /* IOPA6-7被配置为基本功能方式,PWM1-2 */ACTRA=0x0666; /* PWM2低有效,PWM1高有效*/DBTCONA=0x00; /* 不使能死区控制*/CMPR1=0x1000; /* 比较单元1设置*/CMPR2=0x3000; /* 比较单元2设置*/CMPR3=0x5000;T1PER=0x6000; /* 设置定时器1的周期寄存器,以确定不同的输出占空比*/ COMCONA=0x8200; /* 使能比较操作*/T1CON=0x1000; /* 定时器1为连续增计数模式*/T1CON=T1CON|0x0040; /* 启动定时器1 */while ( 1 ){}}A D#include "2407c.h"#define ADCNUMBER 256void interrupt gptime1(void); /* 中断服务程序,用于设置保存标志*/void ADInit(void); /* 初始化A/D转换模块和通用定时器1 */ioport unsigned char port000c; /* I/O端口用于设置ICETEK-2407-A板上指示灯*/ unsigned int uWork,uWork1,nADCount,nLed,*pResult1,*pResult2;int nNewConvert,nWork;unsigned int nADCIn0[ADCNUMBER]; /* 存储区1,保存通道ADCIN0的转换结果,循环保存*/unsigned int nADCIn1[ADCNUMBER]; /* 存储区2,保存通道ADCIN1的转换结果,循环保存*/main(){asm(" CLRC SXM"); /* 清标志,关中断*/asm(" CLRC OVM");asm(" CLRC CNF");pResult1=RESULT0;pResult2=RESULT1;nNewConvert=0;*WDCR=0x6f;*WDKEY=0x5555;*WDKEY=0xaaaa; /* 关闭看门狗中断*/*SCSR1=0x81fe; /* 打开所有外设,设置时钟频率为40MHz */ uWork=(*WSGR); /* 设置I/O等待状态为0 */uWork&=0x0fe3f;(*WSGR)=uWork;ADInit(); /* 初始化A/D相关设备*/*IMR=2; /* 使能定时器中断*/*IFR=0xffff; /* 清所有中断标志*/asm(" clrc INTM"); /* 开中断*/while ( 1 ){if ( nNewConvert ) /* 如果保存标志置位,以下开始转换和保存转换结果*/{nNewConvert=0; /* 清保存标志*/uWork=(*pResult1); /* 取ADCINT0通道转换结果*/uWork>>=6; /* 移位去掉低6位*/nADCIn0[nADCount]=uWork;/* 保存结果*/uWork=(*pResult2); /* 取ADCINT1通道转换结果*/uWork>>=6; /* 移位去掉低6位*/nADCIn1[nADCount]=uWork;/* 保存结果*/nADCount++;if ( nADCount>=ADCNUMBER ) /* 缓冲区满后设置指示灯闪烁*/{nADCount=0; /* 中断位置*/nWork++;if ( nWork>=16 ){nWork=0;nLed++; nLed&=0x0f;port000c=nLed;}}}}}void ADInit(void) /* 初始化设置*/{int i;for ( i=0;i<="" p="" 缓冲区清0="">nADCIn0[i]=nADCIn1[i]=0;port000c=0; /* 关指示灯*/*ADCTRL1= 0x2f40; /* 设置连续转换模式*/*MAXCONV = 0x1; /* 每次完成转换两个通道*/*CHSELSEQ1=0xc4; /* 转换次序,先ADCIN4,再ADCIN11 */ *ADCTRL2= 0x2000; /* 启动转换*/nADCount=nLed=nWork=0;;/* 以下设置通用定时器参数*/*EVAIMRA = 0x80; /* 使能T1PINT */*EVAIFRA = 0xffff; /* 清中断标志*/*GPTCONA = 0x0100;*T1PR = 2000; /* 保存结果周期=2000*25ns=50us=20KHz */ *T1CNT = 0; /* 计数器从0开始计数*/*T1CON = 0x1040; /* 连续增计数方式,启动计数器*/}void interrupt gptime1(void){uWork1=(*PIVR);switch ( uWork1 ){case 0x27:{nNewConvert=1; /* 设置保存标志*/(*EV AIFRA)=0x80;/* 清中断标志位*/break;}} }。

实验一 DSP的常用指令实验

实验一 DSP的常用指令实验
3、在[Project]-[Build]菜单中编译项目文件,编译成功后在下端的状态窗口中显示Build Complete,0 Errors,0 Warnings;
4、在[File]-[Load Programm]中加载输出执行代码文件ex1.out,选择[View]-[ [Disassembly ]。此时,反汇编(Disassembly)窗口将显示在前端,当前PC指针为0000:2080(黄色箭头指示),指令代码将以汇编语言方式显示,可以在反汇编窗口中点击鼠标右键,在弹出菜单中选择[Properties]-[Disassembly Options]打开反汇编选项对话框,在[Disassembly Style]选项中选择[Algebraic],以算术语言方式显示指令代码(注意:此时可能标号显示异常,按PageUP再按PageDown即可刷新显示);
11、重复执行9步骤,依次观察并记录加法指令(结果: A)、减法指令(结果: A)、乘法指令(结果:A)、除法指令(结果: DAT2:商; DAT3:余数)、平方指令(结果:A)以及3数累加宏指令(结果:DAT3)的执行结果;
12、以上指令执行完毕后,程序转到bk0处,可再次进行熟悉运算控制的实验。
7、调整[Disassembly][memory][CPU Registers]三个窗口的大小,以便于观察;
8、依次把光标移动到反汇编(Disassembly)窗口中标号为bk?(?表示从0开始的整数)的标号行下的指令处,点击鼠标右键,在弹出菜单选择 [Toggle breakpoint](或者点击快捷按钮)设置断点,断点设置后,该行前显示红色圆点;
2、了解TMS320C5402的存储空间分配。
3、进行DSP的基本编程调试。
二、实验原理:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9、 选择[Debug]-[Run](也可以按快捷键F5或点击快捷按钮)执行程序;
10、 程序将在第一个断点bk0处停止,在处理器映射寄存器窗口和数据存储器查询窗口中双
击相应操作数的内容,即可进行修改(注意:如步骤6所述,DAT0~DAT对应地址为0X0260~0X0263,试修改下一条指令操作数的内容, 然后按F10单步执行程序,再在处理器 映射寄存器窗口中或数据存储器查询窗口中观察指令执行结果;
5、 选择[View]-[CPU Registers]-[CPU Register](或点击左边工具栏的快捷按钮)打开处 理器映射寄存器窗口;
6、 选择[View]-[Memory](或点击左边工具栏的快捷按钮),在弹出的[Windows Memory
Options]对话框的Address文本框中输入0x0260,Page下拉框中选中Data,确定后将打开 数据存储器查询窗口,此时数据存储器地址0x0260~0x0263将对应exl.asm中声明的标号
11、 重复执行9步骤,依次观察并记录加法指令(结果:A)、减法指令(结果:A)、乘法指 令(结果:A)、除法指令(结果:DAT2商;DAT3余数)、平方指令(结果:A)以及3数累加 宏指令(结果:DAT3)的执行结果;
12、 以上指令执行完毕后,程序转到bk0处,可再次进行熟悉运算控制的实验。
13、 修改[ex1.asm],使DAT0组号(ST#组号,DAT0),重复上述操作,记录加法指令、减
3、 在[Project]-[Build]菜单中编译项目文件,编译成功后在下端的状态窗口中显示Build
Complete,。Errors,0 Warnings;
4、 在[File]-[Load Programm]中加载输出执行代码文件exl.out,选择
[View]-[ [Disassembly ]。此时,反汇编(Disassembly)窗口将显示在前端,当前PC指针
编号


西华大学实验报告(理工类)
电气信息学院专业实验中心实验室:6A-222实验时间:2014年6月10日
学生姓名
学号
成 绩
学生所在学院
年级/专业/班
课程ቤተ መጻሕፍቲ ባይዱ称
DSP技术及应用
课程代码
实验项目名称
DSP的常用指令实验
项目代码
1
指导教师
李天倩
项目学分
一、 实验目的:
1、 熟悉CCS编程环境及TMS320C54XDSP基本算术运算指令。
DAT0~DAT3
7、 调整[Disassembly][memory][CPU Registers]三个窗口的大小,以便于观察;
&依次把光标移动到反汇编(Disassembly)窗口中标号为bk?(?表示从0开始的整数)的 标号行下的指令处,点击鼠标右键,在弹出菜单选择[Toggle breakpoint](或者点击快捷 按钮)设置断点,断点设置后,该行前显示红色圆点;
为0000:2080(黄色箭头指示),指令代码将以汇编语言方式显示,可以在反汇编窗口中点 击鼠标右键,在弹出菜单中选择[Properties]-[Disassembly Options]打开反汇编选项对话
框,在[Disassembly Style]选项中选择[Algebraic],以算术语言方式显示指令代码(注意: 此时可能标号显示异常,按PageUP再按PageDowr即可刷新显示);
法指令、乘法指令、除法指令、平方指令以及3数累加宏指令的执行结果。
五、实验过程原始记录(现象记录、数据、图表、计算等):
2、 了解TMS320C540的存储空间分配。
3、 进行DSP的基本编程调试。
二、 实验原理:
借用计算机的资源仿真DSP的内部结构,以学习DSR的基本编程。
二、实验设备、仪器:
安装有WINDOWS以上操作系统和CCS2.0('C5000)的计算机。
四、实验内容(含简略步骤、电路图):
用CCS编程环境进行DSP的基本算术运算指令的编程调试。
1鼠标左键双击桌面“Setup CCS2('C5000)”图标启动CCS Setup,鼠标左键依次单击 “C5402Simulator”,“Import”,“Save and Quit”,“是(Y)”启动CCS在[Project]-[Open]菜单中打开ex1.pjt;
2、 在左边树状列表框内双击[Project]展开目录树,双击[ex1.asm]打开源程序文件,参考 程序中的注释仔细阅读源程序;
相关文档
最新文档