STM32的中斷處理1

2021-09-30 10:30:45 字數 1247 閱讀 6475

1、msp和psp

1)control暫存器

2)復位後預設使用msp。

3)中斷為處理模式(handle),永遠是特權級;非中斷即為執行緒模式,可在中斷中指定(control[0])為特權級或使用者級。

4)處理模式始終使用msp;執行緒模式可選使用psp或msp(有os時,一般使用psp),由exc_return控制。

2、進入中斷:

1)依次把xpsr, pc, lr, r12以及r3‐r0由硬體自動壓入適當的堆疊中:

2)如果當響應異常時,當前的**正在使用psp,則壓入psp,即使用執行緒堆疊;否則壓入msp,使用主堆疊。一旦進入了服務例程,就將一直使用主堆疊。 

3)pc:在向量取出完畢後,pc將指向服務例程的入口位址, 

4)r:lr的用法將被重新解釋,其值也被更新成一種特殊的值,稱為「exc_return」,並且在異常返回時使用。exc_return的二進位制值除了最低4位外全為1,而其最低4位則有另外的含義(見表9.3和表9.4)。 

合法的exc_return數值 功能 

0xffff_fff1  返回handler模式 

0xffff_fff9  返回執行緒模式,並使用主堆疊(sp=msp) 

0xffff_fffd  返回執行緒模式,並使用執行緒堆疊(sp=psp) 

可以看到ucos第一次任務切換時,該值從0xffff_fff9  被修改為0xffff_fffd,即完成msp到psp的切換。

3、從中斷中返回:

返回指令  工作原理 

bx //當lr儲存exc_return時,使用bx lr即可返回 

pop   和pop    

//在服務例程中,lr的值常常會被壓入棧。此時即可使用pop指令把lr儲存的exc_return往pc裡彈,從而激起處理器做中斷返回 

ldr與ldm  //把pc作為目的暫存器,亦可啟動中斷返回序列

按照相反順序彈出堆疊,如bx lr指令,pc檢測到特殊的值exc_return,認為是從中斷中返回。

4、咬尾中斷:後到中斷無法搶占時,減少壓棧出棧處理。

STM32外部中斷

一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...

stm32外部中斷

外部中斷程式配置流程 rcc 時鐘配置 void rcc configuration void 時鐘配置 開啟各路時鐘 rcc apb2periphclockcmd rcc apb2periph usart1 rcc apb2periph gpioa rcc apb2periph afio,enab...

stm32外部中斷

好久沒玩微控制器了,最近閒著沒事想拿出來玩玩,沒想到乙個stm32的外部中斷讓我花費了兩天時間,好的的挫折啊!終於下午除錯成功,下面來說一下我的除錯之路吧!硬體就是兩個按鍵,四個led,led事共陽極接法,按鍵一端接地一端接gpio口,通過按鍵中斷控制led。程式寫好以後發現始終無法進入中斷,開始查...