TMS320F2812外设例程系列之EvTimerPeriod.docx
《TMS320F2812外设例程系列之EvTimerPeriod.docx》由会员分享,可在线阅读,更多相关《TMS320F2812外设例程系列之EvTimerPeriod.docx(4页珍藏版)》请在冰豆网上搜索。
TMS320F2812外设例程系列之EvTimerPeriod
TMS320F2812外设例程系列之EvTimerPeriod
//#####################################################################
//文件:
Example_281xEvTimerPeriod.c
//说明:
配置EVA定时器1,EVA定时器2,EVB定时器3,定时器4为周期溢出中断。
//每进行一次中断响应计数器加1。
EVA定时器1的周期最短,EVB定时器4的周期最长
//测试变量:
//EvaTimer1InterruptCount;
//EvaTimer2InterruptCount;
//EvbTimer3InterruptCount;
//EvbTimer4InterruptCount;
//#####################################################################
#include"DSP281x_Device.h"
#include"DSP281x_Examples.h"
//功能函数原型
interruptvoideva_timer1_isr(void);
interruptvoideva_timer2_isr(void);
interruptvoidevb_timer3_isr(void);
interruptvoidevb_timer4_isr(void);
voidinit_eva_timer1(void);
voidinit_eva_timer2(void);
voidinit_evb_timer3(void);
voidinit_evb_timer4(void);
//全局变量
Uint32EvaTimer1InterruptCount;
Uint32EvaTimer2InterruptCount;
Uint32EvbTimer3InterruptCount;
Uint32EvbTimer4InterruptCount;
//主程序
voidmain(void)
{
//步骤1.初始化系统控制(PLL,看门狗,使能外设时钟)
InitSysCtrl();
//步骤2.初始化GPIO
//InitGpio();//本例中跳过
//步骤3.清除所有中断并初始化PIE中断向量表,禁止CPU中断
DINT;
//初始化PIE控制寄存器
InitPieCtrl();
//禁止CPU中断并清除所有CPU中断
IER=0x0000;
IFR=0x0000;
//初始化PIE中断向量表
InitPieVectTable();
//本例中用到的中断映射
EALLOW;
PieVectTable.T1PINT=&eva_timer1_isr;
PieVectTable.T2PINT=&eva_timer2_isr;
PieVectTable.T3PINT=&evb_timer3_isr;
PieVectTable.T4PINT=&evb_timer4_isr;
EDIS;
//步骤4.初始化所有外设
//InitPeripherals();//本例中不需要,可以跳过
init_eva_timer1();
init_eva_timer2();
init_evb_timer3();
init_evb_timer4();
//步骤5.使能中断
//初始化计数值为0
EvaTimer1InterruptCount=0;
EvaTimer2InterruptCount=0;
EvbTimer3InterruptCount=0;
EvbTimer4InterruptCount=0;
PieCtrlRegs.PIEIER2.all=M_INT4;//使能INT2.4(T1PINT)
PieCtrlRegs.PIEIER3.all=M_INT1;//使能INT3.1(T2PINT)
PieCtrlRegs.PIEIER4.all=M_INT4;//使能INT4.4(T3PINT)
PieCtrlRegs.PIEIER5.all=M_INT1;//使能INT5.1(T4PINT)
//使能CPU中断INT2(T1PINT)、INT3(T2PINT)、INT4(T3PINT)、INT5(T4PINT)
IER|=(M_INT2|M_INT3|M_INT4|M_INT5);
//使能全局中断和全局实时DBGM中断
EINT;//使能全局中断INTM
ERTM;//使能全局实时中断DBGM
//步骤6.空循环
for(;;);
}
//EVA定时器1初始化程序
voidinit_eva_timer1(void)
{
//初始化EVA定时器1:
配置定时器1寄存器组(EVA)
EvaRegs.GPTCONA.all=0;
//配置通用定时器1周期为0x0200
EvaRegs.T1PR=0x0200;//周期
EvaRegs.T1CMPR=0x0000;//比较寄存器值
//使能通用定时器1周期中断位、递增计数、内部时钟模式、使能比较
EvaRegs.EVAIMRA.bit.T1PINT=1;
EvaRegs.EVAIFRA.bit.T1PINT=1;
EvaRegs.T1CNT=0x0000;//清除通用定时器1的计数器
EvaRegs.T1CON.all=0x1742;
EvaRegs.GPTCONA.bit.T1TOADC=2;//定时器1周期中断启动EVAADC转换
}
//EVA定时器2初始化程序
voidinit_eva_timer2(void)
{
//初始化EVA定时器2:
设置定时器2寄存器组(EVA)
EvaRegs.GPTCONA.all=0;
//配置通用定时器2的周期为0x0200;
EvaRegs.T2PR=0x0400;//周期
EvaRegs.T2CMPR=0x0000;//比较寄存器
//使能通用定时器2周期中断、递增计数、内部时钟模式、使能比较
EvaRegs.EVAIMRB.bit.T2PINT=1;
EvaRegs.EVAIFRB.bit.T2PINT=1;
EvaRegs.T2CNT=0x0000;//清除通用定时器2的计数器
EvaRegs.T2CON.all=0x1742;
EvaRegs.GPTCONA.bit.T2TOADC=2;//周期中断启动EVAADC转换
}
//EVB定时器3初始化程序
voidinit_evb_timer3(void)
{
//初始化EVB定时器3:
//设置定时器3寄存器组(EVB)
EvbRegs.GPTCONB.all=0;
//配置通用定时器3的周期为0x0200;
EvbRegs.T3PR=0x0800;//周期
EvbRegs.T3CMPR=0x0000;//比较寄存器
//使能通用定时器3周期中断、递增计数、内部时钟模式、使能比较
EvbRegs.EVBIMRA.bit.T3PINT=1;
EvbRegs.EVBIFRA.bit.T3PINT=1;
EvbRegs.T3CNT=0x0000;//清除通用定时器3的计数器
EvbRegs.T3CON.all=0x1742;
EvbRegs.GPTCONB.bit.T3TOADC=2;//定时器3周期中断启动EVAADC转换
}
//EVB定时器4初始化程序
voidinit_evb_timer4(void)
{
//初始化EVB定时器4:
//设置定时器4寄存器(EVB)
EvbRegs.GPTCONB.all=0;
//配置通用定时器4的周期为0x0200;
EvbRegs.T4PR=0x1000;//周期
EvbRegs.T4CMPR=0x0000;//比较寄存器
//使能通用定时器4周期中断、递增计数、内部时钟模式、使能比较
EvbRegs.EVBIMRB.bit.T4PINT=1;
EvbRegs.EVBIFRB.bit.T4PINT=1;
EvbRegs.T4CNT=0x0000;//清除通用定时器4的计数器
EvbRegs.T4CON.all=0x1742;
EvbRegs.GPTCONB.bit.T4TOADC=2;//定时器4周期中断启动EVAADC转换
}
//EVA定时器1中断服务程序
interruptvoideva_timer1_isr(void)
{
EvaTimer1InterruptCount++;
EvaRegs.EVAIMRA.bit.T1PINT=1;//使能来自这个定时器的更多的中断
EvaRegs.EVAIFRA.all=BIT7;//注意,为了安全,写一个掩码到程序整体
PieCtrlRegs.PIEACK.all=PIEACK_GROUP2;
//应答中断接收更多的来自PIE第2组的中断
}
//EVA定时器2中断服务程序
interruptvoideva_timer2_isr(void)
{
EvaTimer2InterruptCount++;
//使能来自这个定时器的更多的中断
EvaRegs.EVAIMRB.bit.T2PINT=1;
EvaRegs.EVAIFRB.all=BIT0;//注意,为了安全,写一个掩码到程序整体
PieCtrlRegs.PIEACK.all=PIEACK_GROUP3;
//应答中断接收更多的来自PIE第3组的中断
}
//EVB定时器3中断服务程序
interruptvoidevb_timer3_isr(void)
{
EvbTimer3InterruptCount++;
EvbRegs.EVBIFRA.all=BIT7;//注意,为了安全,写一个掩码到程序整体
PieCtrlRegs.PIEACK.all=PIEACK_GROUP4;
//应答中断接收更多的来自PIE第4组的中断
}
//EVB定时器4中断服务程序
interruptvoidevb_timer4_isr(void)
{
EvbTimer4InterruptCount++;
EvbRegs.EVBIFRB.all=BIT0;//注意,为了安全,写一个掩码到程序整体
PieCtrlRegs.PIEACK.all=PIEACK_GROUP5;
//应答中断接收更多的来自PIE第5组的中断
}