打印
[应用相关]

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

[复制链接]
833|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
人丑没人疼|  楼主 | 2016-9-10 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32W108的中断系统由两部分组成:一个标准的ARM Cortex-M3嵌套向量中断控制器(NVIC)提供顶层(一级)中断,一个事件管理器(EM)提供第二级中断。NVIC和EM提供了一个简单的层次结构,所有EM的第二级中断都会送入NVIC中的顶层中断。这两个层次结构既允许很好的微观控制中断源,也能宏观的控制整个外围设备,同时允许外设有自己的中断向量。
在工程实践中,顶层外设中断仅用于启用或禁用一个外设的中断,二级中断来自于硬件,因此,它才是应用程序使用中断的主要部分。
7.1 中断控制器7.1.1嵌套向量中断控制器(NVIC)ARM Cortex-M3的嵌套向量中断控制器(NVIC)有利于低延时的异常和中断的处理,NVIC和处理器内核接口是密切耦合的,从而允许低延迟的中断处理并能够有效地处理后续中断,同时NVIC还具有中断嵌套能力。
ARM Cortex-M3的NVIC包含10个标准中断,它们都与芯片、CPU操作以及管理有关。除了10个标准中断,具体对于STM32W108,还包含了17个单独的矢量外设中断。
NVIC定义了一系列异常,这些异常不仅包括传统的外设中断,也包括一些特定的事件,如故障和CPU复位。在ARM Cortex-M3的NVIC中,CPU复位事件被认为是一个高优先级的异常,并且会从NVIC异常表中的初始位置加载堆栈指针。NVIC异常表定义了所有的异常和它们的级别,包括外设中断。每个异常的级别是很重要的,因为它被直接转变成每个中断的32位的中断向量位置,并且定义了异常的硬件优先级。表中的每个异常都是一个32位的地址,在异常发生时被加载到程序计数器中。表7.1列出了全部的异常表,异常0(堆栈指针)到异常15(SysTick)是标准的ARM Cortex-M3的NVIC一部分,而异常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就会使用硬件定义的优先级进行区分,硬件定义的优先级编号和其在异常表中的位置一样。例如,如果IRQA和IRQB同时发生了,并且拥有相同的软件定义的优先级,那么NVIC就会处理优先级为28的IRQA,因为它比优先级为29的IRQB有更高的硬件优先级。
顶层一级中断由5个ARMCortex-M3 NVIC寄存器控制:INT_CFGSET、INT_CFGCLR、INT_PENDSET、INT_PENDCLR和INT_ACTIVE,写0到这五个寄存器中的任何位都是无效的。
● INT_CFGSET - 写1到INT_CFGSET中可以使能该顶层中断。
● INT_CFGCLR - 写1到INT_CFGCLR中可以禁用该顶层中断。
● INT_PENDSET - 写1到INT_PENDSET中可以触发该顶层中断。
● INT_PENDCLR - 写1到INT_PENDCLR中可以清除该顶层中断。
● INT_ACTIVE不能被写入,是用于标识当前哪些中断是被激活的。
INT_PENDSET和INT_PENDCLR寄存器用于设置和清除中断标志;INT_CFGSET和INT_CFGCLR寄存器用于设置和清除中断标志的屏蔽位。中断可能会在任何时候被提交或清除,但只有相应的屏蔽位(INT_CFGSET)被置位的中断提交后才会被处理。如果INT_CFGSET中的一位被置位,并且相应的INT_PENDSET位也被置位,那么该中断会被处理。如果在设置完INT_PENDSET之后设置INT_CFGSET,那么中断同样会被处理。顶层一级中断的中断标志(信号)是根据电平进行判断的。
想了解更多的关于NVIC和Cortex-M3异常的信息,请参阅ARM Cortex-M3的技术手册和ARM ARMv7-M架构手册。

不可屏蔽中断(NMI)
不可屏蔽中断(NMI)是一种特殊情况,尽管是10个标准ARMCortex-M3 NVIC中断的其中之一,但它是源自于事件管理器,就像外设中断一样。NMI有2个二级中断源:24MHz晶振故障和看门狗低水位线(即将溢出)。
1.24MHz晶振故障:如果STM32W108的主时钟SCLK使用24MHz晶振,而晶振出现故障,STM32W108会检测到故障并自动切换到使用内部的12MHz RC时钟。当此故障检测和切换已经发生,STM32W108就会触发CLK24M_FAIL二级中断,然后这个中断又会触发NMI。
2.看门狗低水位线:如果STM32W108的看门狗是激活的并且看门狗计数器在1.792s时没有被复位,那么看门狗就会触发WATCHDOG_INT二级中断,然后这个中断又会触发NMI。
本文出自《STM32W108嵌入式无线传感器网络》邱铁,夏锋,周玉编著.清华大学出版社,2014年5月
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

97

帖子

0

粉丝