STM32 中的嵌套向量中斷控制器(NVIC)詳解
《STM32 中的嵌套向量中斷控制器(NVIC)詳解》這篇在博客園熱度很高,講的正是大家天天碰到的事。下面幫你把要點捋出來,結尾有能直接抄的結論。
首先明確: 搶佔優先級決定“能不能打斷”;響應優先級決定“同時等待時誰先執行”。 1. NVIC 是什麼 NVIC(Nested Vectored Interrupt Controller,嵌套向量中斷控制器)負責: 開啓、關閉中斷 保存中斷的掛起狀態 判斷多箇中斷的執行順序 實現中斷嵌套 根據中斷號找到對應的中斷服務函數 所謂“嵌套”,就是 CPU 正在執行一箇中斷服務函數時,可以被更高搶佔優先級的中斷打斷。 2. STM32 的優先級數字越小,等級越高 優先級數值 0 > 優先級數值 1 > 優先級數值 2 ... 這裏的 > 表示“實際優先級更高”。 例如: [代碼示例略] A 的優先級高於 B。B 執行過程中,A 可以打斷 B。 3. NVIC的 4 位優先級 很多 STM32 芯片實際實現了 4 個優先級位,因此一共有:[2^4=16] 個編碼值,也就是 0~15 。
首先明確: 搶佔優先級決定“能不能打斷”;響應優先級決定“同時等待時誰先執行”。 1. NVIC 是什麼 NVIC(Nested Vectored Interrupt Controller,嵌套向量中斷控制器)負責: 開啓、關閉中斷 保存中斷的掛起狀態 判斷多箇中斷的執行順序 實現中斷嵌套 根據中斷號找到對應的中斷服務函數 所謂“嵌套”,就是 CPU 正在執行一箇中斷服務函數時,可以被更高搶佔優先級的中斷打斷。 2. STM32 的優先級數字越小,等級越高 優先級數值 0 > 優先級數值 1 > 優先級數值 2 ... 這裏的 > 表示“實際優先級更高”。 例如: [代碼示例略] A 的優先級高於 B。B 執行過程中,A 可以打斷 B。 3. NVIC的 4 位優先級 很多 STM32 芯片實際實現了 4 個優先級位,因此一共有:[2^4=16] 個編碼值,也就是 0~15 。 這 4 位可以切分成兩部分: [代碼示例略] 分成五種模式: 分組 搶佔優先級位數 搶佔值範圍 響應優先級位數 響應值範圍 分組0 0位 只能爲0 4位 0~15 分組1 1位 0~1 3位 0~7 分組2 2位 0~3 2位 0~3 分組3 3位 0~7 1位 0~1 分組4 4位 0~15 0位 只能爲0 這裏的 4 位不是說每個中斷都有兩個獨立的 4 位字段,而是說: 總共只有 4 位,需要在搶佔優先級和響應優先級之間分配。
首先明確: 搶佔優先級決定“能不能打斷”;響應優先級決定“同時等待時誰先執行”。 1. NVIC 是什麼 NVIC(Nested Vectored Interrupt Controller,嵌套向量中斷控制器)負責: 開啓、關閉中斷 保存中斷的掛起狀態 判斷多箇中斷的執行順序 實現中斷嵌套 根據中斷號找到對應的中斷服務函數 所謂“嵌套”,就是 CPU 正在執行一箇中斷服務函數時,可以被更高搶佔優先級的中斷打斷。 2. STM32 的優先級數字越小,等級越高 優先級數值 0 > 優先級數值 1 > 優先級數值 2 ... 這裏的 > 表示“實際優先級更高”。 例如: [代碼示例略] A 的優先級高於 B。B 執行過程中,A 可以打斷 B。 3. NVIC的 4 位優先級 很多 STM32 芯片實際實現了 4 個優先級位,因此一共有:[2^4=16] 個編碼值,也就是 0~15 。 這 4 位可以切分成兩部分: [代碼示例略] 分成五種模式: 分組 搶佔優先級位數 搶佔值範圍 響應優先級位數 響應值範圍 分組0 0位 只能爲0 4位 0~15 分組1 1位 0~1 3位 0~7 分組2 2位 0~3 2位 0~3 分組3 3位 0~7 1位 0~1 分組4 4位 0~15 0位 只能爲0 這裏的 4 位不是說每個中斷都有兩個獨立的 4 位字段,而是說: 總共只有 4 位,需要在搶佔優先級和響應優先級之間分配。 4. 搶佔優先級:決定能否發生中斷嵌套 假設: [代碼示例略] 由於數值越小優先級越高,因此 A 的搶佔優先級高於 B。
首先明確: 搶佔優先級決定“能不能打斷”;響應優先級決定“同時等待時誰先執行”。 1. NVIC 是什麼 NVIC(Nested Vectored Interrupt Controller,嵌套向量中斷控制器)負責: 開啓、關閉中斷 保存中斷的掛起狀態 判斷多箇中斷的執行順序 實現中斷嵌套 根據中斷號找到對應的中斷服務函數 所謂“嵌套”,就是 CPU 正在執行一箇中斷服務函數時,可以被更高搶佔優先級的中斷打斷。 2. STM32 的優先級數字越小,等級越高 優先級數值 0 > 優先級數值 1 > 優先級數值 2 ... 這裏的 > 表示“實際優先級更高”。 例如: [代碼示例略] A 的優先級高於 B。B 執行過程中,A 可以打斷 B。 3. NVIC的 4 位優先級 很多 STM32 芯片實際實現了 4 個優先級位,因此一共有:[2^4=16] 個編碼值,也就是 0~15 。 這 4 位可以切分成兩部分: [代碼示例略] 分成五種模式: 分組 搶佔優先級位數 搶佔值範圍 響應優先級位數 響應值範圍 分組0 0位 只能爲0 4位 0~15 分組1 1位 0~1 3位 0~7 分組2 2位 0~3 2位 0~3 分組3 3位 0~7 1位 0~1 分組4 4位 0~15 0位 只能爲0 這裏的 4 位不是說每個中斷都有兩個獨立的 4 位字段,而是說: 總共只有 4 位,需要在搶佔優先級和響應優先級之間分配。 4. 搶佔優先級:決定能否發生中斷嵌套 假設: [代碼示例略] 由於數值越小優先級越高,因此 A 的搶佔優先級高於 B。 如果 CPU 正在執行 B,此時 A 到來: [代碼示例略] 這就是中斷嵌套。
首先明確: 搶佔優先級決定“能不能打斷”;響應優先級決定“同時等待時誰先執行”。 1. NVIC 是什麼 NVIC(Nested Vectored Interrupt Controller,嵌套向量中斷控制器)負責: 開啓、關閉中斷 保存中斷的掛起狀態 判斷多箇中斷的執行順序 實現中斷嵌套 根據中斷號找到對應的中斷服務函數 所謂“嵌套”,就是 CPU 正在執行一箇中斷服務函數時,可以被更高搶佔優先級的中斷打斷。 2. STM32 的優先級數字越小,等級越高 優先級數值 0 > 優先級數值 1 > 優先級數值 2 ... 這裏的 > 表示“實際優先級更高”。 例如: [代碼示例略] A 的優先級高於 B。B 執行過程中,A 可以打斷 B。 3. NVIC的 4 位優先級 很多 STM32 芯片實際實現了 4 個優先級位,因此一共有:[2^4=16] 個編碼值,也就是 0~15 。 這 4 位可以切分成兩部分: [代碼示例略] 分成五種模式: 分組 搶佔優先級位數 搶佔值範圍 響應優先級位數 響應值範圍 分組0 0位 只能爲0 4位 0~15 分組1 1位 0~1 3位 0~7 分組2 2位 0~3 2位 0~3 分組3 3位 0~7 1位 0~1 分組4 4位 0~15 0位 只能爲0 這裏的 4 位不是說每個中斷都有兩個獨立的 4 位字段,而是說: 總共只有 4 位,需要在搶佔優先級和響應優先級之間分配。 4. 搶佔優先級:決定能否發生中斷嵌套 假設: [代碼示例略] 由於數值越小優先級越高,因此 A 的搶佔優先級高於 B。 如果 CPU 正在執行 B,此時 A 到來: [代碼示例略] 這就是中斷嵌套。 反過來,如果正在執行 A,B 到來,B 不能打斷 A,只能進入掛起狀態,等 A 執行完再處理。
建議先收藏再實操:挑其中一個點今天就試試,跑通了再看下一個。知識只有過手纔是你的,你準備先試哪一點? 來源|博客園《STM32 中的嵌套向量中斷控制器(NVIC)詳解》,https://www.cnblogs.com/wangzhengyi/p/22948947.html
評論(0)
暫無評論,來搶第一條。