欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: STM32系列MCU芯片開關總中斷的話題 [打印本頁]

作者: taoran    時間: 2015-12-8 03:09
標題: STM32系列MCU芯片開關總中斷的話題
整理:MilerShao

時不時會有人詢問基于ARM CORTEX Mn 內核的STM32各系列MCU芯片應用開發時開、關總中斷的函數或指令的話題,尤其最近,頻繁有人問起STM32F0系列 MCU關閉總中斷的問題,其中有些人還是用過STM32F1系列芯片的,說找不到相應的函數。

隨著基于CORTEX Mn 各內核的MCU芯片越來越多和相關編譯工具的升級換代,編譯工具在有關內核指令操作的文檔安排及函數書寫等方面可能會發生些細微變化。 所以即使用過STM32F1系列產品的工程師,在使用較晚推出的STM32F0芯片開發時發現那些跟內核操作有關的指令或函數不知哪里去找了。以STM32各系列的標準固件庫為例,與內核有關的指令及函數都可以在...\LIBRARIES\CMSIS\...后面目錄的相關文件里找到。于不同系列的標準固件庫中所對應的子目錄及相關文件名略有差異。

一般來講,我們是不用或者說用不著做總中斷的關閉動作的,或許個別時刻可能真有需要。當然也不排除部分人可能出于之前使用別的MCU開發習慣或者好奇想知道怎么用。這里簡單地分享下。

這個開、關STM32芯片總中斷的指令,是針對ARM CORTEX內核的操作指令。在各ARM內核編程手冊上一定可以找到,但在STM32芯片相關技術手冊上是找不到的。開、關總中斷的匯編指令分別就是CPSIE i、CPSID i,對于各個ARM CORTEX系列MCU芯片來說,都是一樣的。

目前各編譯工具都把與內核相關ARM指令根據指令功能將其中某一條或幾條匯編指令封裝為C函數,函數名相對更為直觀、好記,方便用戶需要時拿來使用。比方在ARM MDK環境下,上面兩個開關總中斷的指令封裝成如下2個內嵌函數。

1、關閉【或禁用】總中斷的指令函數:

__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)

{

__ASM volatile ("cpsid i" : : : "memory");

}


2、開啟【或使能】總中斷的指令函數【芯片復位后總中斷時默認打開的,即使能的】:

__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)

{

__ASM volatile ("cpsie i" : : : "memory");

}


需要關閉總中斷時,在用戶代碼里直接放置 __disable_irq( );

需要開啟總中斷時,在用戶代碼里直接放置 __enable_irq( ); 。注意是下劃線是兩個橫杠。


作者: IdeaMing    時間: 2018-5-23 17:55
為什么STM32在手冊里不寫這個啊,像51很清楚的。難道是有什么特殊原因??




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1