【轉】STM32 - 程序跳轉、中斷、開關總中斷


程序跳轉注意:

1、如果跳轉之前的程序A里有些中斷沒有關,在跳轉之后程序B的中斷觸發,但程序B里沒有定義中斷響應函數,找不到地址會導致死機。

 2、程序跳轉前關總中斷,程序跳轉后開總中斷(關總中斷,只是屏蔽了中斷;當開總中斷后,關總中斷之前開的如定時器的中斷還是開啟的)

 

開關總中斷:

在STM32/Cortex-M3中是通過改變CPU的當前優先級來允許或禁止中斷

PRIMASK位:只允許NMI和hard fault異常,其他中斷/異常都被屏蔽(當前CPU優先級=0)。

FAULTMASK位:只允許NMI,其他所有中斷/異常都被屏蔽(當前CPU優先級=-1)。

 

第一種方法:

PRIMASK 用於除能在NMI 和硬fault 之外的所有異常,它有效地把當前優先級改為0(可編程優先級中的最高優先級)。

void__disable_irq (void);//關閉總中斷

void __enable_irq (void);//開放總中斷

 

__set_PRIMASK(1);//關閉總中斷

__set_PRIMASK(0);//開放總中斷

 

第二種方法:

FAULTMASK 更絕,它把當前優先級改為‐ 1 。這么一來,連硬fault 都被掩蔽了。使用方案與PRIMASK 的相似。但要注意的是,FAULTMASK 會在異常退出時自動清零。

void __disable_fault_irq (void); //關閉總中斷

void __enable_fault_irq (void);//開放總中斷

 

__set_FAULTMASK(1);//關閉總中斷

__set_FAULTMASK(0);//開放總中斷

 

常常使用

void __disable_irq (void);//關閉總中斷

void __enable_irq (void);//開放總中斷

 

 

來源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM