DSP实验指导书及其思考题答案(3)

2018-12-29 19:33

能在“反汇编”窗口看到程序代码。

d. 用鼠标选中“Memory”窗口,并在其中选择要查看的存贮器地址段:0x080-0x08e。

e. 在反汇编窗口中在每个“nop”指令处都设一个断点,方法有两种:1.用鼠标单击该指令将其点亮即可。2.在菜单栏中选择“Break”?”Add”,然后在弹出的对话框中键入欲加断点的地址即可。

f. 单击菜单栏下的“Run=F5”按钮,启动执行基本算术运算程序,程序在执行完加法运算后自动暂停。通过“CPU”窗口可以看到寄存器AHL的内容为0x46,这正是加法运算的结果。同样,在“Memory”窗口中,可以看到0x81,0x82,0x88的内容为分别为0012,0034,0x46。执行加法运算后,将0x81和0x82的内容相加,结果放在0x88单元。

g. 在“Memory”窗口中用鼠标左键双击0x81单元,这时可以修改该内存单元的内容。输入新的数据0x0ffee(十进制的-18),编辑内容时请直接输入FFEE(十六进制),然后回车确认,便完成对0x81单元的修改。

h. 在“CPU” 窗口中修改PC值,方法也是鼠标左键双击PC寄存器的内容,输入新的PC值0x1805(编辑内容时直接输入1805),并用回车键确认。

i. 单击菜单栏下的“Run=F5”按钮,程序从当前PC继续运行,重新计算0x81和0x82的和,结果在0x88中。当程序再次暂停时,可以看到AHL寄存器和0x88的内容为0x22(十进制的34),这正是我们希望的结果:-18+52=34。

j. 单击“Run=F5”按钮,程序从当前PC继续运行,完成减法运算。当程序再次暂时(断点位于0x1813),可以看到0x83和0x84单元的内容分别为FFEE和0012,B寄存器的内容为ffdc0000,而0x89的内容为ffdc(十进制-36),这正是我们希望的结果:?18?18??36。注意,该减法操作使用了辅助寄存器寻址,所以计算结果在B寄存器的高16位。

k. 单击“Run=F5”按钮,程序从当前PC继续运行,完成整数乘法运算。当程序再次暂时(断点位于0x181d),可以看到0x81和0x82单元的内容分别为0012和0034,A寄存器的内容为000003A8,这正是我们希望的结果:18*52=936(0x3a8)。这时我们可以用1个16位的内容单元来保存结果,如将A寄存器的低16位存入0x8b单元。但如果将0x81的内容修改为0x2000(十进制的8192),在“CPU窗

7

口”中将PC修改为1818,然后继续运行,重新计算乘法。当程序完成乘法暂停时,可以看到A寄存器的内容为00068000,这也是一个正确的结果:8192*52=425984(0x68000)。此时将无法用一个16位的存贮单元来保存A寄存器中的结果。

l. 单击“Run=F5”按钮,程序从当前PC继续运行,完成小数乘法运算。当程序再次暂停时(断点位于0x1826),可以看到0x83和0x84单元的内容分别为4000和b548,A寄存器的内容为40000000,乘法的结果在B寄存器中为daa40000,这正是我们希望的结果:0.5*(-0.58374)=-0.29187(0x0daa4)。对于小数乘法,一般情况都可以用1个16位的内容单元将B寄存器的高16保存(如存入0x8c单元)。 m. 单击“Run=F5”按钮,程序从当前PC继续运行,完成整数除法运算。当程序再次暂时(断点位于0x183b),可以看到0x81,0x82,0x8d和0x8e单元的内容分别为0034,0012,FFFE和0010,这正是我们希望的结果:52除以-18,商为-2(0xfffe) ,余数为16(0x10)。

n. 单击“Run=F5”按钮,程序从当前PC继续运行,完成小数除法运算。当程序再次暂停时(断点位于0x1852),可以看到0x81,0x82和0x8f单元的内容分别为4000,4ab8和6da3,这正是我们希望的结果:0.5/0.58374=0.8565457(0x6da3)。

o. 如果以上程序运行不正确,请检查代码是否输入正确,还可以在源代码中插入断点调试,注意对中间结果的观察。 六、实验报告要求

1、实验前进行预习,初步编写相应实验程序代码

2﹑实验时对实验代码进行调试,并不断修改达到正确结果; 3﹑写出本次实验的心得体会。 七、思考题

1、对直接寻址用法有什么体会?如果在直接寻址前遗漏对DP初始化,对结果有什么影响?

2、在小数乘法中使用了置FRCT标志为1的指令。如果将该语句取消,那么B寄存器的结果是多少?想想什么时候应该设置FRCT标志?

8

实验_2_:数字振荡器的设计与实现

实验学时: 4 实验类型:设计 实验要求:必修 一、实验目的

通过本实验的学习,让学生掌握多模块程序设计方法,掌握定时器使用,掌握简单算法的DSP实现以及CCS环境下图形工具的简单应用。 二、预习和参考 (1)数字振荡器原理

设一个传递函数为正弦序列sinkωT,其z变换为

Cz?1?1?2 H(z)=1?Az?Bz

其中,A=2cosωT, B=-1, C=sinωT。设初始条件为0,求出上式的反Z变换得: y[k]=Ay[k-1]+By[k-2]+Cx[k-1]

