资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,DSP,外围中断扩展,Peripheral Interrupt Expansion(PIE),PIE,将外围高达,96,个中断源每,8,个分成一组,分为,12,组中断,每组一个中断输入线进,CPU(INT1-INT12),。,96,个中断每个都有一个中断矢量的入口地址,存放在,RAM,中的指定地址,在,CPU,响应某一中断时,会自动到相应中断入口地址寻找中断服务程序,执行中断相应操作。,各个中断的开放或禁止由,CPU,控制,PIE,和,CPU,级各个中断使能位完成。,CPU,中断系统,中断响应的三个级别,中断响应的三个级别,外设级,一旦外设产生中断事件,对应外设的中断标志位寄存器相应位置,1,。如果对应中断使能位设为,1,,则外设中断请求信号,INTx.y(x,=112,y=18),送到,PIE,控制器。,PIE,分组情况,PIE,级,PIE,级每个中断都有一个标志位,PIEIFRx.y,和一个中断使能位,PIEIERx.y,。,对每个,CPU,中断组,INT112,都有一个应答位,PIEACKx,。,一旦,PIE,控制中产生中断请求,则相应,PIE,中断标志位,PIEIFRx.y,就置,1,。如果中断使能位,PIEIERx.y,也为,1,,则,PIEACKx,决定,CPU,是否相应该中断。如果,PIEACKx,清,0,,则,PIE,级中断进入,CPU,。如果,PIEACKx,=1,,则等待该位变,0,后将,PIE,中断送入,CPU,。,CPU,级,当,PIE,级中断送入,CPU,后,,CPU,级中断标志位寄存器的标志位就置,1,。如果,CPU,的中断使能寄存器,IER,相应位置,1,,且全局中断屏蔽位,INTM(ST1,寄存器的第,0,位,),为,0,,,CPU,就响应中断,进入中断服务程序。,PIE,分组情况,中断响应,在进入中断服务子程序前,,DSP,硬件会自动将,IFRx,清,0,,将,CPU,内部的一些关键寄存器内容(例如,PC,的原来内容)入堆栈保存,然后,将,IERx,清,0,,,INTM,置,1,,禁止其他中断响应,避免中断嵌套。,中断服务程序响应完成后,原来保存内容从中断弹出,但在返回前,需将外设寄存器中断标志位软件清,0,,以便外设能再次产生中断。,中断响应过程,中断控制寄存器,PIECTRL,寄存器,151 PIEVECT,表示,PIE,中断向量入口地址。,0 ENPIE,使能,PIE,矢量。,ENPIE=1,从,PIE,中断向量表获取地址。,ENPIE=0,禁止从,PIE,中断向量表获取地址。,PIEVECT,ENPIE,PIEACK,寄存器,110 PIEACK,中断,INT1-INT12,应答控制位。,写入,1,到对应中断位可清除该位,清除后当该组中,断请求到来时,,CPU,允许并响应对应的,PIE,。,RESERVED,PIEACK,PIE,标志位寄存器,(,PIEIFR,x,=1,12,),外设中断标志位。每一位对应一个外设级中断。,当某一外设产生中断时,相应标志位置,1,,中断被响应,后,被清,0,INTx,中断,X,指,CPU,级中断,INT1-INT12,。,INTx.8,INTx.7,INTx.6,INTx.5,INTx.4,INTx.3,INTx.2,INTx.1,0,7,PIE,中断使能寄存器,(,PIEIER,x,=1,12,),外设中断使能控制位。每一位对应一个外设级中断。,当某一外设产生中断时,相应标志位置,1,。当相应使能位被置,1,时,使能相应中断服务程序。设置为,0,时,中断响应被禁止。,INTx.8,INTx.7,INTx.6,INTx.5,INTx.4,INTx.3,INTx.2,INTx.1,0,7,CPU,级中断标志位寄存器,(IFR),CPU IFR,为,CPU,级中断标志位寄存器,用于辨别和清除中,断挂起。,向,IFR,写入,1,可清除中断标志位。,CPU,相应可屏蔽中断后,,CPU IFR,标志位自动清,0,,但相应外设寄存器的标志位需要用户软件清,0,。,INT8,INT7,INT6,INT5,INT4,INT3,INT2,INT1,0,7,RTOSINT,DLOGINT,INT14,INT13,INT12,INT11,INT10,INT9,8,15,CPU,级中断使能寄存器,(IER),CPU IER,为,CPU,级可屏蔽中断使能寄存器,,NMI,和,XRS,不在其中。,向,IER,写入,1,可使能中断。,INT8,INT7,INT6,INT5,INT4,INT3,INT2,INT1,0,7,RTOSINT,DLOGINT,INT14,INT13,INT12,INT11,INT10,INT9,8,15,头文件,Piectrl.h,中寄存器定义,struct,PIE_CTRL_REGS,union PIECTRL_REG PIECRTL;/PIE control register,union PIEACK_REG PIEACK;/PIE acknowledge,union PIEIER_REG PIEIER1;/PIE INT1 IER register,union PIEIFR_REG PIEIFR1;/PIE INT1 IFR register,union PIEIER_REG PIEIER2;/PIE INT2 IER register,union PIEIFR_REG PIEIFR2;/PIE INT2 IFR register,。,union PIEIER_REG PIEIER9;/PIE INT9 IER register,union PIEIFR_REG PIEIFR9;/PIE INT9 IFR register,union PIEIER_REG PIEIER10;/PIE INT10 IER register,union PIEIFR_REG PIEIFR10;/PIE INT10 IFR register,union PIEIER_REG PIEIER11;/PIE INT11 IER register,union PIEIFR_REG PIEIFR11;/PIE INT11 IFR register,union PIEIER_REG PIEIER12;/PIE INT12 IER register,union PIEIFR_REG PIEIFR12;/PIE INT12 IFR register,;,PIECTRL,定义,struct,PIECTRL_BITS,Uint16 ENPIE:1;/0 Enable PIE block,Uint16 PIEVECT:15;/15:1 Fetched vector address,;,union PIECTRL_REG,Uint16 all;,struct,PIECTRL_BITS bit;,;,定义,PIEIFR,寄存器,struct,PIEIFR_BITS,Uint16 INTx1:1;/0 INTx.1,Uint16 INTx2:1;/1,INTx,.,Uint16 INTx3:1;/2 INTx.3,Uint16 INTx4:1;/3 INTx.4,Uint16 INTx5:1;/4 INTx.5,Uint16 INTx6:1;/5 INTx.6,Uint16 INTx7:1;/6 INTx.7,Uint16 INTx8:1;/7 INTx.8,Uint16 rsvd:8;/15:8 reserved,;,union PIEIFR_REG,Uint16 all;,struct,PIEIFR_BITS bit;,;,中断设计举例,void,InitPieCtrl(void,),PieCtrl.PIECRTL.bit.ENPIE,=0;,0 ENPIE,使能,PIE,矢量。,ENPIE=1,从,PIE,中断向量表获取地址。,ENPIE=0,禁止从,PIE,中断向量表获取地址。,/,所有外设,PIE,中断使能位清,0,PieCtrl.PIEIER1.all=0;,PieCtrl.PIEIER2.all=0;,PieCtrl.PIEIER3.all=0;,PieCtrl.PIEIER4.all=0;,PieCtrl.PIEIER5.all=0;,PieCtrl.PIEIER6.all=0;,PieCtrl.PIEIER7.all=0;,PieCtrl.PIEIER8.all=0;,PieCtrl.PIEIER9.all=0;,PieCtrl.PIEIER10.all=0;,PieCtrl.PIEIER11.all=0;,PieCtrl.PIEIER12.all=0;,PIE,标志位寄存器,(,PIEIFR,x,=1,12,),外设中断标志位。每一位对应一个外设级中断。,当某一外设产生中断时,相应标志位置,1,,中断被响应,后,被清,0,INTx,中断,X,指,CPU,级中断,INT1-INT12,。,INTx.8,INTx.7,INTx.6,INTx.5,INTx.4,INTx.3,INTx.2,INTx.1,0,7,所有外设,PIE,中断标志位清,0,PieCtrl.PIEIFR1.all=0;,PieCtrl.PIEIFR2.all=0;,PieCtrl.PIEIFR3.all=0;,PieCtrl.PIEIFR4.all=0;,PieCtrl.PIEIFR5.all=0;,PieCtrl.PIEIFR6.all=0;,PieCtrl.PIEIFR7.all=0;,PieCtrl.PIEIFR8.all=0;,PieCtrl.PIEIFR9.all=0;,PieCtrl.PIEIFR10.all=0;,PieCtrl.PIEIFR11.all=0;,PieCtrl.PIEIFR12.all=0;,PieCtrl.PIECRTL.bit.ENPIE,=1;,PieCtrl.PIEACK.all,=0 xFFFF;,PieCtrl.PIECRTL.bit.ENPIE,=1;,/ENPIE=1,从,PIE,中断向量表获取地址。,/,PieCtrl.PIEACK.all,=0 xFFFF;,/,写入,1,到对应中断位可清除该位,清除后当该组中断请求到,来时,,CPU,允许并响应对应的,PIE,。,中断开放环节设定(以,SPI,接口通讯中断为例),PieCtrl.PIEIER6.bit.INTx1=1;,/SPI,的,SPIRXINTA,接收中断,PIE,使能,PieCtrl.PIEIER6.bit.INTx2=1;,/SPI,的,SPITXINTA,发送中断,PIE,使能,EALLOW;,PieVectTable.SPIRXINTA,=,EDIS;,/*,设置,IER,寄存器*,/,IER|=M_INT6;,EINT;/,开中断,
展开阅读全文