1. 程式人生 > >STM32關於NVIC暫存器方向理解

STM32關於NVIC暫存器方向理解

五、NVIC

       中斷向量巢狀控制器是用來管理所有中斷和事件的,包括中斷的使能和除能,中斷的優先順序。這個是屬於核心的東西,所以ST的參考手冊上對它的描述較少,但他又是十分重要的東西,要了解它就要看ARM的《Cortex™-M4 Devices Generic User Guide》。

相關暫存器

譯自《Cortex™-M4 Devices Generic UserGuide》,若有錯誤,請以原文為準。

中斷使能暫存器NVIC_ISER[8]

中斷使能暫存器共有8個,ISER[0]設定0~31號中斷的使能,ISER[1]設定32~63號中斷的使能,如此類推。以下以ISER[0]為例:


[31:0] SETENA中斷設定使能位。
寫:
0 =無影響
1 =使能中斷。
讀:
0 =中斷是禁止的
1=中斷已經被使能

如果要使能0號中斷,就向該暫存器的0位寫1,如果要使能38號中斷,就向NVIC_ISER[1]的6位寫1,如此類推,至於哪個中斷對應哪個中斷號,請參見參考手冊《RM0090 Reference manual》中的第9章Table 30. Vector table的Position一列。

中斷除能暫存器NVIC_ICER[8]

中斷除能暫存器共有8個,ICER[0]設定0~31號中斷除能,ICER[1]設定32~63號中斷的使能,如此類推。以下以ICER[0]為例:


[31:0] SETENA中斷設定使能位。
寫:
0 =無影響
1 =除能中斷。
讀:
0 =中斷是禁止的
1=中斷已經被使能

以下暫存器均為8個,僅以***R[0]為例

中斷掛起設定暫存器NVIC_ISPR[8]


[31:0]SETPEND中斷掛起設定位。
寫:
0 =無影響
1 =改變中斷狀態為掛起。
讀:
0 =中斷沒有掛起
1 =中斷正在等待處理。

解除中斷掛起暫存器NVIC_ICPR[8]


[31:0] CLRPEND中斷清除掛起位。
寫:
0 =無影響
1 =刪除中斷的掛起狀態。
讀:
0 =沒有掛起的中斷
1 =中斷正在等待處理。

中斷啟用位暫存器NVIC_IABR[8]


[31:0]中斷活躍的標誌:
0 =中斷不活躍
1 =中斷活躍。

如果相應的中斷的狀態是作為一個活躍的或活躍和正被掛起的,讀該位將會讀出1。

中斷優先順序暫存器NVIC_IPR[60]


       中斷優先順序暫存器為60個32位暫存器,st的結構體中用了240個8位的位元組陣列NVIC->IP[240]來對映,每一個對應一箇中斷的優先順序。

ARM的中斷優先順序分兩種,搶佔優先順序和響應優先順序。

        具有高搶佔式優先順序的中斷可以在具有低搶佔式優先順序的中斷處理過程中被響應,即中斷巢狀,或者說高搶佔式優先順序的中斷可以巢狀低搶佔式優先順序的中斷。

         當兩個中斷源的搶佔式優先順序相同時,這兩個中斷將沒有巢狀關係,當一箇中斷到來後,如果正在處理另一箇中斷,這個後到來的中斷就要等到前一箇中斷處理完之後才能被處理。如果這兩個中斷同時到達,則中斷控制器根據他們的響應優先順序高低來決定先處理哪一個;如果他們的搶佔式優先順序和響應優先順序都相等,則根據他們在中斷表中的排位順序決定先處理哪一個。

        中斷優先順序分組就是把優先順序暫存器分割,分開哪幾位是響應優先順序,哪幾位是搶佔優先順序。至於怎樣設定分組,就要看一個不屬於NVIC的暫存器了。

應用中斷和復位控制暫存器SCB_AIRCR


在這裡我們需要看的是[31:16]位和[10:8]位,[31:16]位是識別碼,用以保護此暫存器不會被意外修改,[10:8]位就是中斷優先順序分組的設定位。

[31:16]

寫:VECTKEYSTAT
讀:VECTKEY
RW註冊鍵:
讀為0xFA05
寫入時,要寫0x05FA到 VECTKEY,否則寫入將被忽略。

[10:8]中斷優先順序

