【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(4)EXTI 中断介绍

发布者:清新风华最新更新时间:2024-11-05 来源: elecfans关键字:GD32  MCU  EXTI  中断 手机看文章 扫描二维码
随时随地手机看文章

EXTI(中断/事件控制器)包含多个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。 EXTI 有三种触发类型:上升沿触发、下降沿触发和任意沿触发。 EXTI中的每一个边沿检测电路都可以独立配置和屏蔽。

4.1.GD32 EXTI 外设原理简介

GD32 EXTI 主要特性(以 GD32F30x 为例)

◼ 高效的中断处理;

◼ 支持异常抢占和咬尾中断;

◼ 将系统从省电模式唤醒;

◼ 3 种触发类型:上升沿触发,下降沿触发和任意沿触发;

◼ 软件中断或事件触发;

◼ 可配置的触发源;

◼ Cortex-M4系统异常;

◼ 多达68种可屏蔽的外设中断;

◼ 4位中断优先级配置位,可配置16个中断优先级;

◼ EXTI中有多达20个相互独立的边沿检测电路;

EXTI 框图

输入图片说明

如图所示,EXTI 可分为两大部分功能,一个是产生中断,另一个是产生事件。EXTI的输入线可以通过寄存器设置为任意GPIO,也可以是一些外设的事件,输入线是存在电平变化的信号。

EXTI包含一个边沿检测电路,它会根据上升沿触发选择寄存器和下降沿触发选择寄存器对应位的设置来控制信号触发。边沿检测电路以输入线作为信号输入端,如果检测到有边沿跳变就输出有效信号给边沿检测电路,否则输出无效信号,而通过配置寄存器,可设置边沿检测电路响应跳变过程,如设置为上升沿触发、下降沿触发和双边沿触发。

EXTI还包含一个或门电路,它一个输入来自边沿检测电路,另外一个输入来自软件中断事件寄存器。软件中断事件寄存器允许我们通过程序控制就可以启动中断/事件线,这在某些地方非常有用。

中断/事件线

不同系列的MCU对应有不同数量、不同种类的中断/事件线,以GD32F10x系列为例,如EXTI中断线图所示它有20个中断/事件线,每个 GPIO都可以被设置为输入线,占用 EXTI0至EXTI15,另外 4根特定外设中断/事件线由外设触发,比如EXTI16代表低压检测LVD中断、EXTI17代表RTC闹钟中断、EXTI18代表USB唤醒中断、EXTI19代表以太网唤醒中断。

EXTI 中断线

输入图片说明

EXTI0至 EXTI15用于 GPIO,通过编程控制可以实现任意一个 GPIO作为 EXTI的输入源。由表可知,EXTI0 可以通过 EXTI源选择寄存器0寄存器(AFIO_EXTISS0)的EXTI0_SS[3:0]位选择配置为 PA0、PB0、PC0、PD0、PE0、PF0、PG0,其他 EXTI线(EXTI中断/事件线)使用配置都是类似的。

注意:多组中同一标号PIN仅可配置一个IO口为外部中断,例: PA0、 PB0、 PC0仅支持三个中的其中一个IO口产生外部中断,不支持三个同为外部中断模式。

各系列 EXTI 功能差异

GD32系列MCU有关SPI外设各系列功能差异如 GD32 MCU 各系列 EXTI 功能差异表所示。

输入图片说明

4.2.硬件连接说明

外部中断输入检测可以通过配置上升沿、下降沿或者任意沿触发,读者可根据输入信号的初始状态进行配置。如按键设计原理图所示,该图为GD32 开发板按键设计原理图,在按键未按下时KEY引脚状态为高电平,按下后,引脚电平状态为低电平,因而可以配置为下降沿(按键按下时)触发EXTI、上升沿(按键松开后)触发EXTI或任意沿(按键按下和松开后)触发EXTI。

输入图片说明

4.3.软件配置说明

本小节讲解EXTI_Example历程中EXTI模块的配置说明,主要包括外设时钟配置、GPIO引脚配置、EXTI外设配置、主函数介绍以及运行结果。本例程主要介绍GD32 MCU各系列EXTI外部中断的使用。

外设时钟配置

外设时钟配置如代码清单EXTI例程时钟配置代码所示,在该历程中使用PA0作为EXTI输入检测引脚,因而,在GD32全系列MCU中均需打开GPIOA的时钟,另外,在GD32F1X0、GD32F3X0和GD32E23X中需要打开CFGCMP时钟,以及在GD32F4XX中需要打开SYSCFG时钟,主要由于 EXTI源选择控制位在系统配置寄存器中。

