
STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或者是“副优先级”,每个中断源都需要被指定这两种优先级!& d% A* ~/ Q. `. V6 G & p6 r7 w- k8 a 1.何为抢占式优先级(pre-emption priority): 抢占式优先级的中断事件会打断当前的主程序或者是中断程序的运行——抢断式优先响应,俗称中断嵌套。 & W- E+ u4 F# X0 R 7 |" _- F% k5 z5 k 2.何为副优先级(subpriority):8 ~ T/ E$ m/ z% X 在抢占式优先级相同的情况下,高副优先级的中断先被响应; 在抢占式优先级相同的情况下,如果有低副优先级中断正在执行,高副优先级的中断要等待已经被响应的低副优先级中断执行完毕后才能够得到响应——非抢断式响应(不能嵌套)。' W5 a! S: N+ r- Y 2 J& j, v% O* l# Z p* Y 3.判断中断是否被响应的依据:8 D3 ^) n1 B0 f$ T 首先是抢占式优先级,其次是副优先级。2 `; X: F) U2 I8 h0 g8 U 抢占式优先级决定是否会有中断嵌套。 4.优先级中断的处理:2 j! o* P$ I3 N. y. l 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理的过程中被响应,即中断嵌套;或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同的时候,这两个中断将没有嵌套的关系,当一个中断到来的时候,如果正在处理另一个中断,这个后来的中断就要等待当前的中断被处理完后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级的高低来决定先处理哪一个;如果他们的抢占式优先级和优先级都相同的话,则根据他们在中断表中的排位顺序决定先处理哪一个。 + k6 e u( |4 b* \. Y, } 5.STM32中对优先级的定义 STM32中指定中断优先级的寄存器有4位,这4个寄存器的分组方式如下:+ W7 W" l4 h& {' R7 ?6 } 第0组:所有4位用于指定响应优先级 第1组:最高位1用于指定抢占式优先级,最低3位用于指定相应优先级 第2组:最高位2用于指定抢占式优先级,最低2位用于指定相应优先级 第3组:最高位3用于指定抢占式优先级,最低1位用于指定相应优先级 第4组:所有4位用于指定抢占式优先级 ! G, N) L* Q+ l3 J% {2 ] |