每一個ARM的M4中斷優先順序設計為可程式設計的8位,具體到stm32f4就只留給使用者4位共16級的可程式設計優先順序,其中低4位已被佔用。也就是說stm32f4的優先順序分組情況如下表所示:

[10:8]

分割點

搶佔優先順序位

響應優先順序位

搶佔優先順序數

響應優先順序數

0b011

xxxx

[7:4]

none

16

1

0b100

xxx.y

[7:5]

[4]

8

2

0b101

xx.yy

[7:6]

[5:4]

4

4

0b110

x.yyy

[7]

[6:4]

2

8

0b111

yyyy

none

[7:4]

1

16

最後一個NVIC的暫存器

軟體觸發中斷暫存器NVIC_STIR


當SCB_CCR的USERSETMPEND位為1時,無特權的使用者程式才能寫此暫存器。

[31:9]保留。
[8:0] INTID  ID號中斷觸發,
範圍0-239。例如,0x03的指定中斷IRQ3觸發。

相關推薦

STM32關於NVIC方向理解

五、NVIC        中斷向量巢狀控制器是用來管理所有中斷和事件的,包括中斷的使能和除能,中斷的優先順序。這個是屬於核心的東西,所以ST的參考手冊上對它的描述較少,但他又是十分重要的東西,要了解它就要看ARM的《Cortex™-M4 Devices Generi

STM32 系列之 DAC 運用於理解

在這裡,我也不多BB,基本是看了原子的PDF之後,自己理解。所以可能比較簡略 單個DAC通道如下: VDDA 和VSSA為模擬電源端。   輸出電壓 = Vref+ * (DORx/2^n)          &

理解

   1暫存器和儲存器   儲存器在CPU外,一般指硬碟,U盤等可以在切斷電源後儲存資料的裝置,容量一般比較大,缺點是讀寫速度都很慢,普通的機械硬碟讀寫速度一般是50MB/S左右。記憶體和暫存器就是為了解決儲存器讀寫速度慢而產生的多級儲存機制,從20

、快取、記憶體、硬碟、儲存器的理解

只要能儲存資料的器件都可以稱之為儲存器,它的含義覆蓋了暫存器,快取,記憶體,硬碟。cpu訪問快慢的速度依次為 暫存器-> 快取->記憶體->硬碟 暫存器是中央處理器的組成部分,是一種

ESP和EBP的理解

一直對暫存器ESP和EBP的概念總是有些混淆,檢視定義ESP是棧頂指標,EBP是存取堆疊指標。還是不能很透徹理解。之後借於一段彙編程式碼,總算是對兩者有個比較清晰的理解。下面是按呼叫約定__stdcall 呼叫函式test(int p1,int p2)的彙編程式碼;假設執行

理解逐次逼近型ADC:與其它型別ADC的架構對比

引言   逐次逼近暫存器型(SAR)模擬數字轉換器(ADC)是取樣速率低於5Msps (每秒百萬次取樣)的中等至高解析度應用的常見結構。SAR ADC的解析度一般為8位至16位,具有低功耗、小尺寸等特點。這些特點使該型別ADC具有很寬的應用範圍,例如便攜/電池供電儀表、筆輸入

檔案,隨機訪問儲存器讀寫理解

狀態:特徵是會保持一段時間的,不會突變。 時序(sequential ,順序)電路:預測輸出會怎麼變化,是由當前狀態和輸入決定。(時序電路的特徵和時鐘沒關係) 暫存器和時序邏輯什麼關係。!!!!!  通過控制邏輯(時鐘訊號與地址為輸入),控制儲存器是否接受時鐘訊號的控

ESP和EBP的一些理解

PS:EBP是當前函式的存取指標,即儲存或者讀取數時的指標基地址;ESP就是當前函式的棧頂指標。每一次發生函式的呼叫(主函式呼叫子函式)時,在被呼叫函式初始時,都會把當前函式(主函式)的EBP壓棧,以便從子函式返回到主函式時可以獲取EBP。 下面是按呼叫約定__stdc

第二章 相關內容總結

      對於一個彙編程式設計師來說,CPU中的主要部件是暫存器。暫存器是CPU中程式設計師可以用指令讀寫的部件。程式設計師通過改變各種暫存器中的內容來實現對CPU的控制。不同的CPU,暫存器的個數、結構是不相同的。8086CPU有14個暫存器,每個暫存器有一個名稱。 &nb

的分類

