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填補。