这是一个二阶差分方程,其单位冲击响应即为sinkωT。利用单位冲击函数x[k-1]的性质,即仅当k=1时,x[k-1]=1,代入上式得: k=0 y[0] = Ay[-1] + By[-2] + 0 = 0 k=1 y[1] = Ay[0] + By[-2] + c = c k=2 y[2] = Ay[1] + By[0] + 0 = Ay[1] k=3 y[3] = Ay[2] + By[1] . ……………

k=n y[n]= Ay[n-1] + By[n-2]

在k>2以后,y[k]能用y[k-1]和y[k-2]算出,这是一个递归的差分方程。 根据上面的说明,我们可以开始数字振荡器的设计。设该振荡器的频率为2kHz,采样率为40kHz(通过定时器设置,每隔25us中断一次,即产生一个y[n]),则递归的差分方程系数为:

A=2cosωT=2cos (2 x PI x 2000 / 40000)=2 x 0.95105652 B=-1

C=sinωT=sin (2 x PI x 2000 / 40000)=0.30901699

为了便于定点DSP处理,我们将所有的系数除以2,然后用16位定点格式表示为:

9

A15?2?79BC2B15?2?C0002C?215?13C72这便是本实验中产生2KHz正弦信号的三个系数。在本实验中,主程序在初始化时先计算出y[1]和y[2],然后开放定时器中断。以后每次进入定时器中断服务程序时,利用前面的y[1]和y[2],计算出新的有y[0],通过CCS提供的图形显示工具,我们将在图形窗口中看到一个正弦信号波形。下面是初始化和中断服务程序代码片段: 初始化y[1]和y[2]:

ssbx st st st pshd popd ld mpy sth ld mpy ltd mac

sth

(2)C54X的定时器操作

C54X的片内定时器利用CLKOUT时钟计数,用户使用三个寄存器(TIM,PRD,TCR)来控制定时器,参见表2-1。在表2-2中列出了定时器控制寄存器的各个比特位的具体定义。‘VC5402的另一个定时器(定时器1)的控制寄存器分别为:0x30(TIM1),0x31(PRD1),0x32(TCR1)。

表2-1 ‘VC5402定时器0的相关寄存器

10

FRCT

;置FRCT=1,准备进行小数乘法运算 ;将常数A装入变量AA ;将常数B装入变量BB ;将常数C装入变量CC ;将变量CC压入堆栈

#INIT_A,AA #INIT_B,BB #INIT_C,CC

CC

y2

;初始化y2=CC ;装AA到T寄存器

;y2乘系数A,结果放入A寄存器 ;将A寄存器的高16位存入变量Y1 ;将系数B装入T寄存器

;y2乘系数B,结果放入A寄存器 ;将y1装入T寄存器,同时复制到y2 ;完成新正弦数据的计算,a寄存器中为 ; y1*AA+y2*BB

;将新数据存入y1,因所有系数都除过2, ;将新正弦数据存入y0

AA, T

y2,a

a,y1 BB,T y1 AA,a

中断服务程序片段:

y2,a

a,1,y1 a,1,y0

;所以在保存结果时转移一位,恢复数据正常大小。

sth

寄存器地址 名称 0024h 0025h TIM PRD 用途 定时器寄存器,每计数一次自动减1 定时器周期寄存器,当TIM减为0后,CPU自动将PRD的值装入TIM 0026h TCR 定时器控制寄存器

表2-2 定时器控制寄存器(TCR)bit概要

比特 名称 功 能 15-12 保留 读出时为0 11 Soft 该比特位与10位配合使用以决定定时器在使用仿真调试时状态。 Soft=0 当进入仿真调试时,定时器立即停止工作。 Soft=1 当计数器被减为0后,停止工作。

10 Free 该位与11位配合使用以决定定时器在使用仿真调试时状态。 Free=0 根据11比特位决定定时器状态。 Free=1 忽略11比特位,定时器不受影响。

9-6 PSC 定时器预置计数器。当PSC减为0后,CPU自动将TDDR装入,

然后TIM开始减1。

5 TRB 定时器复位。当TRB=1时,CPU将PRD寄存器的值装入TIM

寄存器,将TDDR的值装入PSC

4 TSS 定时器启停控制位。当系统复位时,TSS被清除,定时器立刻开

始工作。

TSS=0 表示启动定时器 TSS=1 表示停止定时器

0-3 TDDR 定时器扩展周期。当PSC减到0后,CPU自动将TDDR的值装

入PSC,然后TIM减 1。所以整个定时器的周期寄存器可以有20个比特(PRD+TDDR)。

从上面的介绍可以看到定时器实际上可以有20个比特的周期寄存器。它对CLKOUT信号计数,先将PSC减1,直到PSC为0,然后用TDDR重新装入PSC,同时将TIM减1,直到TIM减为0。这时CPU发出TINT中断,同时在TOUT引脚输出一个脉冲信号,脉冲宽度为CLKOUT一致。然后用PRD重新装入TIM,重复下去直到系统或定时器复位。因而定时器中断的频率由下面的公式决定:

11


DSP实验指导书及其思考题答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017-2023年中国通信继电器行业市场深度分析与投资规划咨询(目

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: