iT邦幫忙

2021 iThome 鐵人賽

DAY 12
1
Arm Platforms

STM32 基礎入門教學系列 第 12

【Day12】:NVIC中斷概要

STM32的中斷很強大,每個外設都可以產生中斷,在這裡我們先大略的講解中斷的概念,等之後在各個章節中,我們會再解釋如何讓各個外設進入中斷。

中斷是什麼?

以前在寫Arduino的程式的時候,我們就是把程式放在loop內,把你要做的所有事情放在裡面,這會衍伸出一個問題,那就是你一次只能做一件事!這聽起來很像廢話,但這確實導致了一些麻煩事。例如你想要每隔10ms對氣泵的壓力作測量,那假設你把偵測的函式寫在STM32的while(相當於Arduino的loop)當中,你就很難做到控制偵測的頻率,因為這相當於單晶片的效能有多好,甚至你while裡面做的事情多寡也會影響跑一次迴圈的時間。但中斷就不一樣了

中斷就是假設你在做某件事的過程當中,有另一件事更重要必須要先做,你就會中斷你現在正在做的事,先去做其他事,做完再回來,理想上應將程式分配在中斷當中執行,這樣可以更好的做到任務的排程。另外STM32甚至可允許巢狀中斷,也就是在中斷的時候還可以再中斷。

雖然我不是很理解這個名字的意思,但我們還是稍微提一下,NVIC全稱為Nested Vectored Interrupt Controller,中文譯為嵌套向量中斷控制器

優先級定義

假如有兩個地方同時發起中斷請求,這個時候就必須決定要先做哪一個,優先級的分組是由中斷優先級暫存器NVIC_IPRX(在F429中,x=0~90)來配置外部中斷的優先級,原則上每個外部中斷可配置的優先級為0~255,數值越小優先級越高。但是因為精簡化的設計,實際上支持的優先級會減少,在F429中,只使用了bit4~bit7,如下圖:
https://ithelp.ithome.com.tw/upload/images/20210910/20141525iCdmEPeYGP.jpg

優先級分組

表達優先級的那四個bit,又被分成搶暫優先級(主優先級)與子優先級。如果有許多中斷同時發起請求,主優先級高的就會搶暫主優先級低的優先執行,如果主優先級相同則先比子優先級,如果兩個優先級都相同,就比較他們的中斷編號,編號小的優先執行。
優先級的分組是由程序中斷極復位控制暫存器AIRCR的PRIGROUP[10:8]位決定([10:8]的意思就是某一個暫存器的第8個bit到第10個bit,共3個bit),F429分為了以下五組,見下表:
https://ithelp.ithome.com.tw/upload/images/20210910/20141525e7eIqC49MB.jpg
而要使用哪一個分組方式,以及修改搶暫優先級與子優先級,可以點選system core底下的NVIC進行配置,預設情況下分組方式4個bit全部都給搶暫優先級,沒有子優先級。
https://ithelp.ithome.com.tw/upload/images/20210910/20141525v6UYfPHsFX.jpg
Preemption Priority為搶占優先級(主優先級);Sub Priority為子優先級


上一篇
【Day11】:庫函數包裝—對於底層暫存器的操縱(下)
下一篇
【Day13】:EXTI外部中斷/事件控制器
系列文
STM32 基礎入門教學30

尚未有邦友留言

立即登入留言