DSP实验报告 打印Word格式.docx
《DSP实验报告 打印Word格式.docx》由会员分享,可在线阅读,更多相关《DSP实验报告 打印Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
图1-8
图1-9
图1-10
图1-11
图1-12
图1-13
(2)TMS320F2812微处理器的软件仿真环境的设置,如图1-14和图1-15。
图1-14
图1-15
(3)CCS集成开发环境的应用界面,如图1-16。
图1-16
实验二GPIO模块的驱动程序设计
1.实验目的
掌握CCS硬件仿真环境的设置方法;
掌握GPIO模块的驱动与测试方法;
熟悉工程的编译、下载与调试方法。
2.实验设备
PC机、CCS2(‘2000)IDE软件、XDS510仿真器、EXP-IVDSP实验箱
3.实验要求
熟悉GPIO模块的功能原理
会利用SPRC097中的工程环境建立或打开工程
实现GPIO模块的驱动编程
4.实验内容
(1)CCS硬件仿真环境的设置
图2-1
图2-2
(2)建立GPIO模块的工程
图2-3
(3)主要程序代码
#include"
DSP281x_Device.h"
//DSP281xHeaderfileIncludeFile
DSP281x_Examples.h"
//DSP281xExamplesIncludeFile
#defineEXAMPLE11//UseDATAregisterstotoggleI/O'
s
#defineEXAMPLE20//UseSET/CLEARregisterstotoggleI/O'
#defineEXAMPLE30//UseTOGGLEregisterstotoggleI/O'
//Prototypestatementsforfunctionsfoundwithinthisfile.
voiddelay_loop(void);
voidGpio_select(void);
voidGpio_example1(void);
voidGpio_example2(void);
voidGpio_example3(void);
voidmain(void)
{
//Step1.InitializeSystemControl:
//PLL,WatchDog,enablePeripheralClocks
//ThisexamplefunctionisfoundintheDSP281x_SysCtrl.cfile.
InitSysCtrl();
//Step2.InitalizeGPIO:
//ThisexamplefunctionisfoundintheDSP281x_Gpio.cfileand
//illustrateshowtosettheGPIOtoit'
sdefaultstate.
//InitGpio();
//Skippedforthisexample
//Forthisexampleusethefollowingconfiguration:
Gpio_select();
//Step3.ClearallinterruptsandinitializePIEvectortable:
//DisableCPUinterrupts
DINT;
//InitializePIEcontrolregisterstotheirdefaultstate.
//ThedefaultstateisallPIEinterruptsdisabledandflags
//arecleared.
//ThisfunctionisfoundintheDSP281x_PieCtrl.cfile.
InitPieCtrl();
//DisableCPUinterruptsandclearallCPUinterruptflags:
IER=0x0000;
IFR=0x0000;
//InitializethePIEvectortablewithpointerstotheshell
Interrupt
//ServiceRoutines(ISR).
//Thiswillpopulatetheentiretable,eveniftheinterrupt
//isnotusedinthisexample.Thisisusefulfordebugpurposes.
//TheshellISRroutinesarefoundinDSP281x_DefaultIsr.c.
//ThisfunctionisfoundinDSP281x_PieVect.c.
InitPieVectTable();
//Step4.InitializealltheDevicePeripherals:
//ThisfunctionisfoundinDSP281x_InitPeripherals.c
//InitPeripherals();
//Notrequiredforthisexample
//Step5.Userspecificcode:
#ifEXAMPLE1
//ThisexampleusesDATAregisterstotoggleI/O'
Gpio_example1();
#endif//-EXAMPLE1
#ifEXAMPLE2
//ThisexampleusesSET/CLEARregisterstotoggleI/O'
#endif
#ifEXAMPLE3
//ThisexampleusesTOGGLEregisterstotoggleI/O'
Gpio_example3();
}
voiddelay_loop()
shorti;
for(i=0;
i<
1000;
i++){}
}
voidGpio_example1(void)
{
//Example1:
//ToggleI/OsusingDATAregisters
//Note:
WhenusingtheDATAreigsters,inputvalues
//maybelost.Ifthereareinputsontheportthen
//usetheCLEAR/SET/TOGGLEregistersinstead.
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;
//FourI/Osonly
GpioDataRegs.GPEDAT.all=0x0005;
//ThreeI/Osonly
GpioDataRegs.GPFDAT.all=0x5555;
GpioDataRegs.GPGDAT.all=0x0010;
//TwoI/Osonly
}
voidGpio_example2(void)
//Example2:
//ToggleI/OsusingSET/CLEARregisters
GpioDataRegs.GPASET.all=0xAAAA;
GpioDataRegs.GPACLEAR.all=0x5555;
GpioDataRegs.GPBSET.all=0xAAAA;
GpioDataRegs.GPBCLEAR.all=0x5555;
GpioDataRegs.GPDSET.all=0x0022;
GpioDataRegs.GPDCLEAR.all=0x0041;
GpioDataRegs.GPESET.all=0x0002;
GpioDataRegs.GPECLEAR.all=0x0005;
GpioDataRegs.GPFSET.all=0xAAAA;
GpioDataRegs.GPFCLEAR.all=0x5555;
GpioDataRegs.GPGSET.all=0x0020;
GpioDataRegs.GPGCLEAR.all=0x0010;
GpioDataRegs.GPACLEAR.all=0xAAAA;
GpioDataRegs.GPASET.all=0x5555;
GpioDataRegs.GPBCLEAR.all=0xAAAA;
GpioDataRegs.GPBSET.all=0x5555;
GpioDataRegs.GPDCLEAR.all=0x0022;
GpioDataRegs.GPDSET.all=0x0041;
GpioDataRegs.GPECLEAR.all=0x0002;
GpioDataRegs.GPESET.all=0x0005;
GpioDataRegs.GPFCLEAR.all=0xAAAA;
GpioDataRegs.GPFSET.all=0x5555;
GpioDataRegs.GPGCLEAR.all=0x0020;
GpioDataRegs.GPGSET.all=0x0010;
//TwoI/Osonly
voidGpio_example3(void)
//ToggleI/OsusingTOGGLEregisters
//Setpinstoaknownstate
//UseTOGGLEregisterstoflipthestateof
//thepins.
//Anybitsettoa1willflipstate(toggle)
//Anybitsettoa0willnottoggle.
GpioDataRegs.GPATOGGLE.all=0xFFFF;
GpioDataRegs.GPBTOGGLE.all=0xFFFF;
GpioDataRegs.GPDTOGGLE.all=0xFFFF;
GpioDataRegs.GPETOGGLE.all=0xFFFF;
GpioDataRegs.GPFTOGGLE.all=0xFFFF;
GpioDataRegs.GPGTOGGLE.all=0xFFFF;
voidGpio_select(void)
Uint16var1;
Uint16var2;
Uint16var3;
var1=0x0000;
//setsGPIOMuxsasI/Os
var2=0xFFFF;
//setsGPIODIRasoutputs
var3=0x0000;
//setstheInputqualifiervalues
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;
//GPIOPORTsas
output
GpioMuxRegs.GPBDIR.all=var2;
//GPIODIRselect
GPIOsasoutput
GpioMuxRegs.GPDDIR.all=var2;
GpioMuxRegs.GPEDIR.all=var2;
GpioMuxRegs.GPFDIR.all=var2;
GpioMuxRegs.GPGDIR.all=var2;
GpioMuxRegs.GPAQUAL.all=var3;
//SetGPIOinput
qualifiervalues
GpioMuxRegs.GPBQUAL.all=var3;
GpioMuxRegs.GPDQUAL.all=var3;
GpioMuxRegs.GPEQUAL.all=var3;
EDIS;
}
5.问题与分析
GPIO管脚可以通过对GpioMuxRegs.GPxMUX.all=0xffff的设置,实现功能引脚的配置,通过设置GpioMuxRegs.GPxMUX.all=0x0000,实现管脚为输入引脚的功能。
为输出引脚时,可以通过GpioDataRegs.GPxDAT.all=0x0000与GpioDataRegs.GPxDAT.all=0xffff设置对应引脚输出为低电平或为高电平。
实验三定时器的驱动与观察
掌握SPRC097软件包的安装与使用方法;
掌握在CCS集成开发环境下建立或打开工程的方法;
掌握定时器的驱动与测试方法(定时将XF管脚置高与置低);
掌握工程的编译、下载与调试方法;
熟悉CCS集成开发环境中寄存器观察工具的使用。
熟悉SPRC097软件包的安装步骤
实现定时器定时驱动XF管脚的编程
会利用寄存器观察工具察看XF管脚的状态
(1)SPRC097软件包的安装
图3-1
(2)定时器定时驱动XF管脚的编程环境
图3-2
voiddelay(void);
intp,r,q;
//控制XF管脚
GpioMuxRegs.GPFMUX.all=0xffff;
for(r=0;
r<
100;
r++)
{
/*xf管脚置低*/
asm("
clrcxf"
);
for(p=0;
p<
10;
p++)
for(q=0;
q<
q++)
delay();
/*xf管脚置高*/
setcxf"
for(;
;
)
;
voiddelay(void)
unsignedintk,i,j;
for(k=0;
k<
5;
k++);
for(i=0;
i<
i++);
for(j=0;
j<
j++);
图3-3
通过设置GpioMuxRegs.GPFMUX.all=0xffff,实现XF管脚的功能引脚功能。
设置GpioMuxRegs.GPFMUX.all=0x0000,实现XF引脚的输入功能。
当XF引脚为功能模式时,可以通过设置setcXF与clrcxf对XF引脚置低或置高。
通过View下的Registers下的status查看XF管脚寄存器位的变化,如图(2-4)所示:
图3-4
实验四外部中断的应用
掌握中断服务程序的编写方法;
掌握外部中断的驱动与测试方法;
PC机、CCS2(‘2000)IDE软件、XDS510、EXP-IVDSP实验箱
熟悉外部中断XINT1的功能原理
将工程环境设置为硬件仿真调试环境
实现外部中断的应用编程
(1)建立外部中断的工程
图4-1
(2)主要程序代码
//FILE:
Led_Int.c
//TITLE:
DSP281x外部中断测试程序
voidinit_xint1(void);
interruptvoidxint1_isr(void);
voidgpiof_init(void);
Uint32Xint1InterruptCount;
//主程序
voidmain(void)
//InitGpio();
PieVectTable.XINT1=&
xint1_isr;
PieCtrlRegs.PIECRTL.bit.ENPIE=1;
PieCtrlRegs.PIEIER1.bit.INTx6=1;
IER|=M_INT1;
EINT;
Xint1InterruptCount=0;
nop"
gpiof_init();
init_xint1();
if(Xint1InterruptCount<
1)
clrcxf"
elseif(Xint1InterruptCount<
2)
setcxf"
else
voidinit_xint1()
XIntruptRegs.XINT1CR.all=0x0001;
interruptvoidxint1_isr()
Xint1InterruptCount++;
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
voidgpiof_init(void)
GpioMuxRe