请问TMS320F28335外部中断如何配置?配置注意事项有哪些?

oiewjrj ( 楼主 ) 2018-6-14 07:15:31  显示全部楼层
本帖最后由 一只耳朵怪 于 2018-6-14 10:57 编辑

在这里我们要十分清楚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;  // This is needed to write to EALLOW protected registers   
   PieVectTable.XINT2 = &ISRExint; //告诉中断入口地址  
   EDIS;    // This is needed to disable write to EALLOW protected registers   
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;          // Enable the PIE block使能PIE  
    PieCtrlRegs.PIEIER1.bit.INTx5= 1;   //使能第一组中的中断5  
   IER |= M_INT1;                              // Enable CPU 第一组中断
EINT;   // Enable Global interrupt INTM  
    ERTM;   // Enable Global realtime interrupt DBGM   
也就是说,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只能对GPIO0—GPIO31配置;外部中断3和4、5、6、7只对GPIO32—GPIO63配置。

1个回复

Ehunt 发表于 2018-6-14 07:31:29
总结得不错。而且还是中文版。
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /9 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 粤ICP备14022951号-2 )

GMT+8, 2018-6-23 08:42 , Processed in 0.473085 second(s), 23 queries , Memcache On.

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表