X2812的中断系统

中断概念

中断(Interrupt)是硬件和软件驱动事件,它使得CPU暂停当前的主程序,并转而去执行一个中断服务子程序
在DSP中,通常中断申请信号是由外围设备提出的,表示一个特殊的事件已经发生,请求CPU暂停正在执行的主程序,去处理相应的更为紧急的事件。
X2812 的中断系统从上至下分成了三级

  • CPU级中断
  • PIE级中断
  • 外设中断

CPU中断

在这里插入图片描述
可屏蔽中断的响应过程如上图所示。一共有14个中断向量,这14个中断向量从上到下,优先级依次降低

  1. 当某个可屏蔽中断提出请求时,将其在中断标志寄存器 IFR 中的中断标志位自动置位。
  2. CPU检测到 IFR 被置位后,接着会检测该中断是否被使能,也就是去读CPU中断使能寄存器 IER 中相应位的值。
  3. 如果IER 并未使能,那么CPU将不会理会此中断,直到其中断被使能为止。
  4. 如果IER 已经被使能,则CPU会继续检查全局中断 INTM 是否被使能
  5. 如果INTM 已经被使能,则CPU就会响应该中断,暂停主程序并转向执行相应的中断服务子程序。
  6. CPU响应中断后,IFR 中的中断标志位就会被自动清0,目的是使CPU能够去响应其他中断或者是该中断的下一次中断。

相关说明

IFR

在这里插入图片描述
IFR (Interrupt Flag Register),它的作用是表明有中断来了,上图为它的结构,若某一位为1,说明有一个中断未处理

IER

在这里插入图片描述
IER(Interrupt Enable Register) ,即中断使能寄存器,结构如上图所示,一共是16位,每一位都对应一个CPU中断,这个位的值就像开关的状态,1为打开,0为关闭。也就是说某一位为1,则相对应的中断就被使能,反之则屏蔽
其中, RTOSINT 为实时操作系统中断使能位;DLOGINT 为数据记录中断使能位;


PIE中断

在这里插入图片描述
专门处理外设中断的拓展模块(Peripheral Interrupt Expansion Block),简称外设中断控制器 PIE,它能够对各种中断请求源(来自外设或者其他外部引脚的请求)做出判断和相应的决策
在这里插入图片描述
由上图可知,PIE 一共可以支持96个不同的中断(空白部分表示尚未使用的中断,目前已经使用的有45个中断),并把这些中断分成了12个组,每个组有8个中断,而且每个组都被反馈到CPU内核的INT1~INT12这12条中断线中的某一条上。

相关说明

PIE控制器相关的寄存器由如下几类:

  • PIECTRL: PIE控制寄存器
  • PIEACK:PIE应答寄存器
  • PIEIER1~12:PIE,INT1~12组使能寄存器
  • PIEIFR1~12:PIE,INT1~12组标志寄存器
PIE中断使能寄存器

在这里插入图片描述
PIE控制器共有12个PIE中断使能寄存器PIEIERx(x=1~12),分别对应于PIE控制器的12个组,每组1个,用来设置组内中断的使能情况。而对应PIE组内各个中断单独使能和CPU中断使能寄存器IER类似。

PIE中断标志寄存器

在这里插入图片描述
PIE控制器共有12个PIE中断标志寄存器PIEIFRx,分别对应于PIE控制器的12个组,每组1个。
PIEIFR寄存器的每一位代表对应中断的请求信号,当该位置1,表示相应的中断提出了请求,需要CPU响应。CPU取出相应的中断向量时,也就是说当CPU响应该中断时,该标志位被清0。
与CPU中断标志寄存器IFR类似。

PIE中断应答寄存器

在这里插入图片描述
若PIE中断控制器有中断产生,则相应的中断标志位将置1。若相应的PIE中断使能位也置1,则PIE将检查PIE中断应答寄存器PIEACK,以确定CPU是否准备响应该中断。

  • 若相应的PIEACKx 清0,PIE便向CPU申请中断
  • 若相应的PIEACKx 置1,那么PIE将等待直到相应的PIEACKx清0才向CPU申请中断

PIEACK的第0位对应PIE第1组中断的CPU响应情况,以此类推,第11位表示PIE第12组中断的CPU响应情况。

PIE控制寄存器

在这里插入图片描述
PIEVECT(位15~1),这些位表示从PIE向量表取回的向量地址。最低位忽略,只显示位1到位15地址。用户可以读取向量值,以确定取回的向量是由哪一个中断产生的
ENPIE:从PIE块取回向量使能。

  • 为1:所有向量取自PIE向量表
  • 为0:PIE块无效,向量取自引导ROM的CPU向量表或XINTF7区外部接口

X281x的三级中断系统分析

