中斷管理函式
cm3核心支援256個中斷,其中包含了16個核心中斷和240個外部中斷,並且具有256級的可程式設計中斷設定。但stm32並沒有使用cm3核心的全部東西,而是只用了它的一部分。stm32有76個中斷,包括16個核心中斷和60個可遮蔽中斷,具有16級可程式設計的中斷優先順序。而我們常用的就是這60個可遮蔽中斷,所以我們就只針對這60個可遮蔽中斷進行介紹。
typedef struct
nvic_typedef;
iser[2]:interrupt set enable registers 中斷使能暫存器組
icer[2]:interrupt clear enable registers 中斷除能暫存器組
ispr[2]:interrupt set pending registers 中斷掛起暫存器組
icpr[2]: interrupt clear pending registers 中斷解掛暫存器組
iabr[2]:interrupt active bit registers 中斷啟用標誌暫存器組
主要分析
ipr[15]:interrupt priority registers 中斷優先順序控制暫存器組
使用函式實現中斷分組: 可選分組0--4
my_nvic_prioritygroupconfig(u8 nvic_group)
語句解讀:
temp1=(~nvic_group)&0x07; 由於
所以組號取反與111 即得到分組所需暫存器值
temp|=0x05fa0000;
使用函式實現中斷優先順序設定:
void my_nvic_init(u8 nvic_preemptionpriority,u8 nvic_subpriority,u8 nvic_channel,u8 nvic_group)
exti_typedef;
imr:中斷遮蔽暫存器interrupt mask register 32位暫存器前19位有效
emr: 事件遮蔽暫存器 event mask register 32位暫存器前19位有效
rtst: 上公升沿觸發選擇暫存器 rising edge trigger select register
ftsr:下降沿觸發選擇暫存器 falling edge trigger select register
swier:軟體中斷事件暫存器 software interrupt event register
pr: 掛起暫存器 pending register
i/o口復用裡的配置暫存器exticr 每個i/o口可以配置成中斷輸入
stm32 任何乙個io口都可以配置成中斷輸入口,但是io口的數目遠大於中斷線數(16個)。於是stm32就這樣設計,gpioa~gpiog的[15:0]分別對應中斷線15~0。這樣每個中斷線對應了最多7個io口,以線0為例:它對應了gpioa.0、piob.0、gpioc.0、gpiod.0、 gpioe.0、gpiof.0、gpiog.0。而中斷線每次只能連線到1個io口上,這樣就需要exticr來決定對應的中斷線配置到哪個gpio上了。
exticr在afio的結構體中定義如下
typedef struct
afio_typedef;
extirc暫存器總共4個,因為編譯器的暫存器都是從0號開始的,所以exticr[0]---exticr[3]對應
<>中的exticr1---exticr4 每個exticr用了其中低16位.
外部中斷配置函式:
void ex_nvic_config(u8 gpiox,u8 bitx,u8 trim)
注:
trim為觸發方式選擇變數; 0x01下降沿觸發 0x02 上公升沿觸發 0x03任意電平觸發.
STM32 NVIC巢狀向量中斷控制器函式分析
中斷管理函式 cm3核心支援256個中斷,其中包含了16個核心中斷和240個外部中斷,並且具有256級的可程式設計中斷設定。但stm32並沒有使用cm3核心的全部東西,而是只用了它的一部分。stm32有76個中斷,包括16個核心中斷和60個可遮蔽中斷,具有16級可程式設計的中斷優先順序。而我們常用的...
STM32NVIC中斷優先順序
cm3核心共支援256個中斷,其中包含了16個核心中斷,240個外部中斷,並且具有256級可程式設計中斷設定。但是stm32並沒有使用cm3核心全部的東西,stm32有84個中斷,其中包含了16個核心中斷,68個可遮蔽中斷,具有16級可變陳的中斷優先順序。typedef struct nvic ty...
STM32 NVIC 中斷優先順序管理
這裡以stm32f4系列為例。先簡單介紹下stm32f4的中斷分組,stm32f4將中斷分為5個組,組0 4.該分組的設定是有scb aircr暫存器的bit 10 8來定義的。具體分配關係如下表 假設說組設定為2,那麼此時每個中斷的中斷優先暫存器的高四位中的最高兩位是搶占優先順序,低兩位是響應優先...