当我们需要使用寄存器法配置IO口的外部中断时,需要开启IO口与外部中断线的映射关系才能正常实现外部中断的效果
23跟中断线:
EXTI控制器内部:
SYSCFG是系统配置控制器,是一个片上外设
因此在使用它时,需要打开时钟 --- 挂载在APB2总线
SYSCFG系统配置控制器主要用于管理对可执行代码的存储区域的地址重映射、选择以太网 PHY 接口以及管理 GPIO 的外部中断线连接。
当我们配置PA0作为EXTI0外部中断时,就需要配置SYSCFG->EXTICR1寄存器来实现映射
在KEIL5中寄存器调用:
SYSCFG->EXTICR1 ---> SYSCFG->EXTICR[0]
SYSCFG->EXTICR2 ---> SYSCFG->EXTICR[1]
SYSCFG->EXTICR3 ---> SYSCFG->EXTICR[2]
SYSCFG->EXTICR4 ---> SYSCFG->EXTICR[3]
EXTI配置代码:
其中EXTI[15:0]的每个中断线在硬件上是与对应16个IO口直连,因此不用开启时钟
/*************************************
***** 函数功能:EXTI0中断初始化
***** 返回值:void
***** 形 参:void
***** 函数说明:
***** KEY1 接 PA0 按下按键为高电平
***** 上升沿触发中断
***** 系统配置控制器低位寄存器:SYSCFG->EXTICR[0]
*************************************/
void Exti0_Init(void)
{
//1.打开GPIOA,SYSCFG的时钟
RCC->AHB1ENR |= 1<<0;
RCC->APB2ENR |= 1<<14;
//2.初始化PA0 --- 输入模式
GPIOA->MODER &= ~(3<<0);//输入模式
GPIOA->PUPDR &= ~(3<<0);//无上下拉
//3.配置IO口与EXTI映射关系
SYSCFG->EXTICR[0] &= ~(0xf<<0);//PA0 --- EXTI0
//4.初始化EXTI
EXTI->IMR |= 1<<0; //使能中断请求
EXTI->RTSR |= 1<<0; //设置边沿检测 --- 允许上升沿触发中断
//5.配置NVIC
u32 pri = NVIC_EncodePriority(5, 1, 1);//计算优先级编码值
NVIC_SetPriority(EXTI0_IRQn, pri);//设置优先级
NVIC_EnableIRQ(EXTI0_IRQn);//使能中断源
}