GD32F103的EXTI可以产生中断,也产生事件信号。
GD32F03的EXTI触发源:
1、I/O管脚的16根线;
2、内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。
通过配置GPIO模块的AFIO_EXTISSx寄存器,所有的GPIO管脚都可以被选作EXTI的触发源。因此,EXTI可以产生中断,也产生事件信号。
//函数功能:初始化ExternalInterrupt3
void ExternalInterrupt3_Init(void)
{
//NVIC_PRIGROUP_PRE4_SUB0:抢占优先级为4bit(取值为0~15),子优先级为0bit(没有响应优先级)
//NVIC_PRIGROUP_PRE3_SUB1:抢占优先级为3bit(取值为0~7),子优先级为1bit(取值为0~1)
//NVIC_PRIGROUP_PRE2_SUB2:抢占优先级为2bit(取值为0~3),子优先级为2bit(取值为0~3)
//NVIC_PRIGROUP_PRE1_SUB3:抢占优先级为1bit(取值为0~1),子优先级为3bit(取值为0~7)
//NVIC_PRIGROUP_PRE0_SUB4:抢占优先级为0bit(没有抢占优先级),子优先级为3bit(取值为0~15)
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);//设置系统中断优先级"抢占优先级为4bit,子优先级为0bit"
nvic_irq_enable(EXTI3_IRQn, 2U, 0U);//设置EXTI3_IRQn的中断优先级,抢占优先级为2,子优先级为0
rcu_periph_clock_enable(RCU_GPIOE);//使能GPIOE时钟,enable GPIO clock
rcu_periph_clock_enable(RCU_AF); //外部中断,需要使能复用功能时钟
gpio_init(GPIOE, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_3);//将GPIOE3设置为浮空输入
gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOE, GPIO_PIN_SOURCE_3);
//设置GE3引脚为外部中断源,select GPIO pin exti sources
exti_init(EXTI_3, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
//配置外部中断线使用外部中断3(EXTI_3)
//中断模式为外部中断(EXTI_INTERRUPT)
//中断触发方式为下降沿中断(EXTI_TRIG_FALLING)
exti_interrupt_flag_clear(EXTI_3);//清除外部中断3标志
exti_interrupt_enable(EXTI_3);//使能外部中断3(EXTI_3)
exti_event_enable(EXTI_3);//使能外部事件3(EXTI_3)
}
除了EXTI中断,EXTI还可以向处理器提供事件信号。
Cortex-M3内核完全支持等待中断(WFI),等待 事件(WFE)和发送事件(SEV)指令。芯片内部有一个唤醒中断控制器(WIC),用户可以放心的让 处理器和NVIC进入功耗极低的省电模式,由WIC来识别中断和事件以及判断优先级。当某些预 期的事件发生时,EXTI能唤醒处理器及整个系统,例如一个特定的I/O管脚电平翻转或者RTC 闹钟动作。