通用定时器1初始化程序(启动ADC)
// $ Date: 4/11/2009 整理: eyes417 $
//###########################################################################
//
// FILE : Example_281xEvTimerPeriod.c#此前在首页部分显示#
//
// TITLE: 事件管理器GP定时器--周期中断启动ADC转换
//
// ASSUMPTIONS:
//
// As supplied, this project is configured for "boot to H0" operation.
// Other then boot mode pin configuration, no other hardware configuration is required.
//
//###########################################################################
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
interrupt void eva_timer1_isr(void);
void init_eva_timer1(void);
void main(void)
{
InitSysCtrl();
InitGpio(); //IO口初始化
DINT; //关CPU总中断
InitPieCtrl(); //初始化PIE控制寄存器
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable(); //初始化PIE中断向量表
EALLOW;
//将相应的向量指向中断服务程序,中断发生时,自动跳转
PieVectTable.T1PINT = &eva_timer1_isr;
EDIS;
init_eva_timer1(); //初始化EV-A定时器1
//使能PIE中断INT2.4(T1PINT中断)
PieCtrlRegs.PIEIER2.all = M_INT4;
IER |= M_INT2 ;
EINT; // 使能INTM(全局中断)
ERTM; // Enable Global realtime interrupt DBGM
for(;;);
}
//EV-A定时器1初始化
void init_eva_timer1(void)
{
EvaRegs.GPTCONA.all = 0;
EvaRegs.T1PR = 0x1200; // Period---周期值
EvaRegs.T1CMPR = 0x0000; // Compare Reg--比较值
//清除周期EV-A定时器1中断位
EvaRegs.EVAIMRA.bit.T1PINT = 1;
EvaRegs.EVAIFRA.bit.T1PINT = 1;
EvaRegs.T1CNT = 0x0000; //计数器初值
//递增模式,x/1分频,内部时钟,使能比较,使用自己的周期,立即启动定时器计数
EvaRegs.T1CON.all = 0x1042;
//启动由EVA定时器1周期中断产生的ADC转换
EvaRegs.GPTCONA.bit.T1TOADC = 2;
}
//EV-A定时器1中断服务函数
interrupt void eva_timer1_isr(void)
{
...... //中断服务内容程序
//清除定时器中断位
EvaRegs.EVAIMRA.bit.T1PINT = 1;
EvaRegs.EVAIFRA.all = BIT7; //BIT7---0x0080
//响应中断,从而使INT2中断组继续接收中断
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
}