第六章 中断系统原理与应用
(3)I/O初始化。对于这一步,主要是针对那些 需要通过I/O口向CPU申请中断的中断源而言的。 (4)设臵中断服务函数地址。设臵中断服务函数 的地址就是把我们所编写的中断服务函数的地址 赋予相应的函数指针给中断向量寄存器。 (5)设臵中断触发方式。这一步需要选择触发方 式:有上升沿、下降沿、双沿、低电平、高电平 触发方式。 (6)使能中断对应的中断位,设臵 VIC0INTENABLE特定位为1。 (7)取消中断屏蔽,等待中断。
6. GPIO中断组指定优先级寄存器 (GPIO_INT_GRPFIXPRI) 该寄存器指定最高优先级的组名,并且优先级是 顺序排列的,例如最高优先级为GPC0_INT,则 下一优先级为GPC1_INT,而不是GPA0_INT。 参数设臵如下表所示:
7. GPIO中断指定优先级寄存器( GPA0_INT_FIXPRI) 该寄存器通过[2:0]的值指定每组端口中的某一位 拥有最高优先级,最大值为7,设臵时应根据端口 位数不同调整最大值。与 GPIO_INT_GRPFIXPRI相同,优先级是顺序排 列的。
10. 外部中断相关寄存器 S5PV210的GPH0/1/2/3引脚可外接32个中断源, 根据第5章的介绍可以知道,GPHnCON每四位代 表一个引脚,当相应位的值为1111时,对应的引 脚可连接外部中断源。 与GPIO中断相同,外部中断同样有对应的外部中 断控制寄存器(EXT_INT_N_CON)、外部中断 筛选寄存器(EXT_INT_N_FLTCON0)、外部中 断挂起寄存器、外部中断屏蔽寄存器,用法同 GPIO相关寄存器大体相同。
VIC0INTENABLE寄存器说明:
前面是介绍的5个总的中断控制器。
4. GPIO中断控制寄存器(GPA0_INT_CON) S5PV210共有146个GPIO中断,分为22组,分别 是GPA0、GPA1、GPB、GPC0、GPC1、GPD0 、GPD1、GPE0、GPE1、GPF0、GPF1、GPF2 、GPF3、GPG0、GPG1、GPG2、GPG3、GPJ0 、GPJ1、GPJ2、GPJ3和GPJ4。各组相应的寄存 器的用法大致相同,以GPA0为例。 GPIO中断引脚可以设臵为不同的中断信号触发模 式,分别是电平触发、边沿触发、以及触发的极 性。
6.1.2 中断源、中断信号和中断向量
1. 中断源 中断源是指能够向MCU发出中断请求信号的部件 和设备。在一个系统中,往往存在多个中断源, 每个中断源都是为其需要的特定事件而设计的。 通常,在ARM等MCU中,中断源可分为内部中断 源和外部中断源。 在ARM内部集成了许多功能模块,如定时器、串 行通信接口、模/数转换器等,它们在正常工作时 ,并不需要CPU参与,而往往是达到某种状态或 到某一特定值时才需要程序介入对齐进行控制处 理,此时它们会发出中断请求,这类的中断源位 于ARM芯片的内部,称为内部中断源。Fra bibliotek
3. 中断向量 当中断源发出的中断信号被CPU检测到之后,如 果芯片的中断控制系统允许相应这个中断,那么 程序会跳转到一个固定的地址空间去执行,而这 个固定的地址就是中断入口地址,也就是中断向 量。中断向量往往是ARM内部硬件决定的。 对于MCU中的若干个中断源而言,每个中断源都 有各自的中断向量。这些中断向量一般在程序存 储空间中占用一个连续的地址空间段,称为中断 向量区。
6.3 S5PV210中断编写实例
6.3.1 中断控制程序编写步骤 1. 主程序需要进行的步骤 在主程序中,主要是对中断进行一些初始化配臵 ,让需要的中断能够正常工作。其主要的操作步 骤如下: (1)清除中断挂起寄存器,让所有中断挂起标志 都清零。 (2)设臵中断模式,如果要使用IRQ,则 VICnINTSELECT=0x0。当然,在上电或复位的 时候,VICnINTSELECT默认是清零的,因此在 这种情况下也可以忽略这步。
GPA0_INT_CON寄存器说明:
5. GPIO中断筛选寄存器(GPA0_INT_FLTCON0/1) S5PV210采用两种兼容的过滤器来探测中断,即延时过滤 和数字过滤。如果时钟不服务的话,可以选用有效区的延 时过滤。数字过滤是基于时钟的,因此它可以被使用于任 何时钟支持的区域。使用数字过滤时,需要设臵过滤宽度 ,alive区为6位,off区为7位。 为了稳定的探测所有中断,最好设臵筛选器使用,设臵时 要注意同一组中断有两个筛选寄存器,寄存器0和寄存器1 ,从寄存器0的最高位开始,每8位对应一个中断,其中最 高位是筛选器的使能位,其他7位表示过滤宽度,只有当 最高位为1时,后7位有效。
VIC0寄存器地址:
6.2.2 S5PV210的中断控制
1. 中断状态寄存器 S5PV210支持两个类型的中断模式:FIR和IRQ。 因此S5PV210有两种程序状态寄存器,分别是 VIC0IRQSTATUS和VIC0FIRSTATUS,每一个 中断源对应状态寄存器中的一位,共32位([31:0] ),如果某一位为0,代表相应中断源无效;为1, 相应中断源可用。 除此之外,S5PV210还有一个VIC0RAWINTR寄 存器,用来表示该中断在没有设臵 VIC0INTENABLE之前的中断状态,初值不确定 。
(3)进行故障处理。对系统的运行过程中出现的 难以预料的情况或故障,如掉电等,可以通过中 断系统及时向MCU请求中断,做紧急故障处理。 (4)待机状态的唤醒。 在许多嵌入式系统中,都设计了休眠等低功耗的 工作方式,而通常,由休眠等待机状态恢复到正 常工作状态玩玩也是利用中断信号来唤醒。
2
6.1 中断的概念
6.1.1 中断的基本概念和处 理过程 中断是指计算机在执行程 序的过程中,当出现异常 情况或特殊请求时,计算 机停止当前程序的运行, 保存当前程序运行处的必 要的参数和状态信息,然 后转向对这些异常情况或 特殊请求的处理,处理结 束后再返回当前程序的间 断处,继续执行原程序。
6.2.1 S5PV210的中断源
S5PV210的VIC分为四组,每组包含32个中断源, 共支持128个中断源,这其中包括像GPIO的EINT 、UART和Timer等大家熟悉的中断源,这128个 中断源中有部分为空。
6.2.2 S5PV210的中断控制
6.2.2 S5PV210的中断控制
目前一般的嵌入式芯片都有良好的中断系统,其优点如下 所述: (1)实现实时处理。利用中断技术,MCU可以及时响应 和处理来自内部功能模块或外部设备的中断请求,并为其 服务,以满足实时处理和控制的要求。 (2)实现分时操作,提高了MCU的效率。 在嵌入式的应用中,可以通过分时操作的方式启动多个功 能部件和外设同时工作。当外设或内部功能部件向MCU 发出中断申请时,MCU才转去为它服务。这样,利用中 断功能,MCU就可以同时执行多个服务程序,提高MCU 的效率。
中断标志位臵1并不一定能执行中断响应,芯片内 部一般还有中断允许标志位,对每一个中断都有 一个中断允许的控制位,只有这全局中断允许控 制位控制了所有的中断允许是否允许,这是一个 中断允许的总开关。这些标志位和允许控制位都 在寄存器中,在编程时,可以对其进行读写操作 ,以实现我们对中断控制和操作。
3. 中断使能寄存器(VIC0INTENABLE) 当VIC0INTENABLE为Read状态时, VIC0INTENABLE的相应位为0时,对应的中断被 挂起;相应位为1时,对应的中断就可以被允许。 当VIC0INTENABLE为Write状态时, VIC0INTENABLE的相应位为0时,对中断的状态 没有影响;臵1,中断使能,复位后所有中断不可 用。
第6章 中断系统原理与应用
本章内容:
中断是现代计算机和嵌入式设备必备的重要功能,在实际 应用中扮演着不可或缺的角色,三星的S5PV210芯片为用 户提供了多达178个的中断源,并通过中断控制器等对各 式中断的请求的进行分配处理。DMA、UART、IIC等功 能中都涉及中断技术,因此全面学习并深入了解中断的原 理和应用是掌握ARM应用的非常重要的关键问题之一。 中断的基本概念。 S5PV210的中断系统。 中断操作实例。
由于一个中断向量通常仅占几字节或一条指令的 长度,所以在这里一般不放臵中断服务程序。中 断服务程序还是放臵在程序存储器的其他地方, 而在中断向量区放臵了一条指向中断服务程序的 指令。这样,中断发生后,CPU就可以找到终端 服务程序的入口了。
6.1.3 中断优先级和中断嵌套
中断优先级:当几个不同的中断同时发出请求时 ,MCU通过其优先级的排序,来确定先执行那个 中断、后执行哪个中断。一般的优先级顺序都是 芯片默认设臵的。 中断嵌套:当MCU在响应一个中断的过程中,遇 到优先级更高的中断申请。通常的处理情况是优 先级低的当前中断服务会暂停,系统转入优先级 搞的中断服务程序中,执行完毕后再返回当前中 断程序出继续执行。
6.1.4 中断响应条件与中断控制
一般MCU中,对中断的控制和响应条件的判断是 通过寄存器设臵的形式来实现的。通过设臵相应 的中断寄存器,可以对某些可屏蔽的中断进行屏 蔽或者使能,以达到对需要使用的中断进行选择 ,对不需要的中断进行屏蔽,或者对中断何时需 要执行何时不需要执行进行控制。 在许多MCU中,中断都有中断标志位,这标志位 占据中断控制寄存器的一位。当检测到某一中断 源产生符合条件的中断信号时,某硬件会自动将 该中断源对应的中断标志位臵1,表示有中断信号 产生,向CPU申请中断。
ARM芯片的外部设备也可以作为中断源,这是需 要它们能够产生一个中断信号,送到ARM的外部 中断请求引脚供CPU检测,这些中断源在ARM芯 片外部,称为外部中断源。 2. 中断信号 中断信号是指内部或外部中断源产生的中断请求 信号,信号的类型主要包括下面几种: 脉冲的上升沿或下降沿。 高电平或低电平。 电平的变化。