<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        TMS320F2812外設例程系列之EvTimerPeriod

        作者:佚名   來源:不詳   點擊數:  更新時間:2014年08月17日   【字體:

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

        //文件:  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"   
        //功能函數原型
        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中斷向量表,禁止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初始化程序
        void init_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 周期中斷啟動 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組的中斷
        }
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