资讯详情

TMS320F2812外设例程系列之EvTimerPeriod

//#####################################################################

//文件: Example_281xEvTimerPeriod.c //说明: 配置EVA定时器1,EVA定时器2,EVB定时器3,定时器4为周期溢出中断。 // 每进行一次中断响应 加1。EVA定时器1的周期最短,EVB定时器4的周期最长 //测试变量: // EvaTimer1InterruptCount; // EvaTimer2InterruptCount; // EvbTimer3InterruptCount; // EvbTimer4InterruptCount; //##################################################################### #include "DSP281x_ .h" #include "DSP281x_Examples.h" //功能函数原型 interrupt void eva_timer1_isr(void); interrupt void eva_timer2_isr(void); interrupt void evb_timer3_isr(void); interrupt void evb_timer4_isr(void); void init_eva_timer1(void); void init_eva_timer2(void); void init_evb_timer3(void); void init_evb_timer4(void); //全局变量 Uint32 EvaTimer1InterruptCount; Uint32 EvaTimer2InterruptCount; Uint32 EvbTimer3InterruptCount; Uint32 EvbTimer4InterruptCount; //主程序 void main(void) { //步骤1.初始化系统控制(PLL,看门狗,使能外设时钟) InitSysCtrl(); //步骤2.初始化GPIO //InitGpio(); //本例中跳过 //步骤3.清除所有中断并初始化PIE中断向量表,禁止 中断 DI ; //初始化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); //使能全局中断和全局实时 GM中断 EINT; //使能全局中断INTM ERTM; //使能全局实时中断DBGM //步骤6.空循环 for(;;); } //EVA定时器1初始化程序 void init_eva_timer1(void) { //初始化EVA 定时器1: 配置定时器1寄存器组(EVA) EvaRegs.G A.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.T1TOA = 2; //定时器 1 周期中断启动 EVA ADC 转换 } //EVA 定时器 2 初始化程序 void init_eva_timer2(void) { //初始化 EVA定时器2: 设置定时器2寄存器组(EV A) 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; //周期中断启动EVA ADC转换 } //EVB定时器3初始化程序 void init_evb_timer3(void) { //初始化EVB定时器3: //设置定时器3寄存器组(EV B) 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周期中断启动EVA ADC转换 } //EVB定时器4初始化程序 void init_evb_timer4(void) { //初始化EVB定时器4: //设置定时器4寄存器 (EV B) 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周期中断启动EVA ADC转换 } //EVA 定时器 1 中断服务程序 interrupt void eva_timer1_isr(void) { EvaTimer1InterruptCount++; EvaRegs.EVAIMRA.bit.T1PINT = 1; //使能来自这个定时器的更多的中断 EvaRegs.EVAIFRA.all = BIT7; //注意,为了安全,写一个掩码到程序整体 PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; //应答中断接收更多的来自PIE第2组的中断 } //EVA定时器2中断服务程序 interrupt void eva_timer2_isr(void) { EvaTimer2InterruptCount++; //使能来自这个定时器的更多的中断 EvaRegs.EVAIMRB.bit.T2PINT = 1; EvaRegs.EVAIFRB.all = BIT0; //注意,为了安全,写一个掩码到程序整体 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; //应答中断接收更多的来自PIE第3组的中断 } //EVB 定时器 3 中断服务程序 interrupt void evb_timer3_isr(void) { EvbTimer3InterruptCount++; EvbRegs.EVBIFRA.all = BIT7; //注意,为了安全,写一个掩码到程序整体 PieCtrlRegs.PIEACK.all = PIEACK_GROUP4; //应答中断接收更多的来自PIE第4组的中断 } //EVB 定时器 4 中断服务程序 interrupt void evb_timer4_isr(void) { EvbTimer4InterruptCount++; EvbRegs.EVBIFRB.all = BIT0; //注意,为了安全,写一个掩码到程序整体 PieCtrlRegs.PIEACK.all = PIEACK_GROUP5; //应答中断接收更多的来自PIE第5组的中断 } -电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台