打印

中断成功进入的必要步骤

[复制链接]
1977|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaochy1126|  楼主 | 2012-7-13 18:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近,看到很多朋友遇到中断无法进入的问题,所以总结了一下自己的经验,希望能够帮助到大家,也希望有更多的朋友,能够总结自己的在某方面的经验,与大家分享。特别是通过我们的**,有所收获的朋友。

其实一个成功的中断也并不困难,大家可以试试我下面介绍的方法:

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级和外设级的中断标志位是需要人工清除的。

欢迎大家继续讨论

相关帖子

沙发
拿起书本| | 2012-7-13 21:58 | 只看该作者
谢谢楼主的宝贵经验,受益非浅啊,顶了

使用特权

评论回复
板凳
lengrudie| | 2013-3-28 13:25 | 只看该作者
TI的DSP没有中断优先级设置吗?请指教

使用特权

评论回复
地板
huangfeng33| | 2013-3-28 22:02 | 只看该作者
硬件上优先级是做好的,但软件上有办法来设置优先级

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1061

主题

11320

帖子

26

粉丝