DSP_F28335入门(4)——中断系统及应用

F28335内部有16个中断线,其中包括2个不可屏蔽中断(RESET和NMI)与14个可屏蔽中断。可屏蔽中断中,定时器1和定时器2产生的中断请求通过INT13、INT14中断线到达CPU,这两个中断已经预留给了实时操作系统,因此剩下12个可屏蔽中断可供外部中断和处理器内部的单元使用。
然而,F28335的外设中断源远不止12个,有58个,如何将这58个外设中断源分配给12个中断线,这就需要F28335PIE**(peripheral interrupt expansion,外设中断扩展模块)**来完成。

3级中断机制

F28335的中断采用3级中断机制,分别为外设级中断、PIE级中断和CPU级中断。
(1)外设级中断
外设产生中断事件,那么该外设对应的中断标志寄存器(IF)相应的位将被自动置位,如果该外设对应中断使能寄存器(IE)中的相应使能位置位,则外设产生的中断将向PIE控制器发出中断请求。
进入中断服务程序后,有部分硬件外设会自动复位中断标志寄存器,多数外设需要在中断服务中编程复位中断标志寄存器。
(2)PIE级中断
F28335内部集成了多种外设,每个外设都会产生一个或者多个外设级中断。由于CPU没有能力处理所有外设级的中断请求,因此F28335的CPU让出了12个中断线交给PIE模块进行复用管理。
PIE将外设中断分成了12个组,分别对应CPU的12个可屏蔽中断线,每一组由8个外设级中断组成。
与外设级中断类似,在PIE模块内每组中断由相应的中断标志位(PIEIFRx)和使能位(PIE-IERx.y)。除此之外,每组PIE中断(INT1~INT12)有一个响应标志位(PIEACK,answer back)
一旦PIE控制器有中断产生,相应的中断标志位(PIEIFRx.y)将置1。如果相应的PIE中断使能位也置1,则PIE将检查相应的PIEACKx以确定CPU是否准备响应该中断。如果相应的PIEACKx位清零,PIE向CPU申请中断;如果PIEACKx置1,PIE将等待到相应的PIEACKx清零才向CPU申请中断。PIE通过对PIEACKx的位控制来控制每一组中只有一个中断能被响应,一旦响应后,就需要将PIEACKx相应位清零,以让它能够响应该组中后边过来的中断。
(3)CPU级中断
一旦CPU申请中断,CPU级中断标志位(IFR)将置1。中断标志位锁存到标志寄存器后,只有CPU中断使能寄存器(IER)或中断调试使能寄存器(DBGIER)相应的使能位和全局中断屏蔽位(INTM)被使能时才会响应中断申请。
CPU级使能可屏蔽中断采用CPU中断使能寄存器(IER)还是中断调试使能寄存器(DBGIER)与中断处理方式有关。标准处理模式下,使用IER,实时调试(Real-time Debug)且CPU被停止(Halt)时,才使用中断调试使能寄存器(DBGIER),此时INTM不起作用。

中断向量(初始化中断向量表,把所有中断函数地址先放到一个结构体里PieVectTableInit,再把这个结构体逐项付给中断向量表PieVectTable,根据CMD文件分配到指定位置。)

中断服务程序的入口地址就是中断向量。
中断优先级:有可能16条中断线上的中断请求同时到达CPU,这时就要对各个中断请求进行优先级定义。
每组PIE控制的8个中断优先级依次是从INTx.1~INTx.8。
中断向量的映射方式
实际应用中,F28335只是以哦那个PIE中断向量表映射区域。由以下信号控制。
正常操作时,VMAP=1,M0M1MAP=1,ENPIE复位时默认位0,复位后通过PIECTRL寄存器的值进行修改。

你可能感兴趣的:(DSP_F28335)