资源描述
实验五 数字振荡器实验
一、实验目的
本实验属于综合性实验,在项目开发中,我们经常要用产生某一频率的正弦振荡信号,比如在电话通信中,用两个不同频率的正弦信号的叠加来代表按键。正弦信号的生成方法有三种,计算法、查表法和数字振荡器。用计算法求正弦波的离散序列值程序设计容易,但实际应用时会占用计算时间,使系统运行速度变慢。查表法是先通过matlab将正弦波的序列值计算出来并寄存在存储器中,运行时只要按顺序和一定的速度取出便可。这种方法要占用较多的存储空间,但是速度快。第三种方法是利用数字振荡器来实现不同频率信号的叠加,这种方法通过迭代的方法计算出不同频率的正弦信号序列,结构简单,运算速度快,节省内存,因此在DSP实际应用中我们选择这种方法。
数字振荡器的本质是,使用一个IIR(Infinite Impulse Response)滤波器,通过把它的极点放在单位圆上面来产生振荡。
利用正弦波sinx的指数形式
可以得到正弦序列x(n)的Z变换为
,此式在|z|>1时成立,且。
根据Z变换的基本原理和性质,序列x[n]及其Z变换X(z)之间存在一一对应的关系,即对于给定的X(z),可以通过反Z变换,唯一地确定x[n]。
因此,产生一个正弦波就等价于利用上式设计一个二阶IIR滤波器,使其系统传递函数就是正弦序列x[n]的z变换。系统传递函数为
滤波器的极点就是分母的根。
=
由上式可以看出,P1,2是一对复根,其幅值为1,相角为wT。幅值为1的极点在单位圆上,对应一个数字振荡器,其振荡频率由系数A、B和C决定。因此,设计数字振荡器主要是设计这些系数。
由系统函数求得差分方程:,设初始条件为0,对上式作反Z变换,得,这是一个二阶差分方程,其单位冲激响应就是sin(wT)。
由上面的式子可得数字振荡器系统流程图如图1所示:
Z-1
Z-1
B
A
C
X(n)
y(n)
图1数字振荡器系统流程图
利用单位冲激函数x[n-1]的性质,即仅当n=1时,x[n-1]=1,代入上式
n=0 y[0]=Ay[-1]+By[-2]+0=0
n=1 y[1]=Ay[0]+By[-1]+C=C
n=2 y[2]=Ay[1]+By[0]+0=Ay[1]
n=3 y[3]=Ay[2]+By[1]
.
n=k y[k]=Ay[k-1]+By[k-2]
.
.
在n>2以后,y[n]可以用y[n-1]和y[n-2]算出,这是一个递归的差分方程。
由此出发,就可以完成数字振荡器的设计。例如,设该振荡器的频率为F=1KHz,采样频率为Fs=10KHz,则,系数A=2cos(wT)=1.618033989;B=-1;C=sin(wT)=0.587785252,由此基础上,利用之前那个公式就可以产生相应的正弦波。
二、实验设备
1) 微机一套,操作系统为WINWODS98、WINDOWS2000 SP2或WINDOWS XP SP1或具有更高级的补丁。
2) DSP硬件仿真器一台、DSP实验箱一台,示波器一台。
1) 5000CCS2.0软件版本。
4)部分源程序及链接命令文件见D:\EXPER\EXP6目录下的.asm 和.cmd文件.c文件,.lib文件。
三、实验设置
1、开关K9拨到右边,即仿真器选择连接右边的CPU2;
四、实验内容
1、用Z变换的移位性质可知:
hn=Asin((n+1)w0)U(n);
其中
所以得到差分方程:;;
其中:
;——为输出信号的频率; ——正弦信号的幅值;——采样信号频率(8KHZ);
——归一化数字频率;设初始条件则差分方程变换为:
;初始条件:;
根据上面的参数,代入输出信号的频率可以得到产生不同频率正弦信号所需要的参数表1数字振荡器参数表。
频率
/HZ
A
B
697
1.70774
-1
0
0.52049
770
1.64528
-1
0
0.56856
852
1.56868
-1
0
0.62033
941
1.47820
-1
0
0.67359
1209
1.16410
-1
0
0.81315
1336
0.99636
-1
0
0.86707
1477
0.79862
-1
0
0.91682
1633
0.56854
-1
0
0.95875
表1数字振荡器参数表
2、使用内存的图形观察工具对正弦振荡器的仿真结果进行时域分析和频域分析,注意正确设置参数。例程,产生770HZ正弦振荡信号。
图a 770HZ的时域图形
图b 770HZ的频谱图
五、实验内容
1)仔细阅读所给的部分源程序,并完成该程序。要求实现697HZ+1209HZ两种频率的正弦信号叠加输出。
2)从叠加后的波形输出来看,原始波形中含有的哪些频谱成分?
3)完成表1数字振荡器参数表中各个参数值得计算?
七、源程序及链接程序
1、datasamp.c
/************************************************
* FileName: DTMF.C *
* Description: 数字振荡器实验
* Write by: LinLianDong *
* Date: 2013-05-03 *
* Update: 2013-05-03 *
*************************************************/
#include "typedef.h"
//#include "math.h" //由于使用sin()函数
//此程序产生697HZ正弦波,load程序以后,运行,才能得到仿真结果;
//设置断点,观察变量地址;
//仿真CPU用C54XX simulator
//数据格式31-bit floating point
//采样频率8KHZ,时域显示用line,频域显示用bar;程序设计中频域采样取N=205;
main()
{
//以下初始化参数为正弦振荡器初始化参数
float a1_row;
float a[8]={1.70774,1.64528,1.56868,1.47820,1.16410,0.99636,0.79862,0.56854};
double yn_chu_zhi[8]={-0.52049,-0.56856,-0.62033,-0.67359,-0.81315,-0.86707,-0.91682};
int j;
double yn[800],yn_row[400];//400点合成频率输出+400点静音信号
//程序开始;
yn_row[1]=0;
yn[0]=0;
yn[1]=0;
//生成正弦波
a1_row=a[1]; //row=770;
yn_row[0]=yn_chu_zhi[1];
for(j=2;j<=400;j++) //产生正弦信号序列,400点
{
yn_row[j]=a1_row*yn_row[j-1]-yn_row[j-2];
yn[j]=yn_row[j];
}
/* 此处添加代码,实现两个不同频率正弦信号的叠加;
*/
for(j=401;j<=799;j++) //400点正弦信号和400点静音信号组合
{
yn[j]=0;
}
}
2、CMD文件如下:
MEMORY
{
PAGE 0: PROG: origin = 0x1000, len = 0x2000
VECT: origin = 0x4f80, len = 0x80
PAGE 1: IDATA: origin = 0x80, len = 0x2000
DARAM: origin = 0x3000, len = 0x1000
}
SECTIONS
{
.vectors: {} > VECT PAGE 0 /*汇编的中断向量表*/
.text: {} > PROG PAGE 0 /*C与汇编的可执行代码段*/
.cinit: {} > PROG PAGE 0 /*C 初始化变量和常数表*/
.bss: {} > IDATA PAGE 1 /*C与汇编的全局和静态变量*/
.const: {} > DARAM PAGE 1 /*C 定义常量段*/
.stack: {} > DARAM PAGE 1 /*C 系统堆栈*/
.switch: {} > IDATA PAGE 1 /*为常量语句建立的表格*/
.data: {} > IDATA PAGE 1 /*汇编的定义的数据段 */
}
第4章 附 录
附录1:TMS320C5402 CPU及外设存储器寄存器映射表
0
IMR
中断屏蔽寄存器
1
IFR
中断标志寄存器
2-5
-
测试保留
6
ST0
状态寄存器0
7
ST1
状态寄存器1
8
AL
累加器A低字(15-0比特)
9
AH
累加器A高字(31-16比特)
A
AG
累加器A保护位(39-32比特)
B
BL
累加器B低字(15-0比特)
C
BH
累加器B高字(31-16比特)
D
BG
累加器B保护位(39-32比特)
E
T
暂存寄存器
F
TRN
传送寄存器
10-17
AR0-AR7
辅助寄存器ARn n=0~7
18
SP
堆栈指针
19
BK
循环缓存区大小寄存器
1A
BRC
块重复计数器
1B
RSA
块重复开始地址
1C
REA
块重复结束地址
1D
PMST
状态寄存器
1E
XPC
程存扩展寻址寄存器
1E-1F
-
保留
20
McBSP0_DRR2
带缓存串口0数据接收寄存器2
21
McBSP0_DRR1
带缓存串口0数据接收寄存器1
22
McBSP0_DXR2
带缓存串口0数据发送寄存器2
23
McBSP0_DXR1
带缓存串口0数据发送寄存器1
24
TIM
定时器计数器
25
PRD
定时器周期寄存器
26
TCR
定时器控制寄存器
27
-
保留
28
SWWSR
等待状态产生寄存器
29
BSCR
Bank-switching控制寄存器
2A
-
保留
2B
SWCR
扩展等待控制寄存器
2C
HPIC
主机接口控制寄存器
2D-2F
-
保留
30
TIM1
定时器计数器
31
PRD1
定时器周期寄存器
32
TCR1
定时器控制寄存器
33-37
-
保留
38
McBSP0_SPSA
多缓冲串口0子地址寄存器
39
McBSP0_SPSD
多缓冲串口0子数据寄存器
3A-3B
保留
3C
GPIOCR
GP I/O 引脚控制寄存器
3D
GPIOSR
GP I/O 引脚状态寄存器
3E-3F
保留
40
McBSP1_DRR2
带缓存串口1数据接收寄存器
41
McBSP1_DRR1
带缓存串口1数据发送寄存器
42
McBSP1_DXR2
带缓存串口1控制寄存器
43
McBSP1_DXR1
带缓存串口1控制扩展寄存器
44-47
-
保留
48
McBSP1_SPSA
多缓冲串口1子地址寄存器
49
McBSP1_SPSD
多缓冲串口1子数据寄存器
4A-53
54
DMPREC
DMA优先允许控制寄存器
55
DMSA
DMA子地址寄存器
56
DMSDI
57
DMSDN
58
CLKMD
时钟方式寄存器
59-5F
-
保留
附录2:C5402中的中断标志寄存器(IMR)和中断屏蔽寄存器(IFR)
1) 中断标志寄存器IFR
IFR中某位为1表明有相应中断,再次写1清除中断。
2)中断屏蔽寄存器IMR
要开放某个中断,只需向IMR中相应位(中断允许位)写1。而ST1中INTM位为中断屏蔽总开关。
IFR和IMR寄存器各位功能描述
位号
名称
功能描述
15-14
——
保留
13
DAMC5
DMA通道5中断标志/屏蔽位
12
DMAC4
DMA通道4中断标志/屏蔽位
11
BXINT1/DMAC3
McBSP1发送中断标志/屏蔽位或
DMA通道3中断/标志屏蔽位
10
BRINT1/
DMAC2
McBSP1接收中断标志/屏蔽位或
DMA通道2中断标志/屏蔽位
9
HPINT
主机接口中断标志/屏蔽位
8
INT3
外部中断3中断标志/屏蔽位
7
TINT1/
DAMC1
TIMER1中断标志/屏蔽位或
DMA通道1中断标志/屏蔽位
6
DMAC0
DMA通道0中断标志/屏蔽位
5
BXINT0
McBSP0发送中断标志/屏蔽位
4
BRINT0
McBSP0接收中断标志/屏蔽位
3
TINT0
Timer0中断标志/屏蔽位
2
INT2
外部中断2中断标志/屏蔽位
1
INT1
外部中断1中断标志/屏蔽位
0
INT0
外部中断0中断标志/屏蔽位
注:所有DMA通道控制均由DMPREG寄存器来控制
附录3:TMS320C5402中断向量表与优先级
中断号
优先级
名 称
位 置
功 能
0
1
-RS/SINTR
0
复位(软、硬件)
1
2
-NMI/SINT16
4
非屏蔽中断
2
-
SINT17
8
软件中断17
3
-
SINT18
C
软件中断18
4
-
SINT19
10
软件中断19
5
-
SINT20
14
软件中断20
6
-
SINT21
18
软件中断21
7
-
SINT22
1C
软件中断22
8
-
SINT23
20
软件中断23
9
-
SINT24
24
软件中断24
10
-
SINT25
28
软件中断25
11
-
SINT26
2C
软件中断26
12
-
SINT27
30
软件中断27
13
-
SINT28
34
软件中断28
14
-
SINT29
38
软件中断29
15
-
SINT30
3C
软件中断30
16
3
-INT0/SINT0
40
外部中断0
17
4
-INT1/SINT1
44
外部中断1
18
5
-INT2/SINT2
48
外部中断2
19
6
TINT/SINT3
4C
定时器0中断
20
7
BRINT0/SINT4
50
缓存串口0接收中断
21
8
BXINT0/SINT5
54
缓存串口0发送中断
22
9
保留DMAC0,SINT6
58
保留(缺省)DMAC0
23
10
TINT(DMAC1),SINT7
5C
定时器1中断或DMA通道1中断
24
11
-INT3/SINT8
60
外部中断3
25
12
HPINT/SINT9
64
HPI口中断
26
13
BRINT1(DMAC2)/SINT10
68
带缓存串口1接收中断
27
14
BXINT1(DMAC3)/SINT11
6C
带缓存串口1发送中断
28
15
DMAC4,SINT12
70
DMA通道4中断
29
16
DMAC5,SINT13
74
DMA通道5中断
30-31
-
78-7F
保留
附录4:TMS320C5402状态和控制寄存器
1)状态寄存器0 (ST0),结构如下:
15~13
12
11
10
9
8~0 Bit
ARP
TC
C
OVA
OVB
DP
各状态位功能描述
位号
名称
功能描述
15~13
ARP
辅助寄存器指针。当寻址不修正时,要求ARP=0
12
TC
测试/控制标志位。保存ALU的测试结果
11
C
进位位。加法时产生进位或减法时产生借位置C=1
10
OVA
累加器A和B溢出标志位
9
OVB
累加器A和B溢出标志位
8~0
DP
数据存储器页指针。在直接寻址时作为数存的高9位地址
2)状态寄存器1 (ST1),结构如下:
15
14
13
12
11
10
9
8
7
6
5
4~0
BRAF
CPL
XF
HM
INTM
0
OVM
SXM
C16
FRCT
CMPT
ASM
各状态位功能描述
位号
名称
功能描述
15
BRAF
块重复操作标志位。为1时表示进行块重复操作
14
CPL
直接寻址编辑方式位。CPL=0时直接寻址指针为DP,CPL=1时直接寻址指针为SP
13
XF
XF引脚状态位。通过改变该寄存器的值可以改变XF引脚的输出
12
HM
保持方式位。处理器响应hold信号时,HM=0时表示处理器继续执行内部操作,而将外部接口置成高阻,当HM =1时,表示处理器暂停内部操作
11
INTM
中断方式位。当INTM=0时,开放所有可屏蔽中断,当INTM=1时,关闭所有可屏蔽中断
10
0
读时总是0
9
OVM
溢出方式位。OVM=0时,忽略溢出,当OVM=1时,发生溢出时填充00 7fff ffffh(正溢出)或00 8000 0000h(负溢出)
8
SXM
符号扩展方式位。SXM=0时禁止符号扩展,SXM=1时数据进入ALU时进行符号扩展
7
C16
双16位/双精度算术方式位。C16 =0时进行双精度算术运算,C16=1时进行双16位算术运算
6
FRCT
小数方式位。在小数乘法时乘法器输出左移一位,来消除多余符号位。
5
CMPT
修正方式位,决定ARP是否进行修正。CMPT=0时,间接单数存操作数操作时,不进行ARP修正,CMPT=1时,用AR0进行修正。
4~0
ASM
累加器移位方式位。
3)处理器工作方式状态寄存器(PMST),结构如下:
15~7
6
5
4
3
2
1
0 Bit
IPTR
MP/MC
OVLY
AVIS
DROM
CLKOFF
SMUL
SST
各状态位功能描述
位号
名称
功能描述
15~7
IPTR
中断向量指针。指向中断向量位置
6
MP/
微处理器/微控制器工作方式位。若MP/=0使用片内ROM,若MP/=1则片内ROM 不安排到程序空间,此状态由外部引脚决定,但是可以软件修改
5
OVLY
RAM重复占位位。当OVLY=0,DARAM只能映射到程序空间,当OVLY=1时,DARAM同时映射到程序存储空间。注意:数据页0不能映射到程序空间。
4
AVIS
地址可见位。设置寻址内部程序空间时地址线是否在外部地址引脚输出,当AVIS=1时,则内部程序寻址时,在地址总线上同时输出。
3
DROM
数据ROM位。DROM=0时,片内ROM不映射到程序存储区,DROM=1时,片内ROM映射到数据存储区。
2
CLKOFF
CLKOUT时钟输出关断位。CLKOUT=1时,禁止CLKOUT的输出,并且保持高电平。
1
SMUL
乘法饱和方式位。当SMUL=1时,并且OVM=1,FRCT=1时,在进行乘法累加运算时,作饱和处理。
0
SST
存储饱和位。
附录5:片内4K掩模ROM的内部资源
地址为:F800h—FFFFh,其内部资源,其中
F000h – F7FFh 保留
F800h – FBFFh 程序自动载入程序
FC00h – FCFFh 256-word的μ律扩展表
FD00h – FDFFh 256-word的A律扩展表
FE00h – FEFFh 256-word的sin查找表
FF00h – FF7Fh 保留
FF80h – FFFFh 中断向量表
附录6:TMS320C5402时钟方式引脚状态及时钟方式寄存器
引脚状态
CLKMD寄存器复位值
时钟方式
CLKMD1
CLKMD2
CLKMD3
0
0
0
E007h
PLL*15
0
0
1
9007h
PLL*10
0
1
0
4007h
PLL*5
1
0
0
1007h
PLL*2
1
1
0
F007
PLL*1
1
1
1
0000h
CLK/2
1
0
1
F000h
CLK/4
0
1
1
——
保留(旁路模式)
CLKMD中各位域定义
15~12
11
10~3
2
1
0
PLLMUL
PLLDIV
PLLCOUNT
PLLON/OFF
PLLNDIV
PLL STATUS
PLLMUL 表示PLL倍频系数
PLLDIV表示PLL分频系数
PLLCOUNT 表示PLL计数器,用来设置PLL锁定时间
PLLON/OFF 表示PLL通断位
PLLNDIV 表示时钟发生器选择位,决定时钟发生器的工作方式,0表示分频器方式,1表示PLL方式
PLL STATUS 是PLL的状态位。指示时钟发生器的工作方式(此状态位只读)
附录7:软件等待状态寄存器(SWWSR)
15
14~12
11~9
8~6
5~3
2~0
XPA扩展寻址位
I/O空间
64K
数据空间
高32K
数据空间
低32K
程序空间
高32K
程序空间
低32K
附录8:TMS320C5402存储器分配
(MP/ 、OVLY、DROM对存储器分配的影响)
附录9:TMS320C5402 –PQFP封装引脚排列顺序
展开阅读全文