NVIC与中断控制专用课件.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NVIC与中断控制专用课件

NVIC与中断控制 NVIC 概览 中断配置基础 中断使能与除能 中断的悬起与解悬 中断建立全过程的演示 软件中断 再论 SysTick 定时器 NVIC 概览 中断配置基础 中断的使能与除能 中断的悬起与解悬 中断建立全过程的演示 软件中断 SysTick定时器 如果应用程序储存在ROM中,并且不需要改变异常服务程序,则我们可以把整个向量表编码到ROM的起始区域(从0地址开始的那段)。在这种情况下,向量表的偏移量将一直为0,并且中断向量一直在ROM中,因此上例可以大大简化,只需3步: 1. 建立优先级组 2. 为该中断指定优先级 3. 使能该中断 如果在I/O密集型系统中,软件需要控制大量的硬件设备,则可能必须要考虑如下因素: 该芯片支持的中断数 该芯片中表达优先级的位数 在CM3的NVIC中,有一个名为“中断控制器类型寄存器”,它提供了该芯片中支持的中断数目,粒度是32的整数倍,(如表8.7所示) * 正如前文已经多次提到的,向量中断控制器,简称NVIC,是Cortex‐M3 不可分离的一部分,它与CM3 内核的逻辑紧密耦合,有一部分甚至水乳交融在一起。NVIC 与CM3 内核同声相应,同气相求,相辅相成,里应外合,共同完成对中断的响应。NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外,NVIC 还包含了MPU的控制寄存器、SysTick 定时器以及调试控制。本章中,我们将体检NVIC 的中断处理控制逻辑。MPU 与调试控制逻辑在后续章节中讨论。 NVIC 共支持1 至240 个外部中断输入(通常外部中断写作IRQs)。具体的数值由芯片厂商在设计芯片时决定。此外,NVIC 还支持一个“永垂不朽”的不可屏蔽中断(NMI)输入。NMI 的实际功能亦由芯片制造商决定。在某些情况下,NMI 无法由外部中断源控制。 NVIC 的访问地址是0xE000_E000。所有NVIC 的中断控制/状态寄存器都只能在特权级下访问。不过有一个例外——软件触发中断寄存器可以在用户级下访问以产生软件中断。所有的中断控制/状态寄存器均可按字/半字/字节的方式访问。此外,有几个中断屏蔽寄存器也与中断控制密切相关,它们是第三章中讲到的“特殊功能寄存器”,只能通过MRS/MSR及CPS 来访问。 每个外部中断都在NVIC 的下列寄存器中“挂号”: ?? 使能与除能寄存器 ?? 悬起与“解悬”寄存器 ?? 优先级寄存器 ?? 活动状态寄存器 另外,下列寄存器也对中断处理有重大影响 ?? 异常掩蔽寄存器(PRIMASK, FAULTMASK 以及BASEPRI) ?? 向量表偏移量寄存器 ?? 软件触发中断寄存器 ?? 优先级分组位段 中断的使能与除能分别使用各自的寄存器来控制——这与传统的,使用单一比特的两个状态来表达使能与除能是不同的。CM3 中可以有240 对使能位/除能位,每个中断拥有一对。这240 个对子分布在8 对32 位寄存器中(最后一对没有用完)。欲使能一个中断,你需要写1 到对应SETENA 的位中;欲除能一个中断,你需要写1 到对应的CLRENA 位中;如果往它们中写0,不会有任何效果。通过这种方式,使能/除能中断时只需把“当事位”写成1,其它的位可以全部为零。再也不用像以前那样,害怕有些位被写入0 而破坏其对应的中断设置(写0 没有效果),从而实现每个中断都可以自顾地设置,而互不侵犯——只需单一的写指令,不再需要读‐改‐写。 如上所述,SETENA 位和CLRENA 位可以有240 对,对应的32 位寄存器可以有8 对,因此使用数字后缀来区分这些寄存器,如SETENA0, SETENA1…SETENA7,如表8.1 所示。但是在特定的芯片中,只有该芯片实现的中断,其对应的位才有意义。因此,如果你使用的芯片支持32 个中断,则只有SETENA0/CLRENA0 才需要使用。SETENA/CLRENA 可以按字/半字/字节的方式来访问。又因为前16 个异常已经分配给系统异常,故而中断0 的异常号是16,(回顾第7 章中的表7.2) SETENAs: xE000_E100 – 0xE000_E11C ; CLRENAs:0xE000E180 - 0xE000_E19C 如果中断发生时,正在处理同级或高优先级异常,或者被掩蔽,则中断不能立即得到响应。此时中断被悬起。中断的悬起状态可以通过“中断设置悬起寄存器(SETPEND)”和“中断悬起清除寄存器(CLRPEND)”来读取,还可以写它们来手工悬起中断。 悬起寄存器和“解悬”寄存器也可以有8 对,其用法和用量都与前面介绍的使能/除能寄存器完全相同,见表8.2。 优先级 每个外部中断都有一个对应的优先级寄存器,每个寄存器占用8 位,但是允许最少只使用最高3 位。4

文档评论(0)

dart002 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档