首页
学习
活动
专区
圈层
工具
发布

GPIO—按键中断

GPIO产生的中断也不例外,但在给NVIC管理之前,还有一个EXTI(External interrupt/event controller,外部中断/事件控制器)先处理一下,如图 13.1.1 所示...端口时钟; 18行:设置为下降沿触发外部中断,即按键按下瞬间触发中断。...可根据需求设置为上升沿触发,即松开按键触发中断,双边缘触发,即按下松开都触发中断; 22~33行:初始化每个按键对应的GPIO,“HAL_GPIO_Init()”里会判断该引脚是否为EXTI模式,如果是则调用...一旦按键按下产生中断,将自动跳转到对应中断向量位置,调用该位置的中断处理函数。...按下KKEY3_L, 红色亮/灭;按下KEY3_U,绿色亮/灭;按下KEY3_R,蓝色亮/灭;按下KEY3_D,三灯亮/灭。

3.8K30

11_GPIO中断

如果你正在接一个很重要的电话,突然门铃响了,这是会优先处理其中一件事,比如先让按门铃的人等一下,挂电话后再去开门,或者先挂电话,等开门后再打电话过去。这就存在一个中断优先级的问题。 ​...在这里只简单的介绍一下GIC,具体可以参考arm文档。 ​ GIC的主要作用可以归结为接受硬件中断信号,并进行简单的处理,按照一定的设置策略,分给对应的CPU处理。...然后调用request_irq注册对应中断的中断处理函数,对于GPIO5_01是key_gpio5_handle_irq,中断处理函数里根据按键按下和松开分别在串口打印,并且按下时绿灯点亮,松开时绿灯熄灭...​ 按下KEY1,绿灯点亮,松开,绿灯熄灭,同时串口会打印按下松开的信息。...按下或者松开KEY2,串口会打印出KEY2按下松开的信息。