void rcu_config(void) { #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X rcu_periph_clock_enable(RCU_GPIOA); #elif defined GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E23X rcu_periph_clock_enable(RCU_GPIOA); #if defined GD32F1X0 || GD32F3X0 || GD32E23X rcu_periph_clock_enable(RCU_CFGCMP); #elif defined GD32F4XX rcu_periph_clock_enable(RCU_SYSCFG); #endif #endif }

GPIO 引脚配置

GPIO引脚配置如代码清单EXTI例程GPIO引脚配置代码所示,PA0引脚需要配置为浮空输入状态。

void gpio_config(void) { #if defined GD32F10X_HD || GD32F30X_HD || GD32F20X_CL || GD32E10X gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0); #elif defined GD32F1X0 || GD32F4XX || GD32F3X0 || GD32E23X gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0); #endif }

EXTI 外设配置

EXTI外设配置代码如代码清单EXTI例程EXTI外设配置代码所示,在该代码中,首先使能EXTI中断,之后配置EXTI源以及所需要的边沿,最后清除EXTI中断标志。

void exti_config(void) { #if defined GD32F10X_HD|| GD32F30X_HD || GD32F1X0 || GD32F20X_CL || GD32F4XX || GD32F3X0 || GD32E10X || GD32E23X #if defined GD32F1X0 || GD32F3X0 || GD32E23X || GD32F4XX #if defined GD32E23X /* enable and set key EXTI interrupt to the lowest priority */ nvic_irq_enable(EXTI0_1_IRQn, 2U); #elif defined GD32F4XX nvic_irq_enable(EXTI0_IRQn, 2U,0U); #elif defined GD32F1X0 || GD32F3X0 nvic_irq_enable(EXTI0_1_IRQn, 2U,0U); #endif /* connect key EXTI line to key GPIO pin */ syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0); /* configure key EXTI line */ exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING); exti_interrupt_flag_clear(EXTI_0); #else nvic_irq_enable(EXTI0_IRQn, 2U,0U); gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_0); /* configure key EXTI line */ exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING); exti_interrupt_flag_clear(EXTI_0); #endif #endif }

主函数说明及中断处理函数说明

主函数配置十分简单,如代码清单EXTI例程主函数所示,主要包括外设时钟初始化调用、GPIO初始化调用以及EXTI配置函数。

int main(void) { /* peripheral clock enable */ rcu_config(); /* GPIO config */ gpio_config(); /* SPI config */ exti_config(); while(1) { } }

中断处理函数如代码清单EXTI中断处理函数所示。在中断处理函数中,首先判断产生EXTI的中断是否为EXTI_0的中断标志,如果是,则进入EXTI_0的中断处理,处理完成后,清除EXTI_0的中断标志。

void EXTI0_IRQHandler(void) { if(exti_interrupt_flag_get(EXTI_0) == SET) { exti_interrupt_flag_clear(EXTI_0); } }

运行结果

将EXTI_Example例程按照对应的芯片工程编译完成后,下载到对应芯片中,在中断处理函数中加断点,可以发现,当PA0有下降沿发生时,会产生EXTI中断,进入EXTI中断处理函数。


关键字:GD32  MCU  EXTI  中断 引用地址:【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(4)EXTI 中断介绍

上一篇:【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(3)NVIC 介绍
下一篇:【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(9)FWDG 模块介绍

推荐阅读最新更新时间:2024-11-16 22:43

89C51单片机内部结构深度解析一
9C51单片机内部结构深度解析一:单片机内部资源ROM/RAM/CLOCK/RST 8位CPU:和32位处理器的意思一样,计算机中的位数指的是CPU一次能处理的最大位数。32位计算机的CPU一次最多能处理32位数据,同理,8位的CPU意味着89C51单片机只能够处理8位的数据。 4K ROM:4K字节闪烁可编程可擦除只读存储器(FPEROM Flash Programmable and Erasable Read Only Memory),主要用来存放程序和表格常数,地址是0000H~0FFFH,总线地址的宽度为16位,因此片内ROM最大为2^16次方=64K,片外的ROM最大也是64K,片内片外的ROM采用统一编址的方
[单片机]
单片机从串口获取一个16位的数据函
描述:首先获取高字节,然后保存在一个16位的 变量中,然后左移8位,然后再获取低字节数据加到16位变量中,就获得了一个16位的数据 //串口获取16位数据 u16 get_uart_data16(u16 *rece) { u8 temp; while(!get_uart_data(&temp)); *rece = (u16)temp; *rece = 8; while(!get_uart_data(&temp)); *rece += temp; return *rece; }
[单片机]
一种基于单片机和PSD的数制化电源
    摘 要 根据单片机80C196KC和现场可编程系统器件PSD302的特性,设计了一种数制化电源装置,提供了程序框图,并对其进行了谐波分析。它是一种高性能的通用装置,可替代传统的PWM逆变电源。     关键词 电力电子器件 电源 单片机 现场可编程系统器件         随着现代工业的发展和社会进步,人类对电能种类的需求不断增加,如要求电能有多种制式:直流稳压电源、交流工频电源、中高频感应加热电源、高压电解电源等,而且需求的数量也在不断增加。要提供这些制式的电能,就要有许多不同的电源变换装置。此外,为满足各种电气设备对电源的特殊要求,也需要一些装置对电源进行变换和控制。这些装置品种繁多,其原理
[应用]
51单片机程序——让蜂鸣器响起来吧
#include reg52.h #define uint unsigned int //宏定义 sbit SPK=P3^5; //定义喇叭端口 void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } void main() { while(1) { delay(100); SPK=0; delay(100); SPK=1; } }
[单片机]
51单片机控制sg90舵机扇形摇摆程序
这是控制两个sg90的扇形摇摆程序! #include reg52.h sbit a=P1^0; sbit b=P1^1; #define uchar unsigned char #define uint unsigned int void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } void delayus2x(unsigned char t) { while(--t); } void delay750us() { delayus2x(245); delayus2x(122); } void main()
[单片机]
找到地址去送信——单片机寻址方式学习心得
刚开始学单片机时,由于没有数字电路和微机原理的基础,很多概念都不是很清楚,特别是在学习单片机原理的时候,那些概念弄得烦不胜烦。尤其是什么寄存器、寻址、地址、指针 都快把我折磨得疯掉了。想放弃又觉得不甘心,于是就硬着头皮狂啃了几天,才有点了解。现将心得记录如下,能力有限,如果有错误或不足请指正。 CPU执行指令过程:由程序存储器(ROM)中读取指令代码,送入指令寄存器中,经过译码器译后由定时于控制电路发出相应的控制信号,完成控制功能。 程序计数器(PC):存放即将要执行的指令地址的地方。 寄存器:寄存器是CPU在运算过程中用于存放操作数的地方。相当与一个加工厂的货物暂时存放点。在这货物暂时存放点里存放有一些货物即操作数。CPU没执行一
[单片机]
基于单片机控制的数显质量测量仪设计
在现代商业贸易和日常生活中,数显质量测量仪即智能电子称是常用的电子衡器,但目前市场上使用的称量工具结构复杂、运行不可靠成本高、精度稳定性不好、易损件多、维修困难等。本文基于STC89C52单片机,研发了一种使用键盘输入数据,操作简单方便;液晶显示所称量的物品质量、单价和物品总价;具有去皮功能;当物品重量超过电子秤量程,即过载情况下具有超重报警的功能,是一款小型化、重量轻、携带方便、计量准确、工作可靠、读数直观的智能电子称。 1 系统总体方案设计 本设计基于52系列单片机STC89C52,利用了模块化设计的思想,将系统的硬件分成质量数据采集模块、单片机控制数据处理模块和人机交互界面模块等三大部分。 质量数据采集模块主要由压
[单片机]
基于<font color='red'>单片机</font>控制的数显质量测量仪设计
一种基于单片机的实用车载空调控制器的设计
随着社会经济的发展和人们生活水平的提高,外出旅行正逐渐成为一种时尚。汽车作为一种便捷的交通工具已是人们的首选,舒适的乘车环境,如适宜的车内温度、清新的空气应是长途汽车的必备条件。所以,开发一款经济实用的车载空调控制器就成为一种需求。本文采用DC/DC转换芯片MC34063AP1为系统供电,以微控制器Atmega8为系统核心,辅以简单模糊控制技术以及按键选择、LED数码管显示,并使整个控制系统具有电源欠压、过压,温度传感器短路、断路等保护功能。 主要功能指标 汽车空调控制系统的主要功能如下。 ● 多种工作模式:自动、制冷、化霜、通风。 ● 多档风速设定:自动风、低速风、中速风、高速风。 ● 具有故障运行处理功能。 ● 面板按键操
[单片机]
一种基于<font color='red'>单片机</font>的实用车载空调控制器的设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved