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月
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章