在这里插入图片描述
如上图所示,X281x的中断采用的是三级中断机制,分别为

  • 外设级
  • PIE级
  • CPU级

对于某一具体的外设中断请求,只要有任意一级不许可,CPU最终都不会响应该外设中断。

外设级

步骤:

  1. 假设在程序执行过程中,某一个外设产生了一个中断事件
  2. 在这个外设的某个寄存器与该中断事件相关的中断标志位(IF=Interrupt Flag)被置为1.
  3. 该中断相应的中断使能位(IE=Interrupt Enable)已经被置位,也就是值为1
  4. 该外设就会向PIE控制器发出一个中断请求
  5. 相反,虽然中断事件已经发生了,相应的中断标志位也被置位了,但是该中断没有被使能,也就是中断使能位值为0,那么外设也不会向PIE控制器提出中断请求

注意:

  1. 第5点中, 虽然外设不会向PIE控制器提出中断请求,但是相应的中断标志位会一直保持置位状态,直到用程序将其清除为止。当然,在中断标志位保持置位状态时,一旦该中断被使能,那么外设会立即向PIE发出中断请求
  2. 手动清除外设寄存器中的中断标志位
//清除CPU定时器0中断标志位TIF的语句如下:
CpuTimer0Regs.TCR.bit.TIF = 1; //清除定时器中断标志位

总结:

  • 外设中断的使能,需要将与该中断相关的外设寄存器中的中断使能位置1
  • 外设中断的屏蔽,需要将与该中断相关的外设寄存器中的中断使能位置0
  • 外设中断标志位的清除,需要将与该中断相关的外设寄存器中的中断标志位置1
PIE级

步骤:

  1. 外设中断向PIE提出中断请求
  2. PIE中断标志寄存器PIEIFRx的相关标志位被置位
  3. 若相应的PIEIERx相关的中断使能位被置位
  4. PIEACK相应位的值为0,则PIE控制器便会将该外设中断请求提交给CPU
  5. 若相应的PIEIERx相关的中断使能位没有被置位 或 PIEACK相应位的值为1,PIE控制器都暂时不会响应外设中断

举例:

  1. CPU定时器0的周期中断被响应了
  2. PIEACK的第0位(对应于PIE1,即INT1)就会被置位,并且一直保持直到手动清除这个标志位
  3. 党CPU在响应T0INT的时候,PIEACK的第0位一直是1,这时如果PIE1组内发生了其他的外设中断,则暂时不会被PIE控制器响应并发送给CPU
  4. 等到PIEACK的第0位被复位之后,若第3步中的中断请求还存在,那么PIE控制器会立即把请求中断发送给CPU

注意:

  1. 将PIE级的中断和外设级的中断相比之后发现,外设中断的中断标志位是需要手动清除的,而PIE级的中断标志位都是自动置位或清除的。但是PIE级多了一个PIEACK寄存器,它相当于一个关卡,同一时间只能放一个中断过去,只有等到这个中断被响应完成之后,再给关卡一个放行命令后,才能让同组的下一个中断过去
  2. 每个外设中断被响应之后,一定要对PIEACK的相关位进行手动复位,以使得PIE控制器能够响应同组内的其他中断。
PieCtrl.PIEACK.bit.ACK1 = 1; //响应PIE组1内的其他中断

总结:

  • PIE中断的使能,需要使能某个外设中断,就得将其相应组的使能寄存器PIEIERx的相应位进行置位
  • PIE中断的屏蔽,与上相反
  • PIE应答寄存器PIEACK相关位的清除,以使得CPU能够响应同组内的其他中断
CPU级

步骤:

  1. 某一个外设中断请求通过PIE发送到CPU
  2. CPU中断标志寄存器IFR中相对应的中断标志位INTx就会被置位
  3. 该状态就会被锁存在寄存器IFR
  4. CPU不会马上执行相应的中断,而是检查IER寄存器中相应位的使能情况和CPU寄存器ST1全局中断屏蔽位INTM的使能情况
  5. IER中的相关位被置位,且INTM的值为0,则中断就会被CPU响应

举例:

  1. CPU定时器0的周期中断T0INT发送到CPU
  2. IFR第0位INT1 置位
  3. IER的第0位INT1被置位,INTM的值为0
  4. CPU响应定时器0的周期中断T0INT

注意:

  1. CPU接到了中断请求,比发现可以去响应时,就得停止正在执行的程序,转而去响应中断程序,它必须做一些准备工作。
    ① CPU将相应的IFR位进行清除,EALLOW也被清除,INTM被置位。
    ② 将正在处理的数据放入堆栈中
    然后才会从PIE向量表中取出对应的中断向量ISR,转而去执行中断服务子程序
  2. CPU级中断标志位的置位和清除也都是自动完成
全过程

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值