1. 程式人生 > >STM32中斷的使能

STM32中斷的使能

lib_V3.0.0 的標頭檔案misc.c的void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)說: 

/* Enable the Selected IRQ Channels ---------------*/
 NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);

============================

STM32有"60 maskable interrupt channels (not including the 16 interrupt lines of Cortex-M3)"[翻譯]60個可遮蔽中斷通道(不包含16個Cortex-M3的中斷線),這60個可遮蔽中斷通道的Position依次為0——59

所以儘管在core_cm3.h(Copyright (C) 2009 ARM Limited.)定義了__IO uint32_t  ISER[8]; ,實際上只用到了ISER[0]ISER[1]

其中Position0——31的使能位放到ISER[0]裡,Position32——59的使能位放到ISER[1]裡。

因此NVIC_InitStruct->NVIC_IRQChannel >> 0x05的值要麼等於0,要麼等於1。(Position0——31右移5位得0,Position32——59右移5位得1)

========================================

注意 : 0x1F的資料型別是(uint8_t)

注意: MDK無符號位右移為"邏輯右移",即右移後,左邊空出的部分用0填補。