DSP中断的C编程步骤
一:
PIE
1,构造指向中断函数的数据类型PINT: typedef interrupt void(*PINT)(void);
2,按照DSP的中断向量表顺序构造中断向表数据结构:
struct PIE_VECT_TABLE{…};
其中的每一个元素均为PINT数据类型。
3,初始化中断向量表:
构造 PIE_VECT_TABLE型结构变量PieVectTable;
对每一个元素赋值,即指向特定的中断服务程序;
4,声明和编写各特定的中断服务程序,如:
interrupt void PIE_RESERVED(void)  // Reserved space.  For test.
{
  asm ("      ESTOP0");
  for(;;);
}
二:
PIE
1,以cregister声明CPU相关寄存器:
extern cregister volatile unsigned int IFR;
extern cregister volatile unsigned int IER;
2,初始化各控制寄存器:
CPU寄存器: IER=0x0000;//禁止所有CPU中断;
          IFR=0x0000;//清空CPU中断标志寄存器;
          DINT  asm(" setc INTM");//禁止所有可屏蔽中断
          PIECTRL.ENPIE=0;//禁止所有PIE中断;
          PIEIERx  =0x0000;//禁止各PIE中断;
          PIEIFRx  =0x0000;//清楚各PIE中断标志;(不需要)
          PIEACK=0xffff;//清除所有PIE组向CPU申请的中断标志位
c编程步骤
3,设置开启中断:
在相关外设控制寄存器中使能对应中断,如: 
SCIRegsA.SCICTRL2 |=0x03;//使能SCI_A的发送和接收中断;
PIEIERx |=PINTx;//使能对应的PIE中断;
PIECTRL.ENPIE=1;// 使能所有PIE中断;
PieVectTable.SCI_RxInt=& SCI_RxInt_ISR;//设置中断向量表中对应中断的中断服务程序入口地址,或采用原有中断向量表初始化值;
EINT  asm(" clrc INTM");//使能所有可屏蔽中断
IER |=MINTx;//使能对应的CPU中断;
三:
1,CPU识别相应中断后自动完成下面的工作:
保护中断现场;
清除对应的IFR位;IFRx=0;
清除对应的IER位;IERx=0;
置位INTM=1,屏蔽所有可屏蔽中断;
清除EALLOW位,即关闭EALLOW保护,
EALLOW=0;
2,获取中断向量(中断服务程序入口地址)
CPU根据当前PIERx和PIFRx的值自动获取中断向量的地址,并清除对应的PIFRx.y, 表明该中断已经被识别和处理,CPU跳转至对应的中断服务程序;
3执行中断服务程序
向对应的PIEACKx位写1,从而使能PIEIFRx分组中的其他中断;
执行相应中断处理代码;
从新置位对应IERx=1位,从而从新使能对应的CPU中断;
从新清除INTM=0位,从新使能CPU对可屏蔽中断的响应;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。