使能与除能寄存器
CM3有240对使能/除能位,每个中断拥有一对。这 240 个对子分布在 8 对 32 位寄存器中(最后一对没有用完)。欲使能一个中断,你需要写 1 到对应 SETENA 的位中;欲除能一个中断,你需要写 1 到对应的 CLRENA 位中;如果往它们中写 0,不会有任何效果。
悬起与解悬寄存器
如果中断发生时,正在处理同级或高优先级异常,或者被掩蔽,则中断不能立即得到响应。此时中断被悬起。中断的悬起状态可以通过“中断设置悬起寄存器(SETPEND)”和“中断悬起清除寄 存器(CLRPEND)”来读取,还可以写它们来手工悬起中断、解悬中断。
悬起寄存器和“解悬”寄存器也可以有 8 对,其用法与前面介绍的使能/除能寄存器相同
优先级寄存器
优先级定义
优先级的数值越小,则优先级越高。CM3 支持最少3个固定的高优先级和最多256级的可编程优先级,并且支持128级抢占(128 的来历请见下文分解——译注)。但是,绝大多数 CM3 芯片都会精简设计,以致实际上支持的优先级数会更少,如8级,16 级,32 级等。它们在设计时会裁掉表达优先级的几个低端有效位,以达到减少优先级数的目的举例来说,如果只使用了 3 个位来表达优先级(cortex-m3采用4位),则优先级配置寄存器的结构会如下
而控制表达抢占优先级和亚优先级的位段用几位表达是通过设置应用程序中断及复位控制寄存器(AIRCR)的bit10~bit8
优先级
活动状态寄存器
每个外部中断都有一个活动状态位。在处理器执行了其 ISR 的第一条指令后,它的活动位就被置 1,并且直到 ISR 返回时才硬件清零。由于支持嵌套,允许高优先级异常抢占某个ISR。然而,哪怕一个中断被抢占,其活动状态也依然为 1(请仔细琢磨前文讲到的“直到 ISR返回时才清零)。活动状态寄存器的定义,与前面讲的使能/除能和悬起/解悬寄存器相同,只是不再成对出现。它们也能按字/半字/字节访问,但他们是只读的。