1.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【STM32】GPIO口以及EXTI外部中断

    GPIO口以及EXTI外部中断 GPIO 一、简介 可配置为4种输入模式、4种输出模式 引脚电平0~3.3V,部分可以容忍5V 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等...输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等 二、基本结构 每一个GPIO口都由寄存器和驱动器组成,寄存器的每一位对应一个引脚...数据寄存器为0时,上管断开,下管导通,引脚直接接VSS,输出低电平 在推挽输出模式下STM32对I/O口有绝对的控制权,高低电平的输出都是由STM32决定的 (2)开漏输出 在开漏输出模式下,P-MOS...上升沿和下降沿都可以触发中断 软件触发:程序代码执行触发中断 任意GPIO口都可以当做外部中断的引脚,但GPIO后边跟的数字相同不能触发中断,这个数字叫做pin,也就是说PA0和PB0不能同时做中断引脚...,如果需要多个中断引脚的话pin值不能相同,原因是GPIO连接到AFIO上,起到中断引脚选择的作用,AFIO从pin值相同的通道里选择一个接到EXTI边沿检测及控制电路上,一共选择16个,也就是PA0、

    1.9K10

    OpenHarmony驱动子系统开发—GPIO按键事件中断

    本案例程序是演示GPIO中断接口的基本使用,案例操作结果是通过按键切换开发板上的LED的点亮和熄灭效果。本案例使用的按键根据开发板原理图可以得到,接入的是GPIO5号引脚。...引脚中断的函数,函数返回初始化结果。...此函数在管脚使用之前调用,避免重复调用,避在再中断中使用。描述:启用GPIO引脚的中断功能。这个函数可以用来为GPIO pin设置中断类型、中断极性和中断回调。...arg 表示中断回调函数中使用的参数的指针案例程序解析本案例通过按键按压时触发的边沿中断,在中断回调函数中更改LED灯的输出电平,来达到按压一次按键,实现点灯和熄灯的效果。...RESET按键,开发板开始正常工作,此时LED会正常点亮,再按下按键LED会熄灭,再按下按键LED会重新点亮。

    80010

    Linux中断 - IDT

    中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...,有门禁权限才可以通过,因此 dpl就是这个权限,实际中我们一般称为RPL; 我们后面会通过一个例子来讲一下CPL,RPL和DPL三者之间的关系。...看,就是这么简单~~~ gate_desc的多种初始化方法 因为gate_desc是通过ida_dat填充的,所以这里关键是idt_data的初始化,我们详细看一下: /* Interrupt...传统系统调用相关 IDT 的设置 Linux系统启动过程中内核压解后最终都调用到start_kernel, 在这里会调用trap_init, 然后又会调用idt_setup_traps: void...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int

    8.3K10

    Linux中断处理

    中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux对中断的处理过程。...(action->flags & SA_INTERRUPT)) // 如果中断处理能够在打开中断的情况下执行, 那么就打开中断 __sti(); do { status...中断处理 - 下半部(软中断) 由于中断处理一般在关闭中断的情况下执行,所以中断处理不能太耗时,否则后续发生的中断就不能实时地被处理。...鉴于这个原因,Linux把中断处理分为两个部分,上半部 和 下半部,上半部 在前面已经介绍过,接下来就介绍一下 下半部 的执行。...softirq机制 中断下半部 由 softirq(软中断) 机制来实现的,在Linux内核中,有一个名为 softirq_vec 的数组,如下: static struct softirq_action

    8.5K20

    Linux GPIO 开发指南

    节点 6.1.3 利用 pinctrl core 的 debug 节点 6.1.4 GPIO 中断问题排查步骤 6.1.4.1 GPIO 中断一直响应 6.1.4.2 GPIO 检测不到中断 Linux...Pinctrl framwork 能够有效管理设备在不同状态下的引脚配置。...linux-5.4 上面 board.dts 的配置如下: &pio{ input-debounce = ; //配置中断采样频率,每个对应一个支持中断的bank...default,即模块正常工作模式下对应的 pin 配置 • pinctrl-1 对应 pinctrl-names 中的 sleep,即模块休眠模式下对应的 pin 配置 5.2 接口使用示例 5.2.1...小节) 是否在 gpio 中断服务程序里对中断检测的 gpio 进行 pin mux 的切换,不允许这样切换,否则会导致中断异常 6.1.4.2 GPIO 检测不到中断 排查中断信号是否正常,

    9.6K60

    Linux内核硬中断 软中断的原理和实现

    如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事,跳到中断处理程序的入口点,进行中断处理。...linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...(5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。...二、开关 (1)硬中断的开关 简单禁止和激活当前处理器上的本地中断: local_irq_disable(); local_irq_enable(); 保存本地中断系统状态下的禁止和激活: unsigned

    25K22

    STM32F0单片机快速入门五 GPIO中断

    按键如何触发中断 我们从一个例程看一下,如何用一个GPIO引脚来触发中断,来控制另一个引脚的翻转去控制LED指示灯。...这个功能也很简单,但它牵涉到的东西却不少。看一下代码: ? 上一篇文章讲了如何翻转GPIO引脚,所以现在我们只关注一下如何用一个引脚触发中断吧。...我们接下来分别讲一下这个回调函数和如何把一个GPIO引脚初始化为中断模式。 2. 回调函数 回调函数这个概念,解释可以说五花八门,什么原因呢?因为这好像不是一句自然(人)语言(话)。...下面就是从中断发生,一直到应用层的回调路径: B1 USER 按键(连接至PC13引脚)按下,中断发生 EXTI4_15_IRQHandler <-startup_stm32f030x8.s EXTI4...GPIO中断引脚配置 MCU是如何把一个引脚电平的变化和一个中断联系起来的呢?我们马上想到给每个GPIO引脚分配一个中断向量就好了。当一个引脚电平变化,马上就可以跳转到自己对应的中断服务程序。

    1.3K30

    Linux的中断可以嵌套吗?

    问答 问:Linux的中断可以嵌套吗? 答:以前是可以嵌套的,现在不可以!...历史 早前的Linux内核版本,中断分为两种: 快中断,申请的时候带IRQF_DISABLED标记,在IRQ HANDLER里面不允许新的中断进来; 慢中断,申请的时候不带IRQF_DISABLED标记...老的Linux内核中,如果一个中断服务程序不想被别的中断打断,我们能看到这样的代码: request_irq(FLOPPY_IRQ, floppy_interrupt,\ - IRQF_DISABLED...也就是说,从这个commit开始,实际Linux已经不再支持中断的嵌套, 也没有快慢中断的概念了,IRQF_DISABLED标记也作废了。...Linux内核会在如下2个时候重新开启CPSR对IRQ的响应: 从IRQ HANDLER返回中断底半部的SOFTIRQ 从IRQ HANDLER返回一个线程上下文 从1大家可以看出,SOFTIRQ里面是可以响应中断的

    7K31

    Linux系统中断的硬件框架

    资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 第三章 中断的硬件框架 资料下载 视频观看 3.1 中断路径上的3个部件 3.2 STM32F103的GPIO中断 3.2.1 GPIO控制器 3.2.2 EXTI 3.2.3...查看中断状态、清中断 3.3.3 GIC 3.3.4 CPU 3.4 IMX6ULL的GPIO中断 3.4.1 GPIO控制器 1. 配置GPIO中断 2. 使能GPIO中断 3....,没有统一标准 Cortex A7中使用GIC(Generic Interrupt Controller) CPU CPU每执行完一条指令,都会判断一下是否有中断发生了。...它们的中断控制器不一样,STM32MP157中使用的是GIC: 3.3.1 GPIO控制器 对于STM32MP157,除了把GPIO引脚配置为输入功能外,GPIO控制器里没有中断相关的寄存器。

    5.7K40

    Linux 中断处理浅析

    最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....注册的中断处理函数有个中断开关属性, 一般情况下, 中断处理函数总是在关中断的情况下进行的....中断处理的这几个阶段中不能调用可能导致睡眠的函数(包括分配内存); 对于第一个问题, 较新的linux内核增加了ksoftirqd内核线程, 如果持续处理的softirq超过一定数量, 则结束中断处理过程...据说在montavista(一种嵌入式实时linux)中, 将内核的中断机制做了修改. (某些中断的)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题....(montavista的目标是实时性, 这样的做法牺牲了一定的整体性能.) 工作队列 linux基线版本的内核在解决上述问题上, 提供了workqueue机制.

    8.8K80

    聊聊 Linux 中断机制

    我没有查到中断到底是何时引入的,但是从 Linux 问世以来就已经有了,而且 Linux 是基于 UNIX 开发的,可以认为 UNIX 就已经引入中断机制了,而且换个角度来说,UNIX 作为如此著名的操作系统...80x86 的中断系统 这部分主要介绍一下 x86 所使用的中断控制芯片相关内容,会涉及到一些嵌入式相关的知识。 80x86 组成的微机机系统中采用了 8259A 可编程中断控制芯片。...在 80x86 实模式下,每个中断向量由 4 个字节组成,这 4 个字节组成了一个中断处理程序的段值和段内偏移值,所以整个中断向量表的大小是 1024 字节。...中断向量表在 32 位保护模式下也叫做中断描述符表,也是我们常说的 IDT 表。...这里需要说一下两个指令 cli 和 sti,为了避免竞争条件对临界代码的干扰,在 Linux 0.11 内核中很多地方都使用了 cli 和 sti 指令。

    1.8K20

    Linux学习系列六:操作GPIO

    2.2.软件 1)需要在上一篇《Linux学习系列五:Nand Flash根文件系统制作》的基础上改动下Linux内核配置,生成新的970uimage并烧写到板子里。...用户可以通过文件系统/sys/class/gpio/…路径下的文件节点来操作对应的IO口 /sys/class/gpio/export :来告诉系统需要控制哪个GPIO /sys/class/gpio/...GPIO输出1 或 0,也可查看输入状态下当前GPIO的输入值。...实现方法如下: 1)在板子的/opt目录(默认没有此目录,自己新建下即可)下,新建一个gpio.sh脚本,里面内容如下: #!...再次将gpio_demo放到板子上,运行,就不再报错了,可以看到LED D3灯在不断的闪烁。 5 结束语 本篇为大家介绍了Linux下GPIO的使用,同时也穿插着介绍shell脚本的些许知识。

    4.1K20
    领券