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填补。
文章评论(0条评论)
登录后参与讨论