28335学习笔记6——F28335中断系统

1.中断介绍

1.1 中断

中断的定义:当CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程就称为中断,引发中断的称为中断源。中断示意图如下所示:
在这里插入图片描述

1.2 F28335中断

中断源(片内外设中断源、片外中断源等)将中断请求信号传递给内核需要用到中断线,F28335的内部有16个中断线,其中包括2个不可屏蔽中断(RESET和NMI)与14个可屏蔽中断。可屏蔽中断通过相应的中断使能寄存器使用或者禁止产生的中断。在这14个可屏蔽中断中,TIM1和TIM2产生的中断请求通过INT13、INT14中断线到达CPU,这两个中断已经预留给了实时操作系统,因此剩下的12个可屏蔽中断可供外部中断和处理器内部单元使用。F28335的外设中断源共有58个,将其分配给12根中断线需要使用PIE(外设中断扩展模块)。

1.3 F28335中断机制

F28335 的中断采用的是 3 级中断机制, 分别是外设级中断、 PIE 级中断和 CPU级中断, 最内核部分为 CPU 级中断, 即 CPU 只能响应从 CPU 中断线上过来的中断请求, 但 F28335 中断源很多, CPU 没有那么多中断线, 在有限中断线的情况下,只能安排中断线进行复用, 其复用管理就有了中间层的 PIE 级中断, 外设要能够成功产生中断响应, 就要首先经外设级中断允许, 然后经 PIE 允许, 最终 CPU做出响应。 工作原理图如下:
在这里插入图片描述
(1)外设级中断
外设产生中断事件,则外设对应中断标志寄存器(IF)相应的位将自动置位,如外设中断使能寄存器(IE)也被软件控制置位,则外设产生的中断向PIE控制器发出中断申请。如(IE)没有使能,则该中断被屏蔽,但此时中断标志位寄存器的标志位将保持不变,一直处在中断置位状态,要使该中断信号消失,就要软件控制中断标志寄存器复位。多数外设需要在中断服务中手动复位中断标志寄存器。外设寄存器中的中断标志位必须软件清零
(2)PIE级中断
PIE通过一个8选1的多路选择器将8路外设和外部引脚的中断请求信号分为一组,共有12组。组内中断请求信号被复用为一个CPU中断。
在这里插入图片描述
PIE模块中每组都具有一个独立的中断标志寄存器PIEIFRx及一个中断使能寄存器PIEIERx,其中x代表1~12。一旦外设或外部引脚向PIE模块发出中断请求,则相应的中断标志位PIEIFx.y置1。如果相应的中断使能位PIEIEx.y=1,则PIE模块将检测该组的确认信号PIEACKx以判断CPU是否可以接受该组的中断请求信号。如果相应的 PIEACKx 位清零, PIE 向 CPU 申请中断;如果 PIEACKx置 1, PIE 将等待到相应的 PIEACKx 清零才向 CPU 申请中断。 PIE 通过对PIEACKx的位控制来控制每 1 组中只有 1 个中断能被响应, 一旦响应后, 就需要将 PIEACKX
相应位清零, 以让它能够响应该组中后边过来的中断。
(3)CPU级中断
接到PIE的中断请求,CPU中断标志位(IFR)置1。中断标志位锁存到标志寄存器后, 只有 CPU 中断使能寄存器(IER) 或中断调试使能寄存器(DBGIER)相应的使能位和全局中断屏蔽位(INTM) 被使能时才会响应中断申请。CPU响应中断请求:首先自动将IERx、IFRx、EALLOW清零,将INTM置1,然后从PIE中断向量列表中读取中断服务函数的地址,转入中断服务函数地址处开始执行,执行完毕后返回。

1.4 F28335中断向量列表的映射地址

CPU响应中断,就是去执行响应中断服务程序。即将当前正在执行的程序压入堆栈,跳转到中断服务程序入口地址(中断向量)。这个中断向量由2个16位寄存器存放。这些中断向量均连续存放在 RAM中, 这就构成了整个系统的中断向量表, 用户可以根据需要适当的对中断向量表
进行调整, 在响应中断时, CPU 将自动的从中断向量表中获取响应的中断向量。
F28335的中断向量列表可映射到4个不同的存储单元,由以下控制位决定:
(1)VMAP:状态寄存器ST1的第三位,器件复位后此位为1.通过写ST1寄存器或SEC/CLRC VMAP指令可改变此位的值。正常操作下保留此位为1.
(2)M0M1MAP:状态寄存器ST1的第11位,器件复位后此位为1.通过写ST1寄存器或SEC/CLRC M0M1MAP指令可改变此位的值。正常操作下保留此位为1.M0M1MAP=0仅供TI调试使用。
(3)ENPIE:PIECTRL寄存器的最低位,此位的默认值为0(即PIE禁止工作),通过写PIECTRL寄存器可改变此位的值。
上电复位后中断列表映射为BROM向量,在复位和引导完成后,应由用户代码初始化PIE向量列表,将向量列表映射为PIE向量。

2.中断配置

PIE 模块 8 个中断分成一组与外部中断一起共用一个 CPU 中断, 总共有 12组中断(INT1-INT12 。每组中断有相应的中断标志(PIEIFR) 和使能寄存器(PIEIER),这些寄存器控制 PIE 向 CPU 申请中断。 同时 CPU 还根据 PIEIFR 和PIEIER 寄存器确定执行哪个中断服务程序。
(1)使能外设对应的PIE中断
比如,外部中断XINT1,它由PIE组1的第4线连接。因此可由PIE控制寄存器中相应中断使能位来控制

PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能 PIE 组 1 的 INT4

(2)使能外设中断
这个是由外设相关中断使能位来控制

XIntruptRegs.XINT1CR.bit.ENABLE= 1; // 使能 XINT1

(3)指定中断向量表中断服务函数地址

EALLOW; // 修改被保护的寄存器, 修改前应添加 EALLOW 语句
PieVectTable.XINT1 = &EXTI1_IRQn;
EDIS; // EDIS 的意思是不允许修改被保护的寄存器

(4)使能CPU中断及全局中断

IER |= M_INT1; // 使能 CPU 中断 1(INT1),为了不干扰到其他中断,采用或的方式(有1执行,其他不变)
EINT; // 开全局中断

(5)编写中断服务函数(在 DSP28335软件开发中, 要在中断服务函数名前加上关键字 interrupt)

interrupt void EXTI1_IRQn(void)
{
    
    
...功能程序
}

猜你喜欢

转载自blog.csdn.net/qq_39529052/article/details/106389134