DSP技术实验报告
实验名称:
姓 名: 学 号: 班 级: 时 间:
定时器控制实验
陈丹 100401202 电信2班 2013-5-4
南京理工大学紫金学院电光系
一、 实验目的
1. 熟悉如何编写2812的中断服务程序; 2. 掌握长时间间隔的定时器的处理; 3. 掌握片内外设的设置方法。
二、 实验原理
TMS320F2812片内有3个32位时钟,分别被称为CPU定时器0、1、2。其中定时器1和定时器2预留给适时操作系统使用(例如DSPBIOS),只有定时器0用户可以在应用程序中使用。每个定时器中均有一个32位减计数器,当计数器减到零时,产生一个中断。其中,TIMER2中断为PIE中断,TIMER1中断直接连在CPU的INT13,TIMER2中断直接连在CPU的INT14.
注:SEED-DEC2812未使用CPU定时器0,用户可以根据应用的需要灵活使用。
定时器功能框图:
定时中断信号与处理器内连接示意图:
(1)预定标计数器PSC,在系统工作时钟SYSCLKOUT作用下,递减计数。经(TDDR+1)个周期预定标计数器减为零,产生下溢信息,向定时器的32位计数器(TIM)借位。
(2)32位计数器TIM,在预定标计数器PSC下溢信号下,递减计数;预定标计数器PSC在本身下溢信号作用下,重新装载。
(3)32位计数器TIM经(PRD+1)个周期,递减为零,产生中断信息INT,并在此信号作用下重新装载。
在初始化值TDDR, PRD 不全为零时,定时器中断周期为:
即中断频率为:
fCLKOUT1为SYSCLKOUT的频率。
三、 实验内容
装入cputimer.pjt 工程文件后,添加2812.gel文件。结合程序流程充分理解实验主程序CpuTimer.c,并完成以下工作:
1、将中断服务主程序补充完整,要求能够实现SEED_DEC2812板卡上指示灯D1和D3交替闪烁。
interrupt void ISRTimer2(void) {
CpuTimer2.InterruptCount++;
补充程序实现指示灯D1和D3交替闪烁 }
#include \"DSP28_Device.h\" #include \"ext_inf.h\" unsigned int Led_Flag;
interrupt void ISRTimer2(void);
void main(void) {
/*初始化系统*/ InitSysCtrl();
/*关中断*/ DINT;
IER = 0x0000; IFR = 0x0000; Led_Flag = 0; /*初始化PIE*/ InitPieCtrl();
/*初始化PIE中断矢量表*/ InitPieVectTable();
/*初始化外设*/
InitPeripherals();
EALLOW;
PieVectTable.TINT2 = &ISRTimer2;
EDIS;
/*设置CPU*/
ConfigCpuTimer(&CpuTimer2, 150, 1000000);//将指示灯D1和D3交替
闪烁的时间改为4S
StartCpuTimer2();
/*开中断*/
IER |= M_INT14;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
for(;;); }
interrupt void ISRTimer2(void) {
CpuTimer2.InterruptCount++;
if(Led_Flag==1 ) {
LED1_ON; *LED3=0; Led_Flag=0;
} else {
LED1_OFF; *LED3=1; Led_Flag=1; }
//添加程序,完成LED1,LED3交替闪烁 }
2、尝试将指示灯D1和D3交替闪烁的时间改为4S、10S(实验者根据自己的需要改变周期寄存器的值,从而控制每次进入中断的时间)。
ConfigCpuTimer(&CpuTimer2, 150, 4000000);//将指示灯D1和D3交替
闪烁的时间改为4S
ConfigCpuTimer(&CpuTimer2, 150, 10000000);//将指示灯D1和D3交替
闪烁的时间改为10S
四、 小结与体会
在本次实验我在老师的指导下掌握了定时器和中断的基本原理,并且学会了
使用定时器控制C语言编程,这次实验让我受益良多。
因篇幅问题不能全部显示,请点此查看更多更全内容