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

GPIO—按键中断

STM32F103ZET6有7组GPIO,每组16个引脚,即112个GPIO引脚,但EXTI只支持19个外部中断/事件请求,因此需要将多个GPIO合成一组,共用一个中断线,STM32F103系列中断线分组如表...结合图 13.1.1 所示,EXTI0-EXTI15作为GPIO中断线使用,同组的GPIO共享一条中断线,比如EXTI0组,PA0作为了中断源,则此时PB0~PG0不能作为中断源。...无论是内部中断源,还是GPIO产生的中断,都由NVIC管理分组,然后根据中断优先级分组确定抢占优先级级数和子优先级级数。 GPIO引脚众多,将引脚数字相同的作为一组,共享一个中断线。...每个中断处理函数里,都调用的“HAL_GPIO_EXTI_IRQHandler()”准备后续处理,传入参数为外部中断的引脚,该函数原型如代码段 13.3.4 所示。...OFF:ON); break; } default:break; } } 9~11行:定义了全局变量标志位,用于记录按键按下状态; 14~49行:根据传入的引脚,得知是哪一个按键按下,从而控制对应LED

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

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

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

    15010

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

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

    8010

    Linux中断处理

    中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux中断的处理过程。...,handler 的第一个参数是中断,第二个参数是设备对应的ID,第三个参数是中断发生时由内核保存的各个寄存器的值。...return 1; } do_IRQ() 函数首先通过IRQ获取到其对应的 irq_desc_t 结构,注意的是同一个中断有可能发生多次,所以要判断当前IRQ是否正在被处理当中(判断 irq_desc_t...鉴于这个原因,Linux中断处理分为两个部分,上半部 和 下半部,上半部 在前面已经介绍过,接下来就介绍一下 下半部 的执行。...softirq机制 中断下半部 由 softirq(软中断) 机制来实现的,在Linux内核中,有一个名为 softirq_vec 的数组,如下: static struct softirq_action

    6.6K20

    Linux中断 - IDT

    中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...int)regs->bp); #endif /* CONFIG_IA32_EMULATION */ } syscall_return_slowpath(regs); } 通过中断向量...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int...pushq $(~vector+0x80) /* Note: always in signed byte range */ jmp common_interrupt 即先将中断压栈...VECTOR_UNUSED); } } exiting_irq(); set_irq_regs(old_regs); return 1; } 首先根据中断向量获取到对应的中断描述符

    6.6K10

    Linux GPIO 开发指南

    功能/中断功能 5.1.2 用法二 5.2 接口使用示例 5.2.1 配置设备引脚 5.2.2 获取 GPIO 5.2.3 GPIO 属性配置 5.3 设备驱动使用 GPIO 中断功能 5.4...gic中断,每个中断对应一个支持中断的bank device_type = "pio"; //设备类型属性 clocks = , , <&clk_hosc...或者 __gpio_set_value 设置电平值) 5.3 设备驱动使用 GPIO 中断功能 方式一:通过 gpio_to_irq 获取虚拟中断,然后调用申请中断函数即可目前 sunxi-pinctrl...使用 irq-domain 为 gpio 中断实现虚拟 irq 的功能,使用 gpio 中断功能时,设备驱动只需要通过 gpio_to_irq 获取虚拟中断后,其他均可以按标准 irq 接口操作。...中断,通过 dts 解析函数获取虚拟中断,最后调用申请中断函数即可,demo 如下所示: dts配置如下: soc{ ...

    8.3K60

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

    按键如何触发中断 我们从一个例程看一下,如何用一个GPIO引脚来触发中断,来控制另一个引脚的翻转去控制LED指示灯。...上一篇文章讲了如何翻转GPIO引脚,所以现在我们只关注一下如何用一个引脚触发中断吧。main()函数里调用了一个外部中断模块(EXTI)初始化后就进入while循环了。...HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) <-main.c 那么如何才能让PC13触发这个中断呢?...GPIO中断引脚配置 MCU是如何把一个引脚电平的变化和一个中断联系起来的呢?我们马上想到给每个GPIO引脚分配一个中断向量就好了。当一个引脚电平变化,马上就可以跳转到自己对应的中断服务程序。...RM0360 STM32F030 Reference manual 外部中断0至15 0,1对应一个中断向量(5中断); 2,3对应一个(6中断); 4至15对应一个(7中断)。

    95530

    Linux学习系列六:操作GPIO

    1 引言 学习单片机的第一个例子通常都是点亮LED灯,对于Linux应用,我们也从LED入手,我就记得自己刚开始学的时候查了好多资料才勉强能控制一个灯亮,当时就感受到了Linux和单片机裸机有很大的差异...2.2.软件 1)需要在上一篇《Linux学习系列五:Nand Flash根文件系统制作》的基础上改动下Linux内核配置,生成新的970uimage并烧写到板子里。...2)先使用我们之前的交叉工具链去编译上述代码 arm-none-linux-gnueabi-gcc gpio_demo.c -o gpio_demo 将生成的gpio_demo放到板子里去运行,提示如下错误...3)使用和板子里自带文件系统匹配的交叉工具链来重新编译 arm-linux-gcc gpio_demo.c -o gpio_demo 这时它会报一个错误: ?...再次将gpio_demo放到板子上,运行,就不再报错了,可以看到LED D3灯在不断的闪烁。 5 结束语 本篇为大家介绍了LinuxGPIO的使用,同时也穿插着介绍shell脚本的些许知识。

    3.2K20

    Linux系统驱动之两类中断控制器处理流程_链式和层级

    \gpio\gpio-mxc.c Linux-4.9.88\arch\arm\boot\dts\imx6ull.dtsi Linux 5.4内核源码 Linux-5.4\drivers\pinctrl...它底下的4个中断触发时,都会导致GIC的33中断被触发。 处理中断时,需要分辨:是谁触发了GIC 33中断?这需要读取"chained intc"中的寄存器。...个引脚,都可以产生中断,都连接到GIC的33中断 GPIO就是一个链式中断控制器,它底下有4个中断 对于GPIO模块中0~3这四个hwirq,分配四个irq_desc 可以一下子分配4个:legacy...,确定是GPIO里2引脚发生中断 通过GPIO irq_domain可以知道virq为102 处理virq 102中断:调用irq_desc[102].handle_irq,即handleC...GIC的100~103中断 GPIO就是一个层级中断控制器 对于GPIO模块中0~3这四个hwirq,分配四个irq_desc,用到时再分配 假设这4个irq_desc的序号为234~237

    1.1K41

    linux 中断机制《Rice linux 学习笔记》

    这篇文章以按键为例子讲解linux中断原理,中断的架构,中断的实现。 在我们的开发中,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...Linux中断原理: 中断:处理器异常的一种,它是一种特殊的电信号,用硬件发给处理器,处理器接收到中断后,会马上向操作系统反映此信号的到来,然后就由操作系统负责处理这些新到来的数据。...Linux中断的相关函数: 1、注册中断函数: 中断处理函数结构: typedef irqreturn_t (*irq_handler_t)(int, void*); 注册中断函数:int request_irq...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。...其中:IRQ_EINT0:按键对应引脚的中断。与加载的中断一致。

    4.7K10

    linux内核缺页中断处理

    7.当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映他的位置,页框也标记位正常状态。 8.恢复发生缺页中断指令以前的状态,程序计数器重新指向这条指令。...9.调度引发缺页中断的进程,操作系统返回调用他的汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:...), "=r" (x) : "m"(__m(addr)), "i"(errret), "0"(err)) //"m"(__m(addr)), "i"(4), "0"(4)) 经过以上分析,对linux

    10.7K22

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

    linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...(4)软中断指令 int是软中断指令。 中断向量表是中断中断处理函数地址的对应表。 int n -- 触发软中断n。相应的中断处理函数的地址为:中断向量表地址 + 4 * n。...(5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断是由中断控制器提供的,软中断中断由指令直接指出,无需使用中断控制器。...: 要分配的中断 * handler: 要注册的中断处理函数 * flags: 标志(一般为0) * name: 设备名(dev->name) * dev: 设备(struct net_device

    22.2K21
    领券