山东轻工业学院.docx
《山东轻工业学院.docx》由会员分享,可在线阅读,更多相关《山东轻工业学院.docx(30页珍藏版)》请在冰点文库上搜索。
![山东轻工业学院.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/dcc9a330-1016-4310-a0d7-39160de4640d/dcc9a330-1016-4310-a0d7-39160de4640d1.gif)
山东轻工业学院
山东轻工业学院
《DSP原理与应用》实验指导书
电子信息与控制工程学院
通信工程教研室
2010年12月
实验一常用指令实验
一、实验目的
1、了解DSP开发系统的组成和结构;
2、熟悉DSP开发系统的连接;
3、熟悉DSP的开发界面;
4、熟悉C54X系列的寻址系统;
5、熟悉常用C54X系列常用指令的用法。
二、实验设备
计算机,CCS2.0版以上软件,DSP仿真器,实验箱。
三、实验原理
外部标志输出(软件可控信号)XF可用于在多处理器结构中相互通信,也可作通用输出脚。
本实验中XF引脚先接到CPLD,然后把XF再通过CPLD输出给LED灯。
XF为低时LED亮,XF为高时LED灭。
四、实验步骤与内容
下面的连接以EPP并口仿真器为例,其他类型的仿真器的连接方法,参考其说明书。
1、系统连接
进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:
2、上电复位
在硬件安装完成后,确认安装正确、各实验部件及电源连接正常后,接通仿真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则DSP开发系统与计算机连接有问题。
3、运行CCS程序
待计算机启动成功后,实验箱220V电源置“ON”,实验箱上电,启动CCS,此时仿真器上的“绿色小灯”应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS相关设置是否正确。
注:
如在此出现问题,可能是系统没有正常复位或连接错误,应重新检查系统硬件并复
位;也可能是软件安装或设置有问题,应尝试调整软件系统设置,具体仿真器和仿真
●成功运行程序后,首先应熟悉CCS的用户界面
●学会CCS环境下程序编写、调试、编译、装载,学习如何使用观察窗口等。
4、修改样例程序,尝试DSP其他的指令。
注:
实验系统连接及CCS相关设置是以后所有实验的基础,在以下实验中这部分内容将不再复述。
5、填写实验报告。
6、样例程序实验操作说明
下面以exp01_xf的操作过程说明CCS的工程建立连接编译的方法:
(其他实验的操作过程和实验一相同)
1)把”exp01_xf目录拷贝到”C:
\ti5x\myprojects”目录下,去掉其只读属性.
2)删除除了”.asm、.cmd”后缀外的其它所有文件和文件夹
3)打开CCS的“Project\new”菜单
4)按下图建立工程”exp01_xf”
5)打开”addfilestoproject”菜单,把”exp01_xf”目录下的.asm、.cmd文件添加到exp01_xf的工程中。
6)点击“rebuldall”按钮,编译连接工程。
7)如果有如下的警告“>>warning:
entrypointsymbol_c_int00undefined”
打开“project\buildoptions”菜单的linker选项,把”autoinitmode”选项设置为“noautoinitialzation”,再重新编译连接工程。
8)在”file\loadprogram”菜单,并加载“exp01_xf.out”;
加载完毕,单击“Run”运行程序;
实验结果:
可见“CPLD单元”的指示灯D3以一定频率闪烁;单击“Halt”暂停程序运行,则指示灯D3停止闪烁,如再单击“Run”,则指示灯D3又开始闪烁;
关闭所有窗口,本实验完毕。
源程序查看:
用下拉菜单中Project/Open,打开“Exp01.pjt”,双击“Source”,可查看源程序。
五、程序框图
其中初始化包括SP及PMST寄存器值的设定
延时子程序为一嵌套循环
主程序流程图
六、思考题
1)XF直接驱动LED和XF通过CPLD驱动LED的区别?
2)怎样判断5416内部的PLL已经切换到分频模式?
实验二I/O实验
一、实验目的
1、了解I/O口的扩展;掌握I/O口的操作方法;
2、熟悉PORTR,PORTW指令的用途;
3、了解数字量与模拟量的区别和联系。
二、实验设备
计算机,CCS2.0版软件,DSP仿真器,实验箱。
三、实验原理
8位的数字量输入(由八拨码开关产生)当拨码开关打到靠近LED时为低,相反为高,通过74LS244缓冲连接到DSP的数据总线的低8位。
8位的数字量输出(通过八个LED灯显示)当对应LED点亮时说明输出为低,熄灭时为高,通过74LS273缓冲连接到DSP的数据总线的低8位。
数字量输入输出单元的资源分配如下:
数字量输入分配空间为IO空间的:
8000h(低8位,只读)
译码:
ioincs<='0'when(a15='1'anda14='0'anda13='0'anda12='0'and
a3='0'anda2='0'anda1='0'anda0='0'and
ios='0'andrnw='1')else
'1';
引脚图:
引脚说明:
1An\2An:
输入;1Yn\2Yn:
输出;1G/2G片选,低有效。
数字量输出分配空间为IO空间的:
8001h(低8位,只写)
译码:
iooutcs<='0'when(a15='1'anda14='0'anda13='0'anda12='0'and
a3='0'anda2='0'anda1='0'anda0='1'and
ios='0'andrnw='0')else'1';
引脚图:
引脚说明:
Dn:
输入;Qn:
输出;CLK时钟:
上升沿有效;CLR:
清除端,低有效。
功能图:
和DSP连接的原理图
四、实验步骤与内容
1、运行CCS软件,装载范例程序,分别调整数字输入单元的开关K1~K8,观察LED1~LED8亮灭的变化,以及输入和输出状态是否一致。
2、样例程序实验操作说明
启动CCS2.0,并加载“NORMAL\EXP03_IO\DEBUG\exp03.out”;
单击“Run”运行程序;
任意调整K1~K8开关,可以观察到对应LED1~LED8灯“亮”或“灭”;单击“Halt”,暂停持续运行,开关将对灯失去控制;
关闭所有窗口,本实验完毕。
源程序查看:
用下拉菜单中Project/Open,打开“NORMAL\EXP03_IO\Exp03.pjt”,双击“Source”,可查看源程序。
五、实验说明
实验中采用简单的一一映射关系来对I/O口进行验证,目的是使实验者能够对I/O有一目了然的认识。
在本实验中,提供的IO空间分配如下:
CPU2的I/O空间:
地址0x8000按键input(X)8,通过74LS244扩展
CPU2的I/O空间:
地址0x8001灯output(X)8,通过74LS273扩展
六、程序框图
实验三定时器实验
一、实验目的
1、熟悉C54x的定时器;
2、掌握C54x定时器的控制方法;
3、学会使用定时器中断方式控制程序流程。
二、实验设备
计算机,CCS2.0版软件,DSP硬件仿真器,实验箱。
三、实验原理
54x片上定时器只有一个输出引脚TOUT。
每次片上定时器到零后,该脚就产生一个输出负脉冲,脉冲的宽度是CLKOUT输出的一个周期。
这个脚可用于外部计数器的时钟输入。
片上定时器对应了三个寄存器,分别是定时寄存器(TIM),定时周期寄存器(PRD)和定时器控制寄存器(TCR)。
它们在存贮空间的映射地址如下图所示:
定时器的时钟输入是CPU的工作时钟,也就是CLKOUT。
一旦定时器开始工作,TIM就装入PRD里面的值,然后在CPU时钟的触发下减一,直到减到零,然后TOUT引脚输出一个宽度等于CLKOUT时钟周期的脉冲,接下来,根据TCR的设置,TIM可能继续从PRD里面装入一个值,然后又开始减一计数。
首先我们来了解TCR寄存器的各位的意义,如下图所示:
15-12:
保留位,没有意义。
11:
软控制位。
该位用来指定定时器在特殊情况下的工作模式,这个特殊情况是指在硬件调试时候,当用户设一个断点,而程序执行到这个断点的时候,定时器应该如何相应,是立即停止呢,还是继续减一直到零才停止。
当然,软控制位不能独立控制定时器的工作模式,它要起作用必须使自由控制位(free)变为0,如果自由控制位(free)是1,那么soft位不起作用,定时器正常工作,不受程序断点的影响。
10:
自由控制位。
该位决定在调试环境下,定时器的工作是否受到影响,如果该位等于1,则不受影响。
9-6:
预缩放因子。
该域首先对CPU时钟进行分频操作然后把输出脉冲作为TIM的时钟输入。
定时器的内部框图参见下图。
5:
定时器重新装入位。
设置该位导致TIM重新从PRD内装入值,PSC也重新从TDDR内装入值。
4:
定时器停止位。
写入该位一个1可以停止定时器的运行,写入该位一个0可以开始定时器运行。
3-0:
定时器分频系数。
由于CPU的时钟经过PSC分频以后才进入TIM,而分频的系数正是又定时器分频系数决定的。
下图描述了定时器内部的逻辑功能图。
从图可以看出,CPU时钟和TSS反位进行与操作才进入时钟输入端,所以TSS必须为零,CPU时钟才能正常进入。
PSC和TIM的功能一样,而TDDR和PRD的功能一样。
使用TRB可以对定时器复位,导致数值重新装入。
最后,定时器输出一个中断,一个进入DSP内部,所以大家可以在IFR寄存器里面找到TIMER的中断标志位,另一个从TOUT引脚出来。
初始化定时器的步骤如下:
第一:
向TCR的TSS位写入1,停止定时器工作。
第二:
向PRD内写入想要的值。
第三:
向TCR中的TDDR位写入想要的分频系数,再打开定时器,即向TCR的TSS位写入0。
这个时候,定时器就开始工作。
记住,一旦定时器开始工作,它就会一直工作,除非你手动关闭,而定时器一旦工作就会消耗功率,因此如果不使用定时器,务必将其关必。
假如CPU本身需要一些周期性的任务处理,那么,CPU也可以使用定时器。
上面说过定时器产生中断一方面经过TOUT引脚输出,另一方面它也输入了DSP内部的中断控制逻辑,因此CPU可以使用定时器中断。
定时器中断是可屏蔽的中断,使用的步骤如下。
第一:
向INTM位写入1,禁止全局中断,。
向IFR内写入1,保证IFR里面没有未决的中断标志位。
第二:
在IMR寄存器内,定时器中断有一个对应的屏蔽位,允许对定时器中断响应。
第三:
向INTM位写入0,使能全局中断。
接下来,一旦定时器中断产生,系统就会调用相应的中断服务指令。
在本系统中,如果设置时钟频率为20MHZ,令PRD=0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。
四、实验步骤和内容
1、运行CCS软件,调入样例程序,装载并运行;
2、定时器试验通过数字量输入输出单元的LED1~LED8来显示;
3、例程序实验操作说明
启动CCS2.0,并加载“NORMAL\EXP04_TIMER\EXP04\Debug\exp04.out”;
单击“Run”运行,可观察到LED灯(LED1~LED8)以一定的间隔时间不停摆动;
单击“Halt”,暂停程序运行,LED灯停止闪烁;单击“Run”,运行程序,LED灯又开始闪烁;
关闭所有窗口,本实验完毕。
源程序查看:
用下拉菜单中Project/Open,打开“NORMAL\EXP04_TIMER\EXP04\Exp04.pjt”,双击“Source”,可查看各源程序。
程序流程图
主程序:
中断程序:
五、思考题
1)54X定时器在嵌入式系统可以做什么使用?
2)TOUT引脚在嵌入式系统可以做什么使用?
实验四INT2中断实验
一、实验目的
1.掌握中断技术,学会对外部中断的处理方法;
2.掌握中断对程序流程的控制,理解DSP对中断的响应时序。
二、实验设备
计算机,CCS2.0版软件,DSP仿真器,实验箱
三、实验原理
中断在C54x中有内部中断源和外部中断源,内部中断源包括一些片上外设产生的中断和软件产生的中断。
外部中断源包括经由外部中断引脚产生的中断。
在C54x中,中断有两种分类方法,第一种是按照是否可屏蔽,第二种是按照中断产生方式。
按照是否可屏蔽分类,分为可屏蔽和不可屏蔽。
所谓屏蔽是指DSP可以接受这个中断,但是却不作任何反映,也就是说对应的中断服务指令被屏蔽了,从而得不到执行,这种中断就叫做可屏蔽中断,相反的,如果一个中断只要产生,那么就必须有中断服务指令相应,这种中断叫做不可屏蔽中断。
按照中断产生的方式可以分为软件中断和硬件中断。
软件中断是指由指令产生的中断,硬件中断是指由外部中断源产生或者片上外设产生。
这两种分类方法之间有一定的联系,具体如下。
第一:
凡是软件中断必定是不可以屏蔽的。
原因很简单,软件中断是由软件产生,加入你想屏蔽它,那么干脆就别写这条指令,因此完全没有必要为软件中断设置是否可屏蔽机制。
第二:
硬件中断中有一些是可以屏蔽的,有一些不能屏蔽。
软件设计人员一般比较喜欢从可屏蔽性去考虑中断,而硬件设计人员喜欢从产生方式去考虑中断。
在以下的讨论中,我们以C5402为例,介绍中断的相关细节内容。
我们首先从应用的角度提出一个简单的问题如下:
当用户按下一个按键,产生一个中断,那么DSP是如何跳转到相应的中断服务指令,执行完中断服务指令以后,它又是如何返回正常的程序执行呢?
简单的讲,DSP的中断控制器发现一个中断以后,它就会把下一个将要执行的指令地址保存起来,然后跳到中断服务指令处执行,执行完以后,再把刚才保存的地址重新装入执行寄存器,然后正常执行。
那么,DSP是如何知道服务指令在哪里放着呢?
这就要从DSP的中断实现机制来讲。
C54x使用了一个叫做中断向量表的结构,里面保存着不同中断的服务指令入口地址。
C54x对中断进行编号,一共编了32个号,每个中断占用4个字的地址空间,所以这个中断向量表的大小是0x80。
下表是C5402的中断向量表组织结构。
在该表中,编号越低,优先级越高。
其中SINTx表示软件中断,也就是能通过软件实现的中断,而其它的就是对应的硬件中断。
比如NMI/SINT16,表明该中断既可以通过硬件实现,也可以软件实现。
硬件中断中,用户可以自定义仅有NMI,INT[0:
3],其它的硬件中断都已经指定给了DSP的片上外设,比如编号为19的中断,TINT0/SINT3,它是片上定时器中断或者软件中断,当片上定时器0到点后,就会产生一个中断,相应就会执行这个地址里面的东西。
仅有中断向量表,DSP似乎还是不能够找到中断服务指令的地址。
事实上,DSP内部有一个中断控制器,它能够识别每一个编号的中断,所以一旦中断发生后,中断控制器就可以根据编号在相应的中断向量表里面找中断服务指令的地址。
然而,中断控制器仅能识别中断的编号,也就是说寻址范围仅有0x80,是什么告诉系统中断向量表在哪里放着呢?
这就是前面讲到的,中断向量表指针(IPTR),这个指针在ST1寄存器中占用的9位,可以想象,由于中断向量表是0x80大小,因此,以0x80为单位,9位的寻址范围是64K字。
所以,中断向量表可以放在程序空间低64K中的任何以0x80为边界的地方。
而在系统初始化时,IPTR的值刚好映射到了程序空间FF80处。
现在大家比较清楚了上面我们提出问题的答案了。
更进一步讲,系统对中断的处理不是这么简单,因为,系统里面有套中断处理机制,必须判别中断是否已经被屏蔽,如果屏蔽,那么就不会得到响应。
在处理中断时,系统使用了两个主要的寄存器,中断标志寄存器(IFR),中断屏蔽寄存器(IMR)。
对于非可屏蔽中断和复位信号,系统直接相应,没有什么判断处理,也就不设计这两个寄存器。
IFR的位描述如下图所示。
这个寄存器的每一位对应一个中断,相应的中断发生后,这个位就会被置位。
显然,这里面没有NMI和RESET对应的标志位。
IMR的位描述如下图所示:
这根IFR是一一对应的。
IMR的值完全由程序员控制,假如你想屏蔽掉某个中断,那么你就需要对IMR的相应中断位置位。
对于可屏蔽中断的处理过程如下图所示;
中断源产生一个中断请求,在这个过程中,如果是可屏蔽中断,那么它必定在IFR里占一席之地,此时对IFR相应的位置位。
如果是不可屏蔽中断,直接进入中断服务程序。
中断服务程序要做的事情后面会讲到。
如果是可屏蔽的,那么接下来下来系统要确认是否可以执行。
如下图。
在这个阶段,系统回检查如下条件。
第一:
检查所有同时发生的中断的优先级,高优先级首先得到相应。
第二:
检查ST1中的中断模式位(INTM),如果该位为1,所有中断全部被屏蔽。
INTM是一种快速屏蔽所有可屏蔽中断的方法。
第三:
检查IMR中相应中断的屏蔽位,如果置位,则不能得到执行。
如果以上三条检查都通过,那么系统进入中断服务程序。
具体内容如下。
第一:
把程序计数器(PC)压栈。
第二:
把相应中断向量的地址装入程序计数器(PC)。
第三:
从中断向量地址中取到跳转指令,把IACK信号置低,同时对相应中断的IFR位清零,执行跳转指令。
IACK变低的时候,在紧接着的CLKOUT时钟上升沿,A6~A2表明了中断向量的编号,因此,可以通过IACK和A6~A2对中断进行检测,但必须将地址可见模式位(AVIS)置位。
第四:
执行中断服务指令直到一个返回语句。
第五:
正常返回,把栈里的内容弹出重新装入PC。
第六:
继续执行正常指令。
整个中断执行的流图如下。
需要注意一点,对于不可屏蔽中断在中断服务程序执行过程中,系统要检查是不是RESET,NMI或者INTR软件中断,如果是这几个中的任何一个,系统都要立即屏蔽所有可屏蔽中断,然后再继续执行。
在系统设计中要注意,有几种情况可以让程序跑飞。
在程序设计中要用编程策略保证正确的程序执行顺序。
第一种:
如果中断服务指令的执行时间大于同一中断的最小发生周期,而在中断服务指令执行的过程中,所有中断都没有屏蔽。
在这种情况下,一个中断服务指令还没有执行完而又新到达了一个中断,而新的中断又得到执行的允许,这种情况会使程序执行错误。
第二种:
如果同时发生的中断数超过一个固定的值,那么,就会有中断丢失。
第三种:
如果发生了中断,而被屏蔽掉了,那么IFR种的相应中断位将不会清零,这对于后来的中断处理有影响吗?
明确了这些问题,那么就可以自由使用中断。
C54XDSP的中断为低电平沿触发。
按S6键产生的低电平脉冲,输出给VC5402的INT2引脚,每按一次,产生一个低电平脉冲,用来控制实验箱上LED灯的亮灭。
该单元由555定时器组成单稳态触发电路,由按键S5控制,每按一次,产生一个低电平有效的单脉冲,脉冲宽度约10ms。
此脉冲经过CPLD整形,从CPLD逻辑单元的“单脉冲输出”2号孔输出。
四、实验步骤和内容
1、用连接线连接“CPLD单元”的2号孔“单脉冲输出”和“电机控制单元”2号孔“INT2”。
将“CPLD单元”拨码开关第3位打到“ON”位置。
2、低电平单脉冲触发DSP中断INT2;该中断由“单脉冲单元”按键“S5”产生。
按一次,产生一个中断。
2、运行CCS软件,调入样例程序,装载并运行;
3、每按一次“单脉冲输出”按键LED1~LED8灯亮灭变化一次;
4、填写实验报告。
5、样例程序实验操作说明
启动CCS2.0,并加载“NORMAL\EXP05_CPU2\DEBUG\exp05.out”;
单击“Run”运行程序,反复按开关“单脉冲输出”,观察LED1~LED8灯亮灭变化;
单击“Halt”暂停程序运行,反复按开关“单脉冲输出”,LED1~LED8灯亮灭不变化;
关闭所有窗口,本实验完毕。
源程序查看:
用下拉菜单中Project/Open,打开“NORMAL\EXP05_CPU2\Exp05.pjt”,双击“Source”,可查看各源程序。
程序框图
主程序流程图
中断程序流程图
五、思考题
1)54软件中断和硬件中断的区别?
各自的应用场合?
2)按键去抖的方法?