第十二讲:中断系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


通过在软件中断/事件寄存器写’1’,也可以通过软件产生中断/事件请求。
武汉工程大学计算机学院
12-5
联系方式:ranquan@yeah.net
NVIC的访问地址是0xE000_E000~EFFF。所有NVIC的中断控制/状态寄存 器都只能在特权级下访问。不过有一个例外软件触发中断寄存器可以在用 户级下访问以产生软件中断。 所有的中断控制/状态寄存器均可按字/半字/字节的方式访问。此外, 还有几个中断掩蔽寄存器也与中断控制密切相关,它们属于“特殊功能寄 存器”,只能通过MRS/MSR及CPS(IE/ID)来访问。
联系方式:ranquan@yeah.net
武汉工程大学计算机学院
12-9
联系方式:ranquan@yeah.net
武汉工程大学计算机学院
12-10
联系方式:ranquan@yeah.net
武汉工程大学计算机学院
12-11
联系方式:ranquan@yeah.net
NVIC寄存器结构
typedef struct { vu32 CPUID; //CPUID基寄存器 vu32 IRQControlState; //中断控制状态寄存器 vu32 ExceptionTableOffset; //向量表偏移寄存器 vu32 AIRC; //应用中断/复位控制寄存器 vu32 SysCtrl; //系统控制寄存器 vu32 ConfigCtrl; //配置控制寄存器 vu32 SystemPriority[3]; //系统处理优先级寄存器 vu32 SysHandlerCtrl; //系统处理控制和状态寄存器 vu32 ConfigFaultStatus; //配置出错状态寄存器 vu32 HardFaultStatus; //硬件出错状态寄存器 vu32 DebugFaultStatus; //调试出错寄存器 vu32 MemoryManageFaultAddr; //存储器管理出错地址寄存器 vu32 BusFaultAddr; //总线出错地址 } SCB_TypeDef;
NVIC
向量中断控制器,简称NVIC,是Cortex-M3不可分离的一部分,它与CM3内核 的异常逻辑紧密耦合。 NVIC的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的 控制逻辑之外,NVIC还包含了MPU、SysTick定时器以及调试控制相关的寄存 器。 NVIC共支持1至240个外部中断输入(通常写作IRQs),具体由芯片厂商在设计 芯片时决定。
注意:二级优先级分组做出了如下规定:子优先级至少是1个位。因此抢占优 先级最多是7个位,故最多只有128级抢占的现象; 最少0个位,此时所有的位 都表达子优先级,因而所有可编程优先级之间就不会发生抢占,相当于屏蔽掉 CM3的中断嵌套机制。
武汉工程大学计算机学院
12-7
联系方式:ranquan@yeah.net
注意:这里所讲的外中断号,都是指NVIC所使用的中断号。另一方面,芯片 一些管脚的名字也可能被取为类似”IRQ #”的名字,请不要混淆这两者,它 们没有必然的映射关系。常见的情况是,NVIC中编号最靠前的几个中断源被 指定到片上外设,接下来的中断源才给外部中断引脚使用,具体要参阅芯片 的数据手册
武汉工程大学计算机学院
STM32的NVIC
• STM32嵌套向量中断控制器(NVIC)主要特性如下: – 最多60个可屏蔽中断通道(不包含16 个Cortex-M3 内核中断线)。 – 具有16 个可编程的优先等级。 – 可实现低延迟的异常和中断处理。 STM32F10XX的中断和异常向量 表

武汉工程大学计算机学院
12-8
//中断置位使能寄存器 //中断清除使能寄存器 //中断置位挂起寄存器 //中断清除挂起寄存器
//中断活动位寄存器
//中断优先级寄存器
武汉工程大学计算机学院
12-12
联系方式:ranquan@yeah.net
每个外部中断都在NVIC的下列寄存器中“挂号”: • 使能与除能寄存器 • 悬起与“解悬”寄存器 • 优先级寄存器 • 活动状态寄存器 另外,下列寄存器也对中断处理有重大影响 异常掩蔽寄存器(PRIMASK, FAULTMASK以及BASEPRI,属于SFR) 向量表偏移量寄存器 (VTOR 0xE000_ED08 ) 软件触发中断寄存器 ( STIR 0xE000_EF00 ) 优先级分组位段 (AIRC中)
• STM32F10xxx的唤醒事件可以通过下述两种配置产生: 1. 在外设的控制寄存器使能中断,但不在NVIC中使能,同时在Cortex-M3 的系统控制寄存器中使能SEVONPEND位。当MCU从WFE恢复后,需要清除 相应外设的中断挂起位和外设NVIC中断通道挂起位(在NVIC中断清除挂起寄存 器中)。 2. 配置一个外部或内部EXTI线为事件模式,当MCU从WFE恢复后,因为对 应事件线的挂起位没有被置位,不必清除相应外设的中断挂起位或NVIC中断通 道挂起位。
• •
武汉工程大学计算机学院
12-16
联系方式:ranquan@yeah.net
外部中断/事件控制器框图
武汉工程大学计算机学院
12-17
联系方式:ranquan@yeah.net
唤醒事件管理
• 两种唤醒方式: 1. 通过处理外部时间或内部中断来唤醒内核(内核从WFI睡眠指令退出)。
2. 通过配置任何外部I/O端口、RTC 闹钟和USB唤醒事件可以唤醒CPU(内 核从WFE睡眠指令退出)。
武汉工程大学计算机学院
12-13
联系方式:ranquan@yeah.net
NVIC的编程方法
• 库函数:
– – – – – – – – – – – – – – –
12-14
NVIC_DeInit函数 NVIC_SCBDeInit函数 NVIC_PriorityGroupConfig函数 NVIC_Init函数 NVIC_StructInit函数 NVIC_SETPRIMASK函数 NVIC_RESETPRIMASK函数 NVIC_SETFAULTMASK函数 NVIC_RESETFAULTMASK函数 NVIC_BASEPRICONFIG函数 NVIC_GetBASEPRI函数 NVIC_GetCurrentPendingIRQChannel函数 NVIC_GetIRQChannelPendingBitStatus函数 NVIC_GetIRQChannelPendingBit函数 NVIC_ClearIRQChannelPendingBit函数
武汉工程大学计算机学院
12-6
联系方式:ranquan@yeah.net
优先级
优先级的数值越小,则优先级越高。Cortex_M3(CM3)支持中断嵌套,使得高 优先级异常会抢占(preempt)低优先级异常。有3个系统异常:复位,NMI以及 硬fault,它们有固定的优先级,并且它们的优先级号是负数,从而高于所有其 它异常。所有其它异常的优先级则都是可编程的。(不能被编程为负数) 原则上,CM3支持3个固定的高优先级和多达256级的可编程优先级,并且支 持128级抢占,但是,绝大多数CM3芯片都会精简设计,以致实际上支持的优 先级数会更少,如8级,16级,32级等。它们在设计时会裁掉表达优先级的几 个低端有效位,以减少优先级的级数,STM32也不例外。
typedef struct { vu32 Enable[2]; u32 RESERVED0[30]; vu32 Disable[2]; u32 RSERVED1[30]; vu32 Set[2]; u32 RESERVED2[30]; vu32 Clear[2]; u32 RESERVED3[30]; vu32 Active[2]; u32 RESERVED4[62]; vu32 Priority[11]; } NVIC_TypeDef;
武汉工程大学计算机学院
联系方式:ranquan@yeah.net
NVIC的编程方法(续)
• 库函数:
– – – – – – – – – – – – – – –
12-15
NVIC_GetCurrentActiveHandle函数 NVIC_GetIRQChannelActiveBitStatus函数 NVIC_GetCPUID函数 NVIC_SetVectorTable函数 NVIC_GenerateSystemReset函数 NVIC_GenerateCoreReset函数 NVIC_SystemLPConfig函数 NVIC_SystemHandlerConfig函数 NVIC_SystemHandlerPriorityConfig函数 NVIC_GetSystemHandlerPendingBitStatus函数 NVIC_SetSystemHandlerPendingBit函数 NVIC_ClearSystemHandlerPendingBit函数 NVIC_GetSystemHandlerActiveBitStatus函数 NVIC_GetFaultHandlerSources函数 NVIC_GetFaultAddress函数
武汉工程大学计算机学院
12-19
联系方式:ranquan@yeah.net
功能说明
• 如果要产生中断,必须事先配置好并使能中断线。根据需要的边沿检测设置 2个触发寄存器,同时在中断屏蔽寄存器的相应位写’1’ 允许中断请求。当外 部中断线上发生了需要的边沿时,将产生一个中断请求,对应的挂起位也随之 被置’1’。在挂起寄存器的对应位写’1’,可以清除该中断请求。 • 如果要为产生事件,必须事先配置好并使能事件线。根据需要的边沿检测通 过设置2个触发寄存器,同时在事件屏蔽寄存器的相应位写’1’允许事件请求。 当事件线上发生了需要的边沿时,将产生一个事件请求脉冲,对应的挂起位不 被置’1’。
嵌入式开发
第十二讲:中断系统
武汉工程大学计算机学院
联系方式:ranquan@yeah.net
• • • •
嵌套向量中断控制器(NVIC) NVIC的编程方法 外部中断/事件控制器(EXTI) EXTI的编程方法
武汉工程大学计算机学院
12-2
联系方式:ranquan@yeah.net
异常和NVIC
异常
Cortex-M3在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常 和外部中断。其中,编号为1-15的对应系统异常,大于等于16的则全是外部 中断,最大240个。 因为芯片设计者可以修改CM3的硬件描述源代码,所以做成芯片后,支持的 中断源数目常常不到240个,并且优先级的位数也由芯片厂商最终决定。
武汉工程大学计算机学院
12-3
联系方式:ranquan@yeah.net
系统异常清单(注意:没有编号为0的异常)
武汉工程大学计算机学院
12-4
联系方式:ranquan@yeah.net
外部中断清单(请求信号来自CM3内核的外面,来自各种片上外设和外扩的 外设,依靠NVIC处理)
NVIC的中断控制及状态寄存器中,有一个VECTACTIVE位段;另外,还有一 个特殊功能寄存器IPSR。在它们二者的里面,都记录了当前正服务的异常, 给出了它的编号。
武汉工程大学计算机学院
联系方式:ranquan@yeah.net
外部中断/事件控制器(EXTI)
STM3பைடு நூலகம்的EXTI 控制器主要特性如下:

• 外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。 每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿 或下降沿或者双边沿都触发)。 每个输入线都可以被独立的屏蔽。 每个中断线都有专用的状态位,挂起寄存器保持着状态线的中断要求。
注意:该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出 上。
武汉工程大学计算机学院
12-18
联系方式:ranquan@yeah.net
外部中断/事件线路映像
112个通用I/O端口以右图的方式连接到16个外 部中断/事件线上(EXTI0~15):
另外3种其他的外部中断/事件控制器的连接如下: EXTI线16连接到PVD输出 EXTI线17连接到RTC闹钟事件 EXTI线18连接到USB唤醒事件
相关文档
最新文档