首页
学习
活动
专区
工具
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引脚众多,将引脚数字相同的作为一组,共享一个中断线。...灯亮灭; 主函数调用LED和按键初始化后,无需任何操作; 本实验配套代码位于“5_程序源码\6_GPIO—按键中断\”。...13.4实验效果 本实验对应配套资料的“5_程序源码\6_GPIO—按键中断\”。打开工程后,编译,下载。

2.9K30

11_GPIO中断

程序发生GPIO中断后会根据异常向量表强制跳转到0x18(IRQ中断地址)。...1.4 按键中断程序编程示例一 1.4.1 管脚设置和查询中断号 ​ 从上面的电路图可见KEY1接在GPIO5_1(SNVS_TAMPER1 pad,ALT5)上,KEY4接在GPIO4_14(NAND_CE1...中断初始化和安装中断处理程序 ​ 对于KEY1,将GPIO5_01通过EDGE_SEL设置成双边沿触发,通过IMR对应位设置为1打开中断,为了防止误触发将ISR对应位写1清除掉中断。...串口打印如下所示: 1.5 按键中断编程示例二 1.5.1 按键中断程序编程 ​ 此节代码在**裸机Git仓库 NoosProgramProject/(11_GPIO中断/011_gpio_eint)...》编译程序 ​ 进入裸机Git仓库 NoosProgramProject/(11_GPIO中断/011_gpio_eint) 源码目录进行编译。

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

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

    GPIO口以及EXTI外部中断 GPIO 一、简介 可配置为4种输入模式、4种输出模式 引脚电平0~3.3V,部分可以容忍5V 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等...一、中断系统 在主程序运行过程中,出现了特定的中断触发条件,也叫中断源,使得CPU暂停当前正在运行的程序,去处理中断程序,处理完成后再返回原来的位置继续执行主程序 当有多个中断源同时申请中断时,CPU...会先相应优先级更高的中断源,优先级是可以自己设置的 当一个中断程序正在运行时,又有新的优先级更高的中断源申请中断,CPU暂停当前中断程序,去处理该优先级更高的中断程序,处理完后返回该中断程序 二、STM32...上升沿和下降沿都可以触发中断 软件触发:程序代码执行触发中断 任意GPIO口都可以当做外部中断的引脚,但GPIO后边跟的数字相同不能触发中断,这个数字叫做pin,也就是说PA0和PB0不能同时做中断引脚...,如果该寄存器置1,就继续往左走,与中断屏蔽寄存器连接到一个与门上,最后连接到中断控制器NVIC执行中断程序

    22110

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

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

    10110

    Linux中断 - IDT

    中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...传统系统调用相关 IDT 的设置 Linux系统启动过程中内核压解后最终都调用到start_kernel, 在这里会调用trap_init, 然后又会调用idt_setup_traps: void...SYSCALL_VECTOR, entry_INT80_32), #endif }; ​ 上面的SYSG(IA32_SYSCALL_VECTOR, entry_INT80_32)就是设置系统调用的异常中断处理程序...entry_INT80_32系统调用对应的中断处理程序 ENTRY(entry_INT80_32) ASM_CLAC pushl %eax /* pt_regs->orig_ax...硬件中断相关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...linux-5.4 上面 board.dts 的配置如下: &pio{ input-debounce = ; //配置中断采样频率,每个对应一个支持中断的bank...sunxi linux-4.9 平台,中断采样频率最大是 24M, 最小 32k,debounce 的属性值只能为 0 或 1。...6.1.4 GPIO 中断问题排查步骤 6.1.4.1 GPIO 中断一直响应 排查中断信号是否一直触发中断 利用 sunxi_dump 节点,确认中断 pending 位是否没有清 (参考 6.1.1...小节) 是否在 gpio 中断服务程序里对中断检测的 gpio 进行 pin mux 的切换,不允许这样切换,否则会导致中断异常 6.1.4.2 GPIO 检测不到中断 排查中断信号是否正常,

    8.3K60

    Linux驱动实践:如何编写【 GPIO 】设备的驱动程序

    目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这两方面触发。...编写驱动程序 以下所有操作的工作目录,都是与上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。...创建驱动目录和驱动程序 $ cd linux-4.15/drivers/ $ mkdir mygpio_driver $ cd mygpio_driver $ touch mygpio.c mygpio.c...> #include #include // GPIO 硬件相关宏定义 #define MYGPIO_HW_ENABLE // 设备名称...从代码中可以看出:驱动程序使用 alloc_chrdev_region 函数,来动态注册设备号,并且利用了 Linux 应用层中的 udev 服务,自动在 /dev 目录下创建了设备节点。

    5.1K30

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

    按键如何触发中断 我们从一个例程看一下,如何用一个GPIO引脚来触发中断,来控制另一个引脚的翻转去控制LED指示灯。...那我们回到程序,看一下应用程序(Application),驱动(Driver)和回调函数(Callback Function)是什么关系。...如果应用程序调用一个驱动,这个驱动在执行前先调用一个函数来获取一些参数,而这些参数需要由应用程序提供,所以此函数位于应用层,它就是一个回调函数。...HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) <-main.c 那么如何才能让PC13触发这个中断呢?...GPIO中断引脚配置 MCU是如何把一个引脚电平的变化和一个中断联系起来的呢?我们马上想到给每个GPIO引脚分配一个中断向量就好了。当一个引脚电平变化,马上就可以跳转到自己对应的中断服务程序

    97130

    Linux 中断处理浅析

    最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着”重要的事马上做, 不重要的事推后做”的异步处理思想....在进入中断服务程序时, CPU已经自动禁止了本CPU上的中断响应, 因为CPU不能假定中断服务程序是可重入的. 中断处理程序的第一步要做两件事情: 1....中断处理的这几个阶段中不能调用可能导致睡眠的函数(包括分配内存); 对于第一个问题, 较新的linux内核增加了ksoftirqd内核线程, 如果持续处理的softirq超过一定数量, 则结束中断处理过程...据说在montavista(一种嵌入式实时linux)中, 将内核的中断机制做了修改. (某些中断的)中断处理过程被赋予了task结构, 能够被内核调度. 解决了上述两个问题....工作队列 linux基线版本的内核在解决上述问题上, 提供了workqueue机制.

    7.4K80

    7.4.2 程序中断方式

    1.中断的基本概念 程序中断是指在计算机执行现行程序的过场中,出现某些急需处理的异常情况或特殊请求,CPU暂停中断现行程序,而专区对这些异常情况或特殊情况进行处理,在处理完毕后CPU又自动返回到现行程序的断点处...在可以相应中断的条件下,CPU暂停终止正在执行的程序,转去执行中断服务程序为外设服务,在中断服务程序中完成一次主机与外设之间的数据传送,传送完成后,CPU返回原来的程序。...在中断服务程序中,为了保护中断现场(即CPU主要寄存器的内容)期间不被新的中断所打断,必须关中断,从而保证被中断程序中断程序服务程序完毕之后能接着正确地执行下去。 ②保存断点。...为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来。 ③引出中断服务程序。...中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到源程序的断点处,以便继续执行远程序。 其中,①~③在CPU进入中断周期后,由中断隐指令(硬件自动)完成;④~⑨由中断服务程序完成。

    1.2K10

    Linux学习系列六:操作GPIO

    1 引言 学习单片机的第一个例子通常都是点亮LED灯,对于Linux应用,我们也从LED入手,我就记得自己刚开始学的时候查了好多资料才勉强能控制一个灯亮,当时就感受到了Linux和单片机裸机有很大的差异...2.2.软件 1)需要在上一篇《Linux学习系列五:Nand Flash根文件系统制作》的基础上改动下Linux内核配置,生成新的970uimage并烧写到板子里。...4 GPIO操作 4.1.使用命令行操作GPIO GPIO驱动程序将NUC970芯片的IO口,从GPIOA~GPIOJ每组IO都保留32个号码,所以GPIOA编号0x000~0x01F,GPIOB编号0x020...当执行这个函数后,程序就不往下走了,当指定时间结束后,继续执行下面的语句。...3)使用和板子里自带文件系统匹配的交叉工具链来重新编译 arm-linux-gcc gpio_demo.c -o gpio_demo 这时它会报一个错误: ?

    3.3K20

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

    这篇文章以按键为例子讲解linux中断原理,中断的架构,中断的实现。 在我们的开发中,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...中断服务程序:相应特定中断时,内核会执行的函数。其中:1、中断处理程序是被内核调用来响应中断的。2、而它们运行于我们称之为中断上下文的特殊上下文中。...中断上下部:为了是程序运行得快和完成的工作量多,将中断处理分为两部分,上半部和下半部,其中,上半部(中断处理程序):接收到中断,立马要执行的程序,只做有严格时限的工作。下半部:允许稍后完成的工作。...* dev ); 其中:irq:处理程序要相应的中断处理程序。...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。

    4.8K10

    linux内核缺页中断处理

    MMU可以做虚拟地址到物理地址的转换,使用MMU我们就可以使用更多的内存空间,因为程序具有局部性原理,我们可以将暂时用不到的数据存放到磁盘,当访问到时会发生缺页中断,从磁盘中将所需要的数据加载到内存。...缺页中断处理一般流程: 1.硬件陷入内核,在堆栈中保存程序计数器,大多数当前指令的各种状态信息保存在特殊的cpu寄存器中。 2.启动一个汇编例程保存通用寄存器和其他易丢失信息,以免被操作系统破坏。...3.当操作系统发现缺页中断时,尝试发现需要哪个虚拟页面。通常一个硬件寄存器包含了这些信息,如果没有的话操作系统必须检索程序计数器,取出当前指令,分析当前指令正在做什么。...7.当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映他的位置,页框也标记位正常状态。 8.恢复发生缺页中断指令以前的状态,程序计数器重新指向这条指令。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。

    10.8K22

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

    linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...硬中断是可屏蔽的,软中断不可屏蔽。 硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部。 软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部。...如果有待处理的软中断,do_softirq()会循环遍历每一个,调用它们的相应的处理程序。 在中断处理程序中触发软中断是最常见的形式。...中断处理程序执行硬件设备的相关操作,然后触发相应的软中断,最后退出。内核在执行完中断处理程序以后,马上就会调用do_softirq(),于是软中断开始执行中断处理程序完成剩余的任务。

    22.4K21
    领券