DSP2833x实验_外部中断实验
1.外部中断简介
F28335共支持7个外部中断XINT1-XINT7,其中XINT1-XINT2只能对GPIO0-GPIO31配置;XINT3-XINT7只对GPIO32-GPIO63配置。XINT13还有一个不可屏蔽的外部中断XNMI共用中断源。每一个外部中断可以被选择为正边沿或负边沿触发,也可以被使能或者禁止(包括XNMI)。可屏蔽中断单元包括一个16位增计数器,该计数器在检测到有效中断边沿时复位为0,同时用来准确记录中断发生的时间。
相关寄存器:
(1)外部中断控制寄存器(XINTnCR)。(n:1~7)
外部中断配置:
外部中断相关函数及寄存器在DSP2833x_PieCtrl.c、DSP2833x_PieVect.c、DSP2833x_GlobalVariableDefs.c文件及其对应的头文件内查找到
(1)使能CPU级中断,并初始化PIE控制器寄存器和PIE中断向量表
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
(2)使能IO口时钟,配置IO口为输入
(3)设置 IO 口与中断线的映射关系
比如我们K1它是连接在GPIO12上,要使用外部中断功能可以是外部中断1或者外部中断2,假如使用外部中断1,代码如下:
EALLOW;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12; // XINT1是GPIO12
EDIS;
(4)指定中断向量表中断服务函数地址
比如外部中断1,其设置如下:
EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句
PieVectTable.XINT1 = &EXTI1_IRQn;
EDIS; // EDIS的意思是不允许修改被保护的寄存器
(5)使能外设对应的PIE中断
比如外部中断1,它是由PIE组1的第4通道连接
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能PIE组1的INT4
EDIS;
(6)设置外部中断触发方式并使能中断
外部中断的触发方式及中断使能是由XIntruptRegs寄存器控制,具体实现代码如下:
XIntruptRegs.XINT1CR.bit.POLARITY = 0; // 下降沿触发中断
XIntruptRegs.XINT1CR.bit.ENABLE= 1; // 使能XINT1
(7)使能CPU级中断及全局中断
IER |= M_INT1; // 使能CPU中断1(INT1)
EINT; // 开全局中断
ERTM;
(8)编写外部中断服务函数
例如外部中断1的中断服务函数:
interrupt void EXTI1_IRQn(void)
{
...功能程序
}
代码实现: