宁枫 发表于 2019-12-25 22:38

对T2通用定时器编程,进不了中断求大神指点出现的问题

EV初始化
void InitEv(void)
{
    EvaRegs.T2CON.bit.TMODE=2;      //连续增模式
    EvaRegs.T2CON.bit.TCLKS10=0;      //使用内部时钟,T1CLK
    EvaRegs.T2CON.bit.TPS=2;          //T1CLK=HSPCLK/4=18.75M
    EvaRegs.T2CON.bit.TENABLE=0;      //暂时禁止T1计数
    EvaRegs.T2PR=0x493E;            //周期为1ms

    EvaRegs.EVAIMRB.bit.T2PINT=1;   //使能定时器T2的周期中断
    EvaRegs.EVAIFRB.bit.T2PINT=1;   //清除定时器T2的周期中断标志位
/////在这里我使能了周期中断///////////////
}

宁枫 发表于 2019-12-30 22:09

问题解决了是因为没有使能CPU中断,受了前面写程序时的影响。我用的T2定时器的周期中断,需要使能INT3,即INT= 0x4.我错在了IER|=M_INT1;   IER|=M_INT2;//开CPU中断,他们是宏定义只打开了INT1和INT2。我需要改为使能CPU中断
   INT = 0x4;

宁枫 发表于 2019-12-25 22:40

这是中断函数
interrupt void T2PINT_ISR(void)   //通用定时器2的周期中断
{
    if (i == 1000)
      {
            i=0;
      }
   i++;
   PieCtrl.PIEACK.bit.ACK3=1;    //响应PIE同组中断
   EvaRegs.EVAIFRB.bit.T2PINT=1; //清除T2周期中断的标志位
   EINT;                         //使能全局中断

}

宁枫 发表于 2019-12-25 22:41

void main(void)
{

    InitSysCtrl();//初始化系统函数

    DINT;         //关闭全局中断
    IER = 0x0000;   //禁止CPU中断
    IFR = 0x0000;   //清除CPU中断标志

    InitPieCtrl();//初始化PIE控制寄存器

    InitPieVectTable();//初始化PIE中断向量表

    InitGpio();          //初始化GPIO口

    InitEv();            //初始化EV
    //使能PIE中断

PieCtrl.PIEIER3.bit.INTx1 = 1;//使能PIE模块中的T2周期中断

    IER|=M_INT1;//开CPU中断
    IER|=M_INT2;

    EINT;//使能全局中断
    ERTM;//使能实时中断

    EvaRegs.T2CON.bit.TENABLE=1;      //使能定时器T2计数操作

    while(1)
      {


      }

}


zuoanhuafeng 发表于 2019-12-26 08:37

中断向量表中有无T2PINT_ISR?

宁枫 发表于 2019-12-26 10:31

本帖最后由 宁枫 于 2019-12-26 10:35 编辑

桌面

宁枫 发表于 2019-12-26 10:34

T2的计数器正常计数,是可以产生中断事件的

宁枫 发表于 2019-12-26 10:37

这是我的源程序,希望不吝赐教,必洗耳恭听

zhangmangui 发表于 2019-12-30 23:09

这一点代码根本看不出问题
页: [1]
查看完整版本: 对T2通用定时器编程,进不了中断求大神指点出现的问题