資料暫存器 資料暫存器主要用來儲存運算元和運算結果等資訊,從而節省讀取運算元所需佔用匯流排和訪問儲存器的時間。 變址暫存器 它們主要用於存放儲存單元在段內的偏移量,用它們可實現多種儲存器運算元的定址方式(在第3章有詳細介紹),為以不同的地址形式訪問儲存單元提供方便。 變址暫存器不可分割成

組合語言第三章(記憶體訪問)

3.1  在CPU中,用一個16位暫存器來儲存一個字,一個字兩個位元組,高8位存放高位位元組,低8位存放低位位元組,低位元組所在的記憶體單元稱為起始地址。 3.2 3.3 8086CPU中,通常用DS暫存器來存放要訪問資料的段地址(字或者位元組) 舉個例子: mov bx,1000H mov

第5章 用機器計算

第5章 用暫存器機器計算 我的目標是展示出 heavenly天使 機器 不是 divine, live being生靈 的一種, 而是 clockwork 鐘錶匠(他認為時鐘具有製作者賦與其的對工作的榮耀感的靈性) 的一種, 在一種最簡單的和材料的力量的範圍內  引起了幾乎所有的 多種

5.1.1 描述機器的語言

 5.1.1 描述暫存器機器的語言 資料路徑圖和控制器圖對於表示像求最大公約數這樣的簡單機器是足夠的了。 但是用它們來描述如LISP直譯器這樣的大型機器就是不明智的了。為了能夠實現複雜的機器, 我們建立一個語言以文字的格式,來表示被資料路徑與控制器提供的資訊。 我們將開始一種標記法來直接對

5.1 設計機器

5.1 設計暫存器機器 為了設計一個暫存器機器,我們必須設計它的資料路徑(暫存器和操作) 和序列化這些操作的控制器。為了演示一個簡單的暫存器機器的設計, 讓我們看一看尤拉的演算法,就是用於計算兩個整數的最大公約數的。 正如我們在1.2.5部分看到的那樣,尤拉演算法能被用一個迭代的流程執行。 如下面的

5.2 一個機器的模擬器

5.2  一個暫存器機器的模擬器 為了很好的理解暫存器機器,我們必須測試 我們設計的機器能否 按預期執行程式。 測試一個設計的一個方法是手工模擬控制器的操作,如在5.5中的練習題。 如果不是針對於最簡單的機器,這就是極其麻煩的。 在這部分中,我們用暫存器機器 語言為機器構造了一個模擬器

彙編 第二章

在我看來,第二章中主要圍繞著6個暫存器展開闡述。它們分別是AX、BX、CX、DX、CS、IP。   在此之前,通過本章的學習,使我對CPU這一概念又有了更深一步的認識。 1.CPU中字長與位寬的區別 通常情況下,用字長來描述CPU。例如,字長16,則稱16位CPU。那麼16位CPU有什麼具體

第3章 (記憶體訪問)小結

記憶體中字的儲存 字單元,即存放一個字形資料(16位)的記憶體單元,由兩個地址連續的記憶體單元組成。高地址記憶體單元中存放字型資料的高位位元組,低地址記憶體單元中存放字型資料的低位位元組。我們將起始地址為N的字單元簡稱為N地址字單元。   DS和[address] “[...]”表示一個記憶

第三章,整理

第三章,記憶體訪問 一,字資料在記憶體中的儲存 1, 記憶體以位元組為單位,劃分為若干個單元。位元組:8bit,字:16bit,雙字:32bit,四字:64bit 2, 字資料的儲存的原則為:高-高-低-低,字資料的低位位元組存放於低地址記憶體單元,字資料的高位位元組存放於高地址的記憶體單元。取低地址記

第三章,

第三章,記憶體訪問 一,字資料在記憶體中的儲存 1, 記憶體以位元組為單位,劃分為若干個單元。位元組:8bit,字:16bit,雙字:32bit,四字:64bit 2, 字資料的儲存的原則為:高-高-低-低,字資料的低位位元組存放於低地址記憶體單元,字資料的高位位元組存放於高地址的記憶體單元。取低地址記

實驗二————的訪問

  1.實驗前的準備:在使用a命令除錯之前,使用e命令將記憶體單元e 0021:0  0021:7  修改為30H,31H,32H,33H,34H,34H,35H,36H,37H         把第74頁的mov ax,ffff ——>mov ax,0021 mov