资源描述
郑州航空工业管理学院
电子通信工程系
DSP原理及应用实验报告
学 号:
姓 名:
专 业:
指导老师:
实验一 CCS的安装与设置
1. 实验目的
掌握CCS 2(‘2000)集成开发环境的安装;掌握软件仿真环境的设置方法;熟悉CCS集成开发环境的应用界面。
2. 实验设备
PC机、CCS 2(‘2000)IDE软件、EXP-IV DSP实验箱
3. 实验要求
l 熟悉安装CCS 2(‘2000)IDE软件的步骤
l 根据DSP芯片的型号正确设置软件仿真环境
l 了解CCS集成开发环境应用界面的各项内容
4. 实验内容
(1) CCS 2(‘2000)IDE软件的安装步骤
1.1 退出病毒防火墙及杀毒软件。
1.2 解压CCS2000 2.2 .rar文件并运行setup.exe安装程序文件。
1.3 选择安装界面中 “Code Cmposter Studio”选项。如下图所示:
1.4 完成上述步骤后只需点“Next”继续。在出现提示确认没有运行病毒检测软件的提示窗口时点“确定”。如下图所示:
1.5 选择“Yes”同意CCS的安装协议。如下图所示:
1.6 选择默认安装组件,点“Next”。如下图所示:
1.7 选择默认安装路径“C:\ti”点“Next”。如下图所示:
1.8 出现下图所示时取消勾选项,并点击“Finish”。如下图所示:
1.9 完成上述步骤,再出现的对话框中点击“确定”。如下图所示:
1.10 安装完成后,计算机桌面出现如下图所示的快捷方式图标:
(2) TMS320F2812 微处理器的软件仿真环境的设置
2.1 双击桌面“Setup CCS 2”的快捷方式启动设置程序。
2.2 在出现的如下图所示的窗口中依次进行①单击“Clear”清除原有设置②选择“F2812 Device Simulator”配置③单击“Import”输入配置④单击“Save and Quit”
2.3 在接下来的对话框中单击“否”完成对CCS的设置
(3) CCS集成开发环境的应用界面
双击桌面上的CCS 2(‘C2000)快捷图标。成功启动的CCS如下图所示:
5. 问题与分析
在安装CCS的时候总是在安装到59%的时候安装出错。
分析问题:在安装之前没有关闭病毒防火墙和杀毒软件。
解决方法:关闭病毒防火墙金和杀毒软件。
实验二 XF管脚的驱动与观察
1.实验目的
掌握SPRC097软件包的安装与使用方法;掌握在CCS集成开发环境下建立或打开工程的方法;掌握XF管脚的驱动与测试方法;掌握工程的编译、下载与调试方法;熟悉CCS集成开发环境中寄存器观察工具的使用。
2.实验设备
PC机、CCS 2(‘2000)IDE软件、EXP-IV DSP实验箱
3.实验要求
l 熟悉SPRC097软件包的安装步骤
l 会利用SPRC097中的工程环境建立或打开工程
l 实现XF管脚的驱动编程
l 会利用寄存器观察工具察看XF管脚的状态
4.实验内容
(1)SPRC097软件包的安装
(2)XF管脚驱动编程的环境
(3)主要程序代码
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
void delay(void);
void main(void)
{
int p,r,q;
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
//控制XF管脚
EALLOW;
GpioMuxRegs.GPFMUX.all=0xffff;
EDIS;
for(r=0;r<100;r++)
{
/*xf管脚置低*/
asm(" clrc xf");
for(p=0;p<10;p++)
{
for(q=0;q<10;q++)
{
delay();
}
}
/*xf管脚置高*/
asm(" setc xf");
for(p=0;p<10;p++)
{
for(q=0;q<10;q++)
{
delay();
}
}
}
for(;;)
{
;
}
}
void delay(void)
{
unsigned int k,i,j;
for(k=0;k<5;k++);
for(i=0;i<5;i++);
for(j=0;j<5;j++);
}
(4) 状态寄存器观察工具中显示的XF的图片
5.问题与分析
有什么样的实验现象?
答:xf管脚经过一段时间后由低变高。
实验三 GPIO模块的驱动程序设计
1.实验目的
掌握CCS硬件仿真环境的设置方法;掌握GPIO模块的驱动与测试方法;熟悉工程的编译、下载与调试方法。
2.实验设备
PC机、CCS 2(‘2000)IDE软件、XDS510仿真器、EXP-IV DSP实验箱
3.实验要求
l 熟悉GPIO模块的功能原理
l 会利用SPRC097中的工程环境建立或打开工程
l 实现GPIO模块的驱动编程
4.实验内容
(1)CCS硬件仿真环境的设置
(2)建立GPIO模块的工程
(3)主要程序代码
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#define EXAMPLE1 1 // Use DATA registers to toggle I/O's
#define EXAMPLE2 0 // Use SET/CLEAR registers to toggle I/O's
#define EXAMPLE3 0 // Use TOGGLE registers to toggle I/O's
// Prototype statements for functions found within this file.
void delay_loop(void);
void Gpio_select(void);
void Gpio_example1(void);
void Gpio_example2(void);
void Gpio_example3(void);
void main(void)
{
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP281x_SysCtrl.c file.
InitSysCtrl();
// Step 2. Initalize GPIO:
// This example function is found in the DSP281x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
// InitGpio(); // Skipped for this example
// For this example use the following configuration:
Gpio_select();
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;
// Initialize PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP281x_PieCtrl.c file.
InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell
Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example. This is useful for debug purposes.
// The shell ISR routines are found in DSP281x_DefaultIsr.c.
// This function is found in DSP281x_PieVect.c.
InitPieVectTable();
// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP281x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
// Step 5. User specific code:
#if EXAMPLE1
// This example uses DATA registers to toggle I/O's
Gpio_example1();
#endif // - EXAMPLE1
#if EXAMPLE2
// This example uses SET/CLEAR registers to toggle I/O's
Gpio_example1();
#endif
#if EXAMPLE3
// This example uses TOGGLE registers to toggle I/O's
Gpio_example3();
#endif
}
void delay_loop()
{
short i;
for (i = 0; i < 1000; i++) {}
}
void Gpio_example1(void)
{
// Example 1:
// Toggle I/Os using DATA registers
// Note: When using the DATA reigsters, input values
// may be lost. If there are inputs on the port then
// use the CLEAR/SET/TOGGLE registers instead.
while(1)
{
GpioDataRegs.GPADAT.all =0xAAAA;
GpioDataRegs.GPBDAT.all =0xAAAA;
GpioDataRegs.GPDDAT.all =0x0022;
GpioDataRegs.GPEDAT.all =0x0002;
GpioDataRegs.GPFDAT.all =0xAAAA;
GpioDataRegs.GPGDAT.all =0x0020;
delay_loop();
GpioDataRegs.GPADAT.all =0x5555;
GpioDataRegs.GPBDAT.all =0x5555;
GpioDataRegs.GPDDAT.all =0x0041; // Four I/Os only
GpioDataRegs.GPEDAT.all =0x0005; // ThreeI/Os only
GpioDataRegs.GPFDAT.all =0x5555;
GpioDataRegs.GPGDAT.all =0x0010; // Two I/Os only
delay_loop();
}
}
void Gpio_example2(void)
{
// Example 2:
// Toggle I/Os using SET/CLEAR registers
while(1)
{
GpioDataRegs.GPASET.all =0xAAAA;
GpioDataRegs.GPACLEAR.all =0x5555;
GpioDataRegs.GPBSET.all =0xAAAA;
GpioDataRegs.GPBCLEAR.all =0x5555;
GpioDataRegs.GPDSET.all =0x0022;
GpioDataRegs.GPDCLEAR.all =0x0041; // Four I/Os only
GpioDataRegs.GPESET.all =0x0002;
GpioDataRegs.GPECLEAR.all =0x0005; // ThreeI/Os only
GpioDataRegs.GPFSET.all =0xAAAA;
GpioDataRegs.GPFCLEAR.all =0x5555;
GpioDataRegs.GPGSET.all =0x0020;
GpioDataRegs.GPGCLEAR.all =0x0010; // Two I/Os only
delay_loop();
GpioDataRegs.GPACLEAR.all =0xAAAA;
GpioDataRegs.GPASET.all =0x5555;
GpioDataRegs.GPBCLEAR.all =0xAAAA;
GpioDataRegs.GPBSET.all =0x5555;
GpioDataRegs.GPDCLEAR.all =0x0022;
GpioDataRegs.GPDSET.all =0x0041; // Four I/Os only
GpioDataRegs.GPECLEAR.all =0x0002;
GpioDataRegs.GPESET.all =0x0005; // ThreeI/Os only
GpioDataRegs.GPFCLEAR.all =0xAAAA;
GpioDataRegs.GPFSET.all =0x5555;
GpioDataRegs.GPGCLEAR.all =0x0020;
GpioDataRegs.GPGSET.all =0x0010; // Two I/Os only
delay_loop();
}
}
void Gpio_example3(void)
{
// Example 2:
// Toggle I/Os using TOGGLE registers
// Set pins to a known state
GpioDataRegs.GPASET.all =0xAAAA;
GpioDataRegs.GPACLEAR.all =0x5555;
GpioDataRegs.GPBSET.all =0xAAAA;
GpioDataRegs.GPBCLEAR.all =0x5555;
GpioDataRegs.GPDSET.all =0x0022;
GpioDataRegs.GPDCLEAR.all =0x0041; // Four I/Os only
GpioDataRegs.GPESET.all =0x0002;
GpioDataRegs.GPECLEAR.all =0x0005; // ThreeI/Os only
GpioDataRegs.GPFSET.all =0xAAAA;
GpioDataRegs.GPFCLEAR.all =0x5555;
GpioDataRegs.GPGSET.all =0x0020;
GpioDataRegs.GPGCLEAR.all =0x0010; // Two I/Os only
// Use TOGGLE registers to flip the state of
// the pins.
// Any bit set to a 1 will flip state (toggle)
// Any bit set to a 0 will not toggle.
while(1)
{
GpioDataRegs.GPATOGGLE.all = 0xFFFF;
GpioDataRegs.GPBTOGGLE.all = 0xFFFF;
GpioDataRegs.GPDTOGGLE.all = 0xFFFF;
GpioDataRegs.GPETOGGLE.all = 0xFFFF;
GpioDataRegs.GPFTOGGLE.all = 0xFFFF;
GpioDataRegs.GPGTOGGLE.all = 0xFFFF;
delay_loop();
}
}
void Gpio_select(void)
{
Uint16 var1;
Uint16 var2;
Uint16 var3;
var1= 0x0000; // sets GPIO Muxs as I/Os
var2= 0xFFFF; // sets GPIO DIR as outputs
var3= 0x0000; // sets the Input qualifier values
EALLOW;
GpioMuxRegs.GPAMUX.all=var1;
GpioMuxRegs.GPBMUX.all=var1;
GpioMuxRegs.GPDMUX.all=var1;
GpioMuxRegs.GPFMUX.all=var1;
GpioMuxRegs.GPEMUX.all=var1;
GpioMuxRegs.GPGMUX.all=var1;
GpioMuxRegs.GPADIR.all=var2; // GPIO PORTs as
output
GpioMuxRegs.GPBDIR.all=var2; // GPIO DIR select
GPIOs as output
GpioMuxRegs.GPDDIR.all=var2;
GpioMuxRegs.GPEDIR.all=var2;
GpioMuxRegs.GPFDIR.all=var2;
GpioMuxRegs.GPGDIR.all=var2;
GpioMuxRegs.GPAQUAL.all=var3; // Set GPIO input
qualifier values
GpioMuxRegs.GPBQUAL.all=var3;
GpioMuxRegs.GPDQUAL.all=var3;
GpioMuxRegs.GPEQUAL.all=var3;
EDIS;
}
5. 问题与分析
(1)GPIO模块有几种方式输出数据波形?
答:有三种方式,分别通过GPXDAT,GPXSET与GPXCLEAR,GPXTOGGLE寄存器来实现。
(2) 使用DATA寄存器输出信号时输入值丢失。
解决方法:用CLEAR/SET/TOGGLE寄存器代替。
实验四 外部中断的应用
1.实验目的
掌握中断服务程序的编写方法;掌握外部中断的驱动与测试方法;熟悉工程的编译、下载与调试方法。
2.实验设备
PC机、CCS 2(‘2000)IDE软件、XDS510、EXP-IV DSP实验箱
3.实验要求
l 熟悉外部中断XINT1、XINT2的功能原理
l 将工程环境设置为硬件仿真调试环境
l 会利用SPRC097中的工程环境建立或打开工程
l 实现外部中断的应用编程
4.实验内容
(1)建立外部中断的工程
(2)主要程序代码
//FILE: Led_Int.c
//TITLE: DSP281x 外部中断测试程序
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
void init_xint1(void);
interrupt void xint1_isr(void);
void gpiof_init(void);
Uint32 Xint1InterruptCount;
//主程序
void main(void)
{
InitSysCtrl();
//InitGpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.XINT1 = &xint1_isr;
EDIS;
PieCtrlRegs.PIECRTL.bit.ENPIE=1;
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1;
EINT;
Xint1InterruptCount=0;
asm(" nop ");
gpiof_init();
asm(" nop ");
init_xint1();
asm(" nop ");
for(;;)
{
if( Xint1InterruptCount<1)
{
asm(" nop ");
asm(" clrc xf ");
asm(" nop ");
}
else if(Xint1InterruptCount<2)
{
asm(" nop ");
asm(" setc xf ");
asm(" nop ");
}
else
{
Xint1InterruptCount=0;
}
}
}
void init_xint1()
{
XIntruptRegs.XINT1CR.all=0x0001;
}
interrupt void xint1_isr()
{
Xint1InterruptCount++;
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
}
void gpiof_init(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all=0x7000;
EDIS;
}
(3)实验现象
当程序下载到实验箱后,通过按下连接在XINT1管脚上的按键,可观察到连接在XF管脚上的LED灯实现同步的亮灭变化。
5.问题与分析
PIE管理的中断源共有多少个?这些中断分为多少组?
答:一共96个,可以分为12组。
展开阅读全文