中断成功进入的必要步骤
-
-
蓝蓝的天
- LV5工程师
-
| 2015-08-08 19:24:10
- 浏览量 841
- 回复:2
最近,看到很多朋友遇到中断无法进入的问题,所以总结了一下自己的经验,希望能够帮助到大家,也希望有更多的朋友,能够总结自己的在某方面的经验,与大家分享。特别是通过我们的文章,有所收获的朋友。
其实一个成功的中断也并不困难,大家可以试试我下面介绍的方法:
1.首先,是在主函数里需要注意的一些步骤,以T1的周期中断为例:
void
main(void)
{
.........
.........
//禁止和清除所有CPU中断
DINT;
IER=0x0000;
IFR=0x0000;
//初始化中断向量
InitPieCtrl();
//初始化中断向量表
InitPieVectTable();
//使能PIE中断
PieCtrlRegs.PIEIER2.bit.INTx4=1;
//使能T1周期中断
//开CPU中断
IER |=M_INT2;
//开中断2
EINT; //使能全局中断
ERTM;
//使能实时中断
}
2.中断函数
我看过一些朋友的中断函数,但是很奇怪,大家都没有习惯把中断函数写在DSP28_DefaultIsr.C文件里,而是在主函数所在的文件里自己定义,其实这些工作TI的标准文件里都已经做好了,你只要在DSP28_DefaultIsr.C里找到相应的中断函数,把你所要实现的程序添加在里面就可以了。
interrupt
void T1PINT_ISR(void)
{
...........
...........
EvaRegs.EVAIFRA.bit.T1PINT=1;
//清除中断标志位
PieCtrlRegs.PIEACK.bit.ACK2=1; //响应同组中断
EINT;
//开全局中断
}
在退出中断的时候,一定要注意需要清除相应的中断标志位和开放同组中断,这样才能保证下一次成功进入中断。CPU级的中断标志位是不需要人工清除的,而PIE级和外设级的中断标志位是需要人工清除的。
最近,看到很多朋友遇到中断无法进入的问题,所以总结了一下自己的经验,希望能够帮助到大家,也希望有更多的朋友,能够总结自己的在某方面的经验,与大家分享。特别是通过我们的文章,有所收获的朋友。
其实一个成功的中断也并不困难,大家可以试试我下面介绍的方法:
1.首先,是在主函数里需要注意的一些步骤,以T1的周期中断为例:
void
main(void)
{
.........
.........
//禁止和清除所有CPU中断
DINT;
IER=0x0000;
IFR=0x0000;
//初始化中断向量
InitPieCtrl();
//初始化中断向量表
InitPieVectTable();
//使能PIE中断
PieCtrlRegs.PIEIER2.bit.INTx4=1;
//使能T1周期中断
//开CPU中断
IER |=M_INT2;
//开中断2
EINT; //使能全局中断
ERTM;
//使能实时中断
}
2.中断函数
我看过一些朋友的中断函数,但是很奇怪,大家都没有习惯把中断函数写在DSP28_DefaultIsr.C文件里,而是在主函数所在的文件里自己定义,其实这些工作TI的标准文件里都已经做好了,你只要在DSP28_DefaultIsr.C里找到相应的中断函数,把你所要实现的程序添加在里面就可以了。
interrupt
void T1PINT_ISR(void)
{
...........
...........
EvaRegs.EVAIFRA.bit.T1PINT=1;
//清除中断标志位
PieCtrlRegs.PIEACK.bit.ACK2=1; //响应同组中断
EINT;
//开全局中断
}
在退出中断的时候,一定要注意需要清除相应的中断标志位和开放同组中断,这样才能保证下一次成功进入中断。CPU级的中断标志位是不需要人工清除的,而PIE级和外设级的中断标志位是需要人工清除的。