M3中断优先级分析和总结.docx

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
中断优先级 中断概述 正常的程序被暂时中止,处理器便进入异常。所有异常可以通过NVIC(嵌套向量中断控制器)进行控制,通过 NVIC 可以设置各个异常的优先等级并对异常进行处理。异常可分为系统异常和外部中断,它们通过不同的寄存器组进行控制(包括优先级的设置)。系统异常和外部中断及优先级关系如图 1 所示。 图 1 异常类型 图 1 中的位置号也即各个异常的中断号,处理器根据中断号从向量表中取出异常处理函数的入口(指针)。 中断方式 Cortex-M3 处理器以其灵活的异常机制在同类中脱颖而出,其异常可以通过占先、末尾连锁和迟来等处理来降低中断的延迟。 优点:ARM7TDMI-S 中断响应需要 24-42 个时钟,而 Cortex-M3 只需要 12 个时钟周 期。 异常基于优先级而采取的动作主要有四种:占先、末尾连锁、返回和迟来,如表 1 所 示。 占先产生条件:新的异常比当前的 ISR 或线程的优先级更高发生时刻:ISR 或线程正在执行中断结果:当前处于线程状态,则进入挂起中断;当前处于 ISR 占先 产生条件:新的异常比当前的 ISR 或线程的优先级更高 发生时刻:ISR 或线程正在执行 中断结果:当前处于线程状态,则进入挂起中断;当前处于 ISR 状态,则产生中断嵌套 附加动作:处理器自动保存状态并压栈 末尾连锁 产生条件:新的异常优先级比当前正在返回的 ISR 的优先级更高 发生时刻:当前 ISR 结束时 中断结果:跳过出栈操作,将控制权转向新的 ISR 返回 产生条件:没有新的异常或没有比被压栈的 ISR 优先级更高的异常 发生时刻:当前 ISR 结束时 中断结果:执行出栈操作,并返回到被压栈的 ISR 或线程模式 附加动作:自动将处理器状态恢复为进入 ISR 之前的状态 迟来产生条件:新的异常比正在保存状态的占先优先级更高 迟来 产生条件:新的异常比正在保存状态的占先优先级更高 发生时刻:当前 ISR 开始时 中断结果:处理器转去处理优先级更高的中断 中断优先级使中断变得更加的灵活多变,它决定了处理器何时以及怎样处理异常,这样, 对待中断就可以随心所欲了。 异常可分为系统异常和外部中断,那么异常优先级也可分为系统异常优先级和外部中断 优先级。 所有的异常本身具有硬件优先级,其硬件优先级顺序决定于如图 1 中的位置号(中断号),中断号越低,硬件优先级越高。也可以通过软件来设置异常的优先级,称为软件优先级。它只可以改变可调整优先级的异常,即除了复位、NMI 和硬件故障异常外,其它中断的优先级都可以通过寄存器配置。 异常一旦指定软件优先级后,硬件优先级则无效。 注:软件优先级的设置对复位,NMI,和硬故障无效。它们的优先级始终比其他中断要高。复位(优先级-3),NMI(优先级-2),和硬故障(优先级-1)。 用户可设置的最高优先级为 0 号优先级,其仅次于复位,NMI 以及硬件故障的第 4 优先级。0 号优先级也是所有可调整优先级的默认优先级。如果有两个或更多的中断指定为相同的优先级(例如优先级全为 0),那么它们的硬件优先级(位置编号越低优先级越高)就决定了处理器激活这些中断的顺序。例如,如果PendSV 和 SysTick 的优先级都为 0,那么PendSV 的优先级更高。 系统异常与外部中断通过不同的寄存器组进行控制。外部中断的优先级可以通过外部中 断优先级寄存器(NVIC_PRIn)进行配置,而系统异常的优先级可以通过系统处理器优先级寄存器(NVIC_SYS_PRIn)来配置,具体配置示例将在后续章节介绍。 中断优先级分组 中断优先级分组描述 为了对具有大量中断的系统加强优先级控制,NVIC 支持优先级分组机制。通过向应用中断和复位控制寄存器(NVIC_APINT)中的 PRIGROUP 区写不同的值来将异常分为占先优先级区和次优先级区,如表 2 所示。(寄存器地址为:0xE000ED0C) 优先级包括组优先级和次优先级,组优先级又称占先优先级。如果有多个挂起异常共用相同的组优先级,则需使用次优先级区来决定同组中的异常的优先级,这就是同组内的次优先级。如果两个挂起异常具有相同的组优先级和次优先级,则挂起异常的编号越低优先级越高。这与优先级机制是一致的。 注意:如果一个中断想抢占另一个正在处理的中断,则它的占先优先级(组优先级)必 须比正在处理的中断的占先优先级要高。在组优先级相同,又存在多个次优先级都挂起时, 可由次优先级来决定谁先执行,但只能产生末尾连锁。

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

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

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档

相关课程推荐