DSP 原理实验报告
中南大学信息科学与工程学院
专业班级: 电子信息 1002 班
学
姓
号: 0909100821
名: 邝
昀
指导老师: 陈
宁
2013 年 6 月 4 日星期二
目录
一、单路,多路模数转换(AD) .................................................................................................. 3
实验目的 .................................................................................................................... 3
一、
二、实验内容 ............................................................................................................................ 3
三、实验步骤 ............................................................................................................................ 4
四、实验主要源程序................................................................................................................ 6
五、实验结果及分析................................................................................................................ 8
二、有限冲击响应滤波器(FIR)算法实验..................................................................................9
一、实验目的 ............................................................................................................................ 9
二、实验内容 ............................................................................................................................ 9
三、实验步骤 .......................................................................................................................... 10
思、实验主要源程序.............................................................................................................. 11
五、实验结果及分析.............................................................................................................. 13
三、无限冲激响应滤波器(IIR)算法实验 ......................................................................................15
一、实验目的 .......................................................................................................................... 15
二、实验内容 .......................................................................................................................... 15
三、实验步骤 .......................................................................................................................... 16
四、实验主要源程序.............................................................................................................. 17
五、实验结果及分析.............................................................................................................. 19
四、快速傅立叶变换(FFT)算法实验 ............................................................................................ 21
一、实验目的 .......................................................................................................................... 21
二、实验内容 .......................................................................................................................... 21
三、实验步骤 .......................................................................................................................... 22
四、实验主要源程序.............................................................................................................. 23
五、实验结果及分析.............................................................................................................. 26
一、单路,多路模数转换(AD)
一、 实验目的
1.通过实验熟悉 F2812A 的定时器。
2.掌握 F2812A 片内 AD 的控制方法。
二、实验内容
1.TMS320F2812A 芯片自带模数转换模块特性
- 12 位模数转换模块 ADC,快速转换时间运行在 25mhz,ADC 时钟或 12.5MSPS。
-16 个模拟输入通道(AIN0—AIN15)。
-内置双采样-保持器
-采样幅度:0-3v,切记输入 ad 的信号不要超过这个范围,否则会烧坏 2812 芯片的。
2.模数模块介绍
ADC 模块有 16 个通道,可配置为两个独立的 8 通道模块以方便为事件管理器 A 和 B
服务。两个独立的 8 通道模块可以级连组成 16 通道模块。虽然有多个输入通道和两个序列
器,但在 ADC 内部只有一个转换器,同一时刻只有 1 路 ad 进行转换数据。
3.模数转换的程序控制
模数转换相对于计算机来说是一个较为缓慢的过程。一般采用中断方式启动转换或保存
结果,这样在 CPU 忙于其他工作时可以少占用处理时间。设计转换程序应首先考虑处理过
程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地
保存结果。
关于 TMS320F2812A DSP 芯片内的 A/D 转换器的详细结构和控制方法,请参见文档
spru060a.pdf。
4.实验程序流程图
开始
初始化 CPU 时钟、AD
采样时钟
启动 AD0 和 AD1 通道采集
中断中对 AD0 和 AD1
通道采集数据依次存入
缓冲区 Voltage1Voltage2
三、实验步骤
1.实验准备
(1)连接实验设备。
(2)准备信号源进行 AD 输入。
①取出 2 根实验箱附带的信号线(如右图,两端均为双声道语音插头)。
②用 1 根信号线连接实验箱左侧信号源的波形输出 A 端口和“A/D 输入”模块的
“ADCIN0”插座注意插头要插牢、到底。这样,信号源波形输出 A 的输出波形即可
送到 ICETEK–F2812-A 板的 AD 输入通道 0。
③用 1 根信号线连接实验箱左侧信号源的波形输出 B 端口和“A/D 输入”模块的
“ADCIN1”插座注意插头要插牢、到底。这样,信号源波形输出 B 的输出波形即可
送到 ICETEK–F2812-A 板的 AD 输入通道 1。
正弦波
波 形 输
1K-10K
正弦波
1K-10K
波形频率选
幅值调
波 形 输 出
波 形 频 率
幅值调
④设置波形输出 A:
图 3.2.3.3
- 向内侧按波形频率选择旋钮,直到标有正弦波的指示灯点亮。
- 上下调节波形频率选择旋钮,直到标有 1KHz-10KHz 的指示灯点亮。
- 调节幅值调整旋钮,将波形输出 A 的幅值调到最大。
⑤设置波形输出 B:
- 向内侧按波形频率选择旋钮,直到标有三角波的指示灯点亮。
- 上下调节波形频率选择旋钮,直到标有 1KHz-10KHz 的指示灯点亮。
- 调节幅值调整旋钮,将波形输出 B 的幅值调到最大。
2.设置 Code Composer Studio 3.3 在硬件仿真(Emulator)方式下运行
3. 启动 Code Composer Studio 3.3
选择菜单 Debug→Reset CPU。
4.打开工程文件
-工程目录:C:\ICETEK\F2812\DSP281x_examples\Lab0305-AD\ ADC.pjt。
-在项目浏览器中,双击 adc.c,打开 adc.c 文件,浏览该文件内容,理解各语句作
用。
5.编译、下载程序。
6.打开观察窗口
-选择菜单“View”、“Graph”、“Time/Frequency…”做如下设置,然后单击“OK”
按钮;
-选择菜单“View”、“Graph”、“Time/Frequency…”做如下设置,然后单击“OK”按钮;
图 3.2.3.4 观察窗口设置 1
图 3.2.3.4 观察窗口设置 2
-在弹出的图形窗口中单击鼠标右键,选择“Clear Display”。
通过设置,我们打开了两个图形窗口观察两个通道模数转换的结果。
7. 设置信号源
由于模数输入信号未经任何转换就进入 DSP,所以必须保证输入的模拟信号的幅
度在 0-3V 之间。必须用示波器检测信号范围,保证最小值 0V 最大值 3 V,否则容易
损坏 DSP 芯片的模数采集模块。
8. 运行程序观察结果
-单击“Debug”菜单,选择“Real–time Mode”,然后选择 Continuous Refresh 再单击
“Run”项,运行程序;
-停止运行,观察“ADCIN0”、“ADCIN1”窗口中的图形显示;
-适当改变信号源,按 F5 健再次运行,停止后观察图形窗口中的显示。注意:输入
信号的频率不能大于 10KHz,否则会引起混叠失真,而无法观察到波形,如果有兴
趣,可以试着做一下,观察采样失真后的图形。
四、实验主要源程序
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
// DSP281x Headerfile Include File
// DSP281x Examples Include File
// Prototype statements for functions found within this file.
interrupt void adc_isr(void);
// Global variables used in this example:
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage1[1024];
Uint16 Voltage2[1024];
main()
{
InitSysCtrl();//初始化 cpu
DINT;//关中断
InitPieCtrl();//初始化 pie 寄存器
IER = 0x0000;//禁止所有的中断
IFR = 0x0000;
InitPieVectTable();//初始化 pie 中断向量表
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
// This is needed to write to EALLOW protected register
// This is needed to disable write to EALLOW protected registers
EALLOW;
PieVectTable.ADCINT = &adc_isr;
EDIS;
AdcRegs.ADCTRL1.bit.RESET = 1;
asm(" RPT #10 || NOP");
reset to take effect
AdcRegs.ADCTRL3.all = 0x00C8;
// first power-up ref and bandgap circuits
// Reset the ADC module
// Must wait 12-cycles (worst-case) for ADC
AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;
AdcRegs.ADCTRL3.bit.ADCPWDN = 1;
// Power up bandgap/reference circuitry
// Power up rest of ADC
// Enable ADCINT in PIE
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1; // Enable CPU Interrupt 1
EINT;
ERTM;
LoopCount = 0;
ConversionCount = 0;
// Enable Global interrupt INTM
// Enable Global realtime interrupt DBGM
// Configure ADC
AdcRegs.ADCMAXCONV.all = 0x0001;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA3 as 1st SEQ1 conv.
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // Setup ADCINA2 as 2nd SEQ1 conv.
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
// Enable EVASOC to start SEQ1
// Enable SEQ1 interrupt (every EOS)
// Setup 2 conv's on SEQ1
// Configure EVA
// Assumes EVA Clock is already enabled in InitSysCtrl();
EvaRegs.T1CMPR = 0x0080;
EvaRegs.T1PR = 0x10;
EvaRegs.GPTCONA.bit.T1TOADC = 1;
EvaRegs.T1CON.all = 0x1042;
// Setup T1 compare value
// Setup period register
// Enable EVASOC in EVA
// Enable timer 1 compare (upcount mode)
// Wait for ADC interrupt
while(1)
{
LoopCount++;
}
}
interrupt void
{
adc_isr(void)
Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;
Voltage2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;
// If 40 conversions have been logged, start over
if(ConversionCount == 1023)
{
ConversionCount = 0;
}
else ConversionCount++;
// Reinitialize for next ADC sequence
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
return;
}
// Reset SEQ1
// Clear INT SEQ1 bit
// Acknowledge interrupt to PIE
五、实验结果及分析
1、输出 A 口为 1~10KHZ 频率的正弦波,输出 B 口为频率为 1~10KHZ 的三角波
2、输出 A 口的频率为 1~10KHZ 的三角波,输出 B 口为频率为 1~10KHZ 的正弦波