一、基础知识
1.ARM的中止优先级分硬件优先级和软件优先级两种
其间软件优先级又由抢占优先级和呼应优先级组成
2.中止的优先级选用编号小优先的准则。
3.一般状况:
1).假如设定了软件优先级,先看软件优先级:
具有高抢占式优先级的中止能够在具有低抢占式优先级的中止处理进程中被呼应,即中止嵌套,或者说高抢占式优先级的中止能够嵌套低抢占式优先级的中止。
当两个中止源的抢占式优先级相一起,这两个中止将没有嵌套联系,当一个中止到来后,假如正在处理另一个中止,这个后到来的中止就要比及前一个中止处理完之后才干被处理。假如这两个中止一起抵达,则中止控制器依据他们的呼应优先级凹凸来决议先处理哪一个。
2).后看硬件优先级
假如他们的抢占式优先级和呼应优先级都持平,则依据他们在中止表中的排位次序决议先处理哪一个。
4. 特殊状况
[10:8] |
切割点 |
抢占优先级位 |
呼应优先级位 |
抢占优先级数 |
呼应优先级数 |
0b011(组4) |
xxxx |
[7:4] |
none |
16(0~15) |
1(0~0) |
0b100(组3) |
xxx.y |
[7:5] |
[4] |
8 |
2 |
0b101(组2) |
xx.yy |
[7:6] |
[5:4] |
4(0~3) |
4(0~3) |
0b110(组1) |
x.yyy |
[7] |
[6:4] |
2 |
8 |
0b111(组0) |
yyyy |
none |
[7:4] |
1 |
16 |
二、详细实例
{
if(EXTI_GetITStatus(EXTI_Line12) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line12); /* 铲除中止标志位 */
//do something
}
if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line13); /* 铲除中止标志位 */
//do something
}
if(EXTI_GetITStatus(EXTI_Line14) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line14); /* 铲除中止标志位 */
//do something
}
if(EXTI_GetITStatus(EXTI_Line15) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line15); /* 铲除中止标志位 */
//do something
}
}