本科- 第六章中断优先级管理-M4



《本科- 第六章中断优先级管理-M4》由会员分享,可在线阅读,更多相关《本科- 第六章中断优先级管理-M4(31页珍藏版)》请在文档大全上搜索。
1、v EXIT原理及应用原理及应用v 电子信息与自动化学院电子信息与自动化学院v 经本钦经本钦1目录目录 NVIC中断优先级分组中断优先级分组1 NVIC中断优先级设置中断优先级设置2 NVIC总结总结32什么是什么是“中断中断”?中断服务程序中断服务程序发申请发申请中断服务程序中断服务程序发申请发申请外外设设CPU CPU CPU执行程序时,由于发生了某种随机的事件执行程序时,由于发生了某种随机的事件( (外部外部或内部或内部) ),引起,引起CPUCPU暂时中断正在运行的程序,转去执行暂时中断正在运行的程序,转去执行一段特殊的服务程序一段特殊的服务程序( (中断服务子程序或中断处理程序中断服
2、务子程序或中断处理程序) ),以处理该事件,该事件处理完后又返回被中断的程序继以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。续执行,这一过程称为中断。 EGEG:吃饭时突然手机铃响:吃饭时突然手机铃响中中断断示示意意图图3 1. NVIC中断优先级分组中断优先级分组 u CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。u STM32F1并没有使用CM3内核的全部东西,而是只用了它的一部分。 -STM32F10 xx/STM32F103总共有16+60个中断。 -STM32F10 xx/STM32F107则总共
3、有16+68个中断 u STM32F103的76个中断里面,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级,而我们常用的就是这60个可屏蔽中断。4 1. NVIC中断优先级分组中断优先级分组 STM32F10 x中文参考手册P234 表45和46n STM32F1xx/STM32F107XX向量表向量表16个内核中断个内核中断568个可屏蔽中断个可屏蔽中断6 1. NVIC中断优先级分组中断优先级分组 几十个中断,怎么管理?几十个中断,怎么管理?7 u中断管理方法:中断管理方法:首先,对首先,对STM32中断进行分组,组中断进行分组,组04。同时,对每个。同时,对每个中断设
4、置一个抢占优先级和一个响应优先级值。中断设置一个抢占优先级和一个响应优先级值。分组配置是在寄存器SCB-AIRCR中配置:组组AIRCR10:8IP bit7:4分配情况分配结果01110:40位抢占优先级,4位响应优先级11101:31位抢占优先级,3位响应优先级21012:22位抢占优先级,2位响应优先级31003:13位抢占优先级,1位响应优先级40114:04位抢占优先级,0位响应优先级 1. NVIC中断优先级分组中断优先级分组8stm32stm32中对中断优先级的定义中对中断优先级的定义 STM32STM32中指定中断优先级的寄存器位有中指定中断优先级的寄存器位有4 4位,这位,这
5、4 4个寄存器位的分组个寄存器位的分组方式如下:方式如下: 第第0 0组:所有组:所有4 4位用于指定响应优先级位用于指定响应优先级第第1 1组:最高组:最高1 1位用于指定抢占式优先级,最低位用于指定抢占式优先级,最低3 3位用于指定响应优先级位用于指定响应优先级第第2 2组:最高组:最高2 2位用于指定抢占式优先级,最低位用于指定抢占式优先级,最低2 2位用于指定响应优先级位用于指定响应优先级第第3 3组:最高组:最高3 3位用于指定抢占式优先级,最低位用于指定抢占式优先级,最低1 1位用于指定响应优先级位用于指定响应优先级第第4 4组:所有组:所有4 4位用于指定抢占式优先级位用于指定抢
6、占式优先级具体怎样具体怎样设置在例设置在例程中详细程中详细讲解讲解! !STM32STM32中的优先级概念中的优先级概念 9优先级冲突的处理优先级冲突的处理 具有高抢占式优先级的中断可以在具有低抢占式优先级的中具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即断处理过程中被响应,即中断的嵌套中断的嵌套,或者说高抢占式优先级的,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这
7、个后套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断两个中断同时到达同时到达,则中断控制器根据他们的响应优先级高低来,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。等,则根据他们在中断表中的排位顺序决定先处理哪一个。STM32STM32中的优先级概念中的优先级概念 10 u抢占优先级抢占优先级 & 响应优先
8、级区别:响应优先级区别:l 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。l 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。l 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。l 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行; 1. NVIC中断优先级分组中断优先级分组11 u举个栗子:举个栗子:l 假定设置中断优先级组为2,然后设置中断3(RTC中断)的抢占优先级为2,响应优先级为1。 中断6(外部中断0)的抢占优先级为3,响应优先级为0中断7(外部中断1)的抢占优先级为2,响应优先级为0。那么这
9、3个中断的优先级顺序为:中断7中断3中断6。 1. NVIC中断优先级分组中断优先级分组12 u特别说明:特别说明:一般情况下,系统代码执行过程中,只设置一次中断优先一般情况下,系统代码执行过程中,只设置一次中断优先级分组,比如分组级分组,比如分组2,设置好分组之后一般不会再改变分组。,设置好分组之后一般不会再改变分组。随意改变分组会导致中断管理混乱,程序出现意想不到的随意改变分组会导致中断管理混乱,程序出现意想不到的执行结果。执行结果。 1. NVIC中断优先级分组中断优先级分组13 u中断优先级分组函数:中断优先级分组函数: void NVIC_PriorityGroupConfig(ui
10、nt32_t NVIC_PriorityGroup);void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup); SCB-AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 1. NVIC中断优先级分组中断优先级分组14 分组设置好之后,怎么设置单个中断的抢占分组设置好之后,怎么设置单个
11、中断的抢占优先级和响应优先级?优先级和响应优先级? 2. 中断优先级设置中断优先级设置15 2. 中断优先级设置中断优先级设置 u中断设置相关寄存器中断设置相关寄存器 _IO uint8_t IP240; /中断优先级控制的寄存器组_IO uint32_t ISER8; /中断使能寄存器组_IO uint32_t ICER8; /中断失能寄存器组_IO uint32_t ISPR8; /中断挂起寄存器组_IO uint32_t ICPR8; /中断解挂寄存器组_IO uint32_t IABR8; /中断激活标志位寄存器组16 uMDK中中NVIC寄存器结构体寄存器结构体 typedef st