TMS320F28335外部中断总结
TMS320F28335外部中断总结
作者:Free文章来源:Free点击数:93更新时间:201*-8-26
在这里我们要十分清楚DSP的中断系统。C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI、定时器1和定时器2分别使用中断13
和14。这样还有12个中断都直接连接到外设中断扩展模块PIE上。说的简单一点就是PIE通过12根线与28335核的12个中断线相连。而PIE的另外
一侧有12*8根线分别连接到外设,如AD、SPI、EXINT等等。这样PIE共管理12*8=96个外部中断。这12组大中断由28335核的中断寄存器IER来控
制,即IER确定每个中断到底属于哪一组大中断(如IER|=M_INT12;说明我们要用第12组的中断,但是第12组里面的什么中断CPU并不知道需
要再由PIEIER确定)。接下来再由PIE模块中的寄存器PIEIER中的低8确定该中断是这一组的第几个中断,这些配置都要告诉CPU(我们不难想
象到PIEIER共有12总即从PIEIER1-PIEIER12)。另外,PIE模块还有中断标志寄存器PIEIFR,同样它的低8位是来自外部中断的8个标志位,同
样CPU的IFR寄存器是中断组的标志寄存器。由此看来,CPU的所有中断寄存器控制12组的中断,PIE的所有中断寄存器控制每组内8个的中断。
除此之外,我们用到哪一个外部中断,相应的还有外部中断的寄存器,需要注意的就是外部中断的标志要自己通过软件来清零。而PIE和CPU的
中断标志寄存器由硬件来清零。
EALLOW;//ThisisneededtowritetoEALLOWprotectedregisters
PieVectTable.XINT2=&ISRExint;//告诉中断入口地址
EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters
PieCtrlRegs.PIECTRL.bit.ENPIE=1;//EnablethePIEblock使能PIE
PieCtrlRegs.PIEIER1.bit.INTx5=1;//使能第一组中的中断5
IER|=M_INT1;//EnableCPU第一组中断
EINT;//EnableGlobalinterruptINTM
ERTM;//EnableGlobalrealtimeinterruptDBGM
也就是说,12组中的每个中断都要完成上面的相同配置,剩下的才是去配置自己的中断。如我们提到的EXINT,即外面来个低电平我们就进入
中断,完成我们的程序。在这里要介绍一下,DSP的GPIO口都可以配置为外部中断口,其配置方法如下:
GpioCtrlRegs.GPBMUX2.bit.GPIO54=0;//选择他们是GPIO口
GpioCtrlRegs.GPBMUX2.bit.GPIO55=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO56=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO57=0;
GpioCtrlRegs.GPBDIR.bit.GPIO54=0;//选择他们都是输入口
GpioCtrlRegs.GPBDIR.bit.GPIO55=0;
GpioCtrlRegs.GPBDIR.bit.GPIO56=0;
GpioCtrlRegs.GPBDIR.bit.GPIO57=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO54=0;//GPIO时钟和系统时钟一样且支持GPIO
GpioCtrlRegs.GPBQSEL2.bit.GPIO55=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO56=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO57=0;
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL=54;//中断3选择GPIO
GpioIntRegs.GPIOXINT4SEL.bit.GPIOSEL=55;
GpioIntRegs.GPIOXINT5SEL.bit.GPIOSEL=56;
GpioIntRegs.GPIOXINT6SEL.bit.GPIOSEL=57;XIntruptRegs.XINT3CR.bit.POLARITY=0;//触发模式为下降沿触发
XIntruptRegs.XINT4CR.bit.POLARITY=0;
XIntruptRegs.XINT5CR.bit.POLARITY=0;
XIntruptRegs.XINT6CR.bit.POLARITY=0;
XIntruptRegs.XINT3CR.bit.ENABLE=1;//使能中断
XIntruptRegs.XINT4CR.bit.ENABLE=1;
XIntruptRegs.XINT5CR.bit.ENABLE=1;
XIntruptRegs.XINT6CR.bit.ENABLE=1;
注意一点就是外部中断1和2只能对GPIO0GPIO31配置;外部中断3和4、5、6、7只对GPIO32GPIO63配置。
扩展阅读:TMS320F28335外部中断总结
TMS320F28335外部中断总结
作者:Free文章来源:Free点击数:93更新时间:201*-8-26
在这里我们要十分清楚DSP的中断系统。C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI、定时器1和定时器2分别使用中断13
和14。这样还有12个中断都直接连接到外设中断扩展模块PIE上。说的简单一点就是PIE通过12根线与28335核的12个中断线相连。而PIE的另外
一侧有12*8根线分别连接到外设,如AD、SPI、EXINT等等。这样PIE共管理12*8=96个外部中断。这12组大中断由28335核的中断寄存器IER来控
制,即IER确定每个中断到底属于哪一组大中断(如IER|=M_INT12;说明我们要用第12组的中断,但是第12组里面的什么中断CPU并不知道需
要再由PIEIER确定)。接下来再由PIE模块中的寄存器PIEIER中的低8确定该中断是这一组的第几个中断,这些配置都要告诉CPU(我们不难想
象到PIEIER共有12总即从PIEIER1-PIEIER12)。另外,PIE模块还有中断标志寄存器PIEIFR,同样它的低8位是来自外部中断的8个标志位,同
样CPU的IFR寄存器是中断组的标志寄存器。由此看来,CPU的所有中断寄存器控制12组的中断,PIE的所有中断寄存器控制每组内8个的中断。
除此之外,我们用到哪一个外部中断,相应的还有外部中断的寄存器,需要注意的就是外部中断的标志要自己通过软件来清零。而PIE和CPU的
中断标志寄存器由硬件来清零。
EALLOW;//ThisisneededtowritetoEALLOWprotectedregisters
PieVectTable.XINT2=&ISRExint;//告诉中断入口地址
EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters
PieCtrlRegs.PIECTRL.bit.ENPIE=1;//EnablethePIEblock使能PIE
PieCtrlRegs.PIEIER1.bit.INTx5=1;//使能第一组中的中断5
IER|=M_INT1;//EnableCPU第一组中断
EINT;//EnableGlobalinterruptINTM
ERTM;//EnableGlobalrealtimeinterruptDBGM
也就是说,12组中的每个中断都要完成上面的相同配置,剩下的才是去配置自己的中断。如我们提到的EXINT,即外面来个低电平我们就进入
中断,完成我们的程序。在这里要介绍一下,DSP的GPIO口都可以配置为外部中断口,其配置方法如下:
GpioCtrlRegs.GPBMUX2.bit.GPIO54=0;//选择他们是GPIO口
GpioCtrlRegs.GPBMUX2.bit.GPIO55=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO56=0;
GpioCtrlRegs.GPBMUX2.bit.GPIO57=0;
GpioCtrlRegs.GPBDIR.bit.GPIO54=0;//选择他们都是输入口
GpioCtrlRegs.GPBDIR.bit.GPIO55=0;
GpioCtrlRegs.GPBDIR.bit.GPIO56=0;
GpioCtrlRegs.GPBDIR.bit.GPIO57=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO54=0;//GPIO时钟和系统时钟一样且支持GPIO
GpioCtrlRegs.GPBQSEL2.bit.GPIO55=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO56=0;
GpioCtrlRegs.GPBQSEL2.bit.GPIO57=0;
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL=54;//中断3选择GPIO
GpioIntRegs.GPIOXINT4SEL.bit.GPIOSEL=55;
GpioIntRegs.GPIOXINT5SEL.bit.GPIOSEL=56;
GpioIntRegs.GPIOXINT6SEL.bit.GPIOSEL=57;XIntruptRegs.XINT3CR.bit.POLARITY=0;//触发模式为下降沿触发
XIntruptRegs.XINT4CR.bit.POLARITY=0;
XIntruptRegs.XINT5CR.bit.POLARITY=0;
XIntruptRegs.XINT6CR.bit.POLARITY=0;
XIntruptRegs.XINT3CR.bit.ENABLE=1;//使能中断
XIntruptRegs.XINT4CR.bit.ENABLE=1;
XIntruptRegs.XINT5CR.bit.ENABLE=1;
XIntruptRegs.XINT6CR.bit.ENABLE=1;
注意一点就是外部中断1和2只能对GPIO0GPIO31配置;外部中断3和4、5、6、7只对GPIO32GPIO63配置。简简单单DSP”系列学习活动第四期中断结构学习
1、外围帧寄存器2812将外围帧寄存器分为3个空间,分别是:外围帧0:直接映射到
CPU存储器总线外围帧1:映射到32位外围总线外围帧2:映射到16位外围总线,只允许16操作这里所说的外围帧寄存器就是外设寄存器,如ADC寄存器。映射就是分配地址,外围一个地址,CPU一个地址,外围地址映射到CPU地址上。(1)有的寄存器受保护,对其进行操作的时候好,要屏蔽保护(EALLOW),操作完在
开启保护(EDIS).
(2)外围中断扩展PIE外设寄存器中的中断标志位必须由软件清0,才能允许下一次中
断进入,而且每次中断后要把PIEACKx清0,只有PIEACKx=0,才可以把中断送到CPU级中断分为3级:a、外设级b、PIE级c、CPU级下面分别介绍这个不同的中断级以及这3级的联系a、外设级一旦外设产生了中断,对应的外设中断标志寄存器中的中断标志位IF就会置位,如果此时对应的中断使能位设为1,那么外设中断信号可以送到PIE控制器,如果外设的中断被禁止输入进来,那么外设中断标志位保持为1,直到软件清0。外设级和PIE级的联系就在外设中断使能位那了,实际外设的中断使能位使能的就是允许外设中断进入PIE级,相当于PIE级的中断源,就像外设的中断源一样,有了中断事件,外设中断标志位就会置位,这里也是外设级就是PIE级得中断事件,有了外设级的中断标志位置位,中断使能位使能,那么PIE级的中断标志位才会置1.注意的是外设中断标志寄存器中的中断标志位必须由软件清0,才能允许下一次中断进入。b、PIE级PIE级有两中寄存器,一种是中断标志寄存器PIEIFRx,上面已经说过他跟外设级的联系,另一个是中断使能寄存器PIEIERx,这个跟外设级的中断使能寄存器功能差不多,实现的是和CPU级的联系.PIE级还有两个寄存器,一个是控制寄存器PIECTRL,这个是控制整个PIE级的,还有一个应答寄存器PIEACK,在PIEIFRx置位,PIEIERx使能还要PIEACKx清0才能把中断送到CPU级。这里注意的是PIEIFRx由硬件清0,但是PIEACKx要由软件清0.c、CPU级CPU级是最终控制中断响应的,也是有两种寄存器,一个是中断标志寄存器IFR,另一个是中断使能寄存器IER。IFR是这三级中断的最终的中断标志位,IER是这三级中断的最终中断使能位,只有这三级中断标志位同时置位,三级中断同时使能,这里还有一个CPU级的中断屏蔽位INTM,在以上条件满足的前提下,中断屏蔽位INTM=0,CPU才能响应中断,找到中断向量,跳转到中断函数,执行中断操作,CPU级的中断标志位由硬件清0,在中断函数中不用管。这就是它的中断过程。3、96个中断介绍2812分为12组中断,每组中断有8个中断源,以INTx.y表示,其中x是组(x=1~12),y(y=1~8)是组中的位.在配置中断的时候,外设级的中断使能位要使能;PIECTRL寄存器使能PIE;要知道INTx.y中的xy是多少,找到PIEIERx(x=1~12)的x是多少,使能PIEIERx;PIEACKx(x=1~12)的x是多少给其清0;IERx(x=1~12)的x是多少,使能IERx;中断屏蔽位INTM=0;中断函数中要处理的:外设中断标志位软件清0PIEACKx(x=1~12)软件清0;4、C代码分析以定时器0的C代码分析timer0的中断向量INT1.7(x=1,y=7),用到的PIE级的中断使能寄存器是PIEIER1,CPU级的IER1.在2812的库函数中有一个定义中断入口地址的函数,用户的中断函数内容可以在这里面写,就不容另外赋中断地址了。中断函数入口地址interruptvoidTINT0_ISR(void)
。在DSP复位后,进入中函数前,看门狗开着的,所以在进入中函数后第一件事情是关看门狗,在这个函数里面InitSysCtrl();中断是开着的需要关闭(DINT;),PIE寄存器(InitPieCtrl();//初始化pie寄存器)(IER=0x0000;//禁止所有的中断IFR=0x0000;)、中断向量表是没有初始化的,所以要初始化(InitPieVectTable();//初始化pie中断向量表)。InitSysCtrl();//初始化cpuDINT;//关中断
InitPieCtrl();//初始化pie寄存器IER=0x0000;//禁止所有的中断IFR=0x0000;
InitPieVectTable();//初始化pie中断向量表EALLOW;
//ThisisneededtowritetoEALLOWprotectedregisters
PieVectTable.TINT0=&cpu_timer0_isr;//指定中断服务子程序,这个地方要是用到了DSP的库函数DSP281X_DefaultIsr()函数就不需要了。EDIS;
InitCpuTimers();//初始化定时器0
ConfigCpuTimer(&CpuTimer0,150,9.75);//配置你要定时的时间StartCpuTimer0();//定时器开始计数
PieCtrlRegs.PIEIER1.bit.INTx7=1;//使能PIE级中断PIEIERx中的x=1,即使能的12组中的第1组第七个
IER|=M_INT1;//使能CPU级的中断第1组EINT;//使能INTMERTM;
//使能仿真时DBGM5、在中断函数中要做的interruptvoidTINT0_ISR(void)//CPU-Timer0{
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//PIEACK清0CpuTimer0Regs.TCR.bit.TIF=1;//外设中断标志位清CpuTimer0Regs.TCR.bit.TRB=1;//重新装载}
友情提示:本文中关于《TMS320F28335外部中断总结》给出的范例仅供您参考拓展思维使用,TMS320F28335外部中断总结:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。