STM32W108无线射频模块中断控制器(NVIC)

STM32W108的中断系统由两部分组成:一个标准的ARM Cortex-M3嵌套向量中断控制器(NVIC)提供顶层(一级)中断,一个事件管理器(EM)提供第二级中断。NVICEM提供了一个简单的层次结构,所有EM的第二级中断都会送入NVIC中的顶层中断。这两个层次结构既允许很好的微观控制中断源,也能宏观的控制整个外围设备,同时允许外设有自己的中断向量。

在工程实践中,顶层外设中断仅用于启用或禁用一个外设的中断,二级中断来自于硬件,因此,它才是应用程序使用中断的主要部分。

7.1 中断控制

7.1.1嵌套向量中断控制器(NVIC

ARM Cortex-M3的嵌套向量中断控制器(NVIC)有利于低延时的异常和中断的处理,NVIC和处理器内核接口是密切耦合的,从而允许低延迟的中断处理并能够有效地处理后续中断,同时NVIC还具有中断嵌套能力。

ARM Cortex-M3NVIC包含10个标准中断,它们都与芯片、CPU操作以及管理有关。除了10个标准中断,具体对于STM32W108,还包含了17个单独的矢量外设中断。

NVIC定义了一系列异常,这些异常不仅包括传统的外设中断,也包括一些特定的事件,如故障和CPU复位。在ARM Cortex-M3NVIC中,CPU复位事件被认为是一个高优先级的异常,并且会从NVIC异常表中的初始位置加载堆栈指针。NVIC异常表定义了所有的异常和它们的级别,包括外设中断。每个异常的级别是很重要的,因为它被直接转变成每个中断的32位的中断向量位置,并且定义了异常的硬件优先级。表中的每个异常都是一个32位的地址,在异常发生时被加载到程序计数器中。表7.1列出了全部的异常表,异常0(堆栈指针)到异常15SysTick)是标准的ARM Cortex-M3NVIC一部分,而异常16(定时器1)至异常32(调试)是STM32W108的专用外设中断,更详细的外设中断在表7.2中列出。

 

7.1. NVIC异常表

异常

编号

描述

-

0

复位时从第一个向量表中载入栈顶

复位

1

上电和热复位时应用,执行第一条指令后,优先级降到最低(线程模式),异步的

NMI(不可屏蔽中断)

2

不能被任何异常所停止或抢占,除了复位,异步的

硬件异常

3

所有硬件异常,由于优先级或配置异常处理被禁止,异常不能激活,同步的

内存异常

4

MPU不匹配,包括非法访问和不匹配,同步的

总线异常

5

预取指,内存访问,以及其它地址/内存相关的故障。精确时同步,不精确时异步

用户异常

6

使用故障,例如执行了未定义指令或非法状态转换,同步的

-

7-10

保留

SVC调用

11

使用SVC指令的系统服务调用,同步的

调试监控器

12

调试监控中断,当没有暂停时,同步的,但只有使能时会激活。如果优先级低于其他当前有效中断,则不激活

-

13

保留

PendSV

14

系统服务可挂起的请求,异步的,并只能由软件挂起

SysTick

15

系统节拍定时器失效,异步的

定时器1

16

定时器1外设中断

定时器2

17

定时器2外设中断

管理器

18

管理外设中断

基带

19

基带外设中断

睡眠定时器

20

睡眠定时器外设中断

串口控制器1

21

串口控制器1外设中断

串口控制器2

22

串口控制器2外设中断

安全部件

23

安全部件外设中断

MAC定时器

24

MAC定时器外设中断

MAC传输

25

MAC传输外设中断

MAC接收

26

MAC接收外设中断

ADC

27

ADC外设中断

IRQA

28

IRQA外设中断

IRQB

29

IRQB外设中断

IRQC

30

IRQC外设中断

IRQD

31

IRQD外设中断

调试

32

调试外设中断

NVIC还包含一个软件可配置的中断优先级机制,复位、NMI和硬件故障异常始终是优先级最高的中断,并且软件不可更改。所有其它的异常都可以被分配一个5位的优先级号,数值越小优先级越高。如果有某些异常具有相同的软件可配置的优先级,那么NVIC就会使用硬件定义的优先级进行区分,硬件定义的优先级编号和其在异常表中的位置一样。例如,如果IRQAIRQB同时发生了,并且拥有相同的软件定义的优先级,那么NVIC就会处理优先级为28IRQA,因为它比优先级为29IRQB有更高的硬件优先级。

顶层一级中断由5ARMCortex-M3 NVIC寄存器控制:INT_CFGSETINT_CFGCLRINT_PENDSETINT_PENDCLRINT_ACTIVE,写0到这五个寄存器中的任何位都是无效的。

● INT_CFGSET - 1INT_CFGSET中可以使能该顶层中断。

● INT_CFGCLR - 1INT_CFGCLR中可以禁用该顶层中断。

● INT_PENDSET - 1INT_PENDSET中可以触发该顶层中断。

● INT_PENDCLR - 1INT_PENDCLR中可以清除该顶层中断。

● INT_ACTIVE不能被写入,是用于标识当前哪些中断是被激活的。

INT_PENDSETINT_PENDCLR寄存器用于设置和清除中断标志INT_CFGSETINT_CFGCLR寄存器用于设置和清除中断标志的屏蔽位。中断可能会在任何时候被提交或清除,但只有相应的屏蔽位(INT_CFGSET)被置位的中断提交后才会被处理。如果INT_CFGSET中的一位被置位,并且相应的INT_PENDSET位也被置位,那么该中断会被处理。如果在设置完INT_PENDSET之后设置INT_CFGSET,那么中断同样会被处理。顶层一级中断的中断标志(信号)是根据电平进行判断的。

想了解更多的关于NVICCortex-M3异常的信息,请参阅ARM Cortex-M3技术手册和ARM ARMv7-M架构手册。

 

不可屏蔽中断(NMI

不可屏蔽中断(NMI)是一种特殊情况,尽管是10个标准ARMCortex-M3 NVIC中断的其中之一,但它是源自于事件管理器,就像外设中断一样。NMI2个二级中断源24MHz晶振故障和看门狗低水位线(即将溢出)。

124MHz晶振故障:如果STM32W108的主时钟SCLK使用24MHz晶振,而晶振出现故障,STM32W108会检测到故障并自动切换到使用内部的12MHz RC时钟。当此故障检测和切换已经发生,STM32W108就会触发CLK24M_FAIL二级中断,然后这个中断又会触发NMI

2.看门狗低水位线:如果STM32W108的看门狗是激活的并且看门狗计数器在1.792s时没有被复位,那么看门狗就会触发WATCHDOG_INT二级中断,然后这个中断又会触发NMI 

本文出自《STM32W108嵌入式无线传感器网络》邱铁,夏锋,周玉编著.清华大学出版社,2014年5月
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章