首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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,三灯亮/灭。

2.9K30

11_GPIO中断

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

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

    【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、

    16510

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

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

    8010

    Linux中断处理

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

    6.6K20

    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

    6.6K10

    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 检测不到中断 排查中断信号是否正常,

    8.3K60

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

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

    22.2K21

    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里面是可以响应中断

    5.4K31

    Linux系统中断硬件框架

    资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 第三章 中断硬件框架 资料下载 视频观看 3.1 中断路径上3个部件 3.2 STM32F103GPIO中断 3.2.1 GPIO控制器 3.2.2 EXTI 3.2.3...查看中断状态、清中断 3.3.3 GIC 3.3.4 CPU 3.4 IMX6ULLGPIO中断 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控制器里没有中断相关寄存器。

    4.5K40

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

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

    95830

    Linux 中断处理浅析

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

    7.4K80

    Redis高负载中断优化

    提到中断,就涉及到硬中断和软中断,首先需要简单了解一它们区别: 硬中断: 由硬件自己生成,具有随机性,硬中断被CPU接收后,触发执行中断处理程序。...在默认情况,所有队列中断都由CPU 0处理,因此对应中断逻辑也会在CPU 0上处理,在服务器 TOP 输出中,也可以观察到 %si 软中断部分,CPU 0占比比其他core高出一截。...即:每个HT有一个独立L1 cache,同一个CoreHT共享L2 cache,同一个物理CPU多个core共享L3 cache。...NUMA 架构中断优化 这时我们再回归到中断问题上,当两个NUMA节点处理中断时,CPU实例化softnet_data以及驱动分配sk_buffer都可能是跨node,数据接收后对上层应用...综合上述,将中断都分配在同一NUMA Node中,中断处理函数和应用程序充分利用同NUMAL2、L3缓存、以及同node内存,结合调度系统wake affinity特性,能够更进一步降低延迟。

    3K110

    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 结束语 本篇为大家介绍了LinuxGPIO使用,同时也穿插着介绍shell脚本些许知识。

    3.2K20

    扒开 Linux 中断底裤之 workqueue

    workqueue 是除了 softirq 和 tasklet 以外最常用下半部机制之一。workqueue 本质是把 work 交给一个内核线程,在进程上下文调度时候执行。...workqueue 和 work 是一对多关系。内核中工作队列分为两种: bound:绑定处理器工作队列,每个 worker 创建内核线程绑定到特定 CPU 上运行。...pool_workqueue ... }; pwqs:所有的 pool_workqueue 都添加到本链表中 list:用于将工作队列添加到全局链表 workqueues 中 maydays:rescue状态...数量 idle_list:处于 IDLE 状态 worker 添加到本链表 busy_hash:工作状态 worker 添加到本哈希表中 workers:worker_pool 管理 worker...经过上面两个阶段初始化,workqueue 子系统基本就已经将数据结构关联建立好了,当有 work 来进行调度时候,就可以进行处理了。

    2.1K51
    领券