对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的周期中断标志位
/////在这里我使能了周期中断///////////////
} 问题解决了是因为没有使能CPU中断,受了前面写程序时的影响。我用的T2定时器的周期中断,需要使能INT3,即INT= 0x4.我错在了IER|=M_INT1; IER|=M_INT2;//开CPU中断,他们是宏定义只打开了INT1和INT2。我需要改为使能CPU中断
INT = 0x4; 这是中断函数
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; //使能全局中断
} 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)
{
}
}
中断向量表中有无T2PINT_ISR? 本帖最后由 宁枫 于 2019-12-26 10:35 编辑
桌面
T2的计数器正常计数,是可以产生中断事件的
这是我的源程序,希望不吝赐教,必洗耳恭听这一点代码根本看不出问题
页:
[1]