- UID
- 1029342
- 性别
- 男
|
如果中断发生时,正在处理同级或高优先级异常,或者被掩蔽,则中断不能立即得到响应。此 时中断被悬起。中断的悬起状态可以通过“中断设置悬起寄存器(SETPEND)”和“中断悬起清除寄 存器(CLRPEND)”来读取,还可以写它们来手工悬起中断。
悬起寄存器和“解悬”寄存器也可以有 8 对,其用法和用量都与前面介绍的使能/除能寄存器
完全相同,见表 8.2。
表 8.2 SETPEND/CLRPEND 寄存器族 (此表参考官方技术参考手册作了些改编——译者注)
SETPENDs:0xE000_E200 – 0xE000_E21C ; CLRPENDs:0xE000E280 - 0xE000_E29C
名称
| 类型
| 地址
| 复位值
| 描述
| SETPEND0
| R/W
| 0xE000_E200
| 0
| 中断 0-31的悬起寄存器,共 32个悬起位
位[n],中断#n悬起(异常号 16+n)
| SETPEND1
| R/W
| 0xE000_E204
| 0
| 中断 32-63的悬起寄存器,共 32个悬起位
| …
| …
| …
| …
| …
| SETPEND7
| R/W
| 0xE000_E21C
| 0
| 中断 224-239的悬起寄存器,共 16个悬起位
|
|
|
|
|
|
|
|
|
|
| CLRPEND0
| R/W
| 0xE000_E280
| 0
| 中断 0-31的解悬寄存器,共 32个解悬位
位[n],中断#n解悬(异常号 16+n)
| CLRPEND1
| R/W
| 0xE000_E284
| 0
| 中断 32-63的解悬寄存器,共 32个解悬位
| …
| …
| …
| …
| …
| CLRPEND7
| R/W
| 0xE000_E29C
| 0
| 中断 224-239的解悬寄存器,共 16个解悬位
| 8.4.1 优先级每个外部中断都有一个对应的优先级寄存器,每个寄存器占用 8位,但是 CM3允许在最“粗线 条”的情况下,只使用最高 3位。4个相临的优先级寄存器拼成一个 32位寄存器。如前所述,根据 优先级组的设置,优先级可以被分为高低两个位段,分别是抢占优先级和亚优先级。优先级寄存器 都可以按字节访问,当然也可以按半字/字来访问。有意义的优先级寄存器数目由芯片厂商实现的 中断数目决定,优先级配置寄存器的详细信息在附录D中给出(表 D.18)。
表 8.3 中断优先级寄存器阵列 0xE000_E400 – 0xE000_E4EF
名称
| 类型
| 地址
| 复位值
| 描述
| PRI_0
| R/W
| 0xE000_E400
| 0(8位)
| 外中断#0的优先级
| PRI_1
| R/W
| 0xE000_E401
| 0(8位)
| 外中断#1的优先级
| …
| …
| …
| …
| …
| PRI_239
| R/W
| 0xE000_E4EF
| 0(8位)
| 外中断#239的优先级
| 表8.3B 系统异常优先级寄存器阵列 0xE000_ED18 - 0xE000_ED23
地址
| 名称
| 类型
| 复位值
| 描述
| 0xE000_ED18
| PRI_4
|
|
| 存储器管理 fault的优先级
| 0xE000_ED19
| PRI_5
|
|
| 总线 fault的优先级
| 0xE000_ED1A
| PRI_6
|
|
| 用法 fault的优先级
| 0xE000_ED1B
| -
| -
| -
| -
| 0xE000_ED1C
| -
| -
| -
| -
| 0xE000_ED1D
| -
| -
| -
| -
| 0xE000_ED1E
| -
| -
| -
| -
| 0xE000_ED1F
| PRI_11
|
|
| SVC优先级
| 0xE000_ED20
| PRI_12
|
|
| 调试监视器的优先级
| 0xE000_ED21
| -
| -
| -
| -
| 0xE000_ED22
| PRI_14
|
|
| PendSV的优先级
| 0xE000_ED23
| PRI_15
|
|
| SysTick的优先级
|
|
|