正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.7讲 GPIO中断实验-编写按键中断驱动

news2024/9/20 12:39:01

前言:

本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。

引用:

正点原子IMX6U仓库 (GuangzhouXingyi) - Gitee.com

《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》

正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档

正文:

本文是 “正点原子[第二期]Linux之ARM(MX6U)裸机篇--第15.7 讲” 的读书笔记。第15讲主要是介绍I.MX6U处理器GPIO中断控制实验。本节将参考正点原子的视频教程第15讲和配套的正点原子开发指南文档进行学习。

在第15.7讲视频教程中,正点原子会讲解对之前的15.1,15.2,15.3,15.4,15.5,15.6 讲的一个综合,将前面介绍过的Cortex-A7中断向量表,Reset中断服务函数,IRQ中断服务函数,通用IRQ中断驱动处理,GPIO输入信号中断触发方式,GPIO输入信号中断使能,GPIO中断状态标记位清除,等所有的东西综合到一起,来完成我们最后的按键GPIO中断实验。

1. 按键GPIO中断编写

在前面几讲的基础上,已经分析了按键GPIO作为输入模式时gpio input输入信号的中断触发类型,gpio输入信号中断使能,IRQ中断服务函数,IRQ通用中断ID驱动函数,等函数的编写,本节我们只需要调用这些函数,注册 GPIO1_IO18 的中断ID处理函数,并完成按键GPIO中断实验来控制蜂鸣器和LED灯的行为就可以了。

1.1 GPIO1_IO18输入信号对应的中断ID

《I.MX6ULL参考手册》章节“3.2 Cortex A7 interrupts”中查到 GPIO1 组的引脚GPIO1_IO16 ~ GPIO1_IO31 这16个gpio引脚触发的中断ID都是 99 (99=67+32,32个的SGI,PPI中断ID号偏移)。

1.2 编写GPIO1_IO18的gpio中断ID处理函数

'bsp/bsp_exti.c'源码如下

#include "bsp_exti.h"
#include "bsp_gpio.h"
#include "bsp_int.h"
#include "bsp_beep.h"
#include "bsp_delay.h"
#include "bsp_led.h"

/* 外部设备中断源初始化 */
void exti_init(void)
{
	/* GPIO1_IO18 */
	
	gpio_pin_config_t config;

	/* 1. 初始化IO复用,复用为GPIO1_IO18 */
	IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0);

	/* 2. 设置 UART1_CTS_B IO 的电气特性 */
	IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0xf080);


	/* 3. 初始化 GPIO1_IO18 设置为输入 */
	config.directioin = kGPIO_DigitalInput;
	config.intMode = kGPIO_FalllingEdgeInt;
	gpio_init(GPIO1, 18, &config);


	/* 启用GIC IRQ */
	GIC_EnableIRQ(GPIO1_Combined_16_31_IRQn);

	/* 注册IRQ处理函数 */
	system_irqhandler_register(GPIO1_Combined_16_31_IRQn, gpio1_io18_int_handler, NULL);

	/* 启用gpio中断 */
	gpio_int_enable(GPIO1, 18);
}


void gpio1_io18_int_handler(IRQn_Type irq, void *userParam)
{
	
	static unsigned char state = OFF;
	//static unsigned char led_state = ON;
	int n = 20;
	int led_state = 0;


	/* 检查 GPIO1_IO18 的ISR */
	if(GPIO1->ISR & (1<<18))
	{
		/* 消抖,等待10ms */
		delay(10);

		/* 等待10ms再次读取gpio input电平值 */
		if(gpio_pinread(GPIO1, 18) == 0)
		{
			state = !state;
			beep_switch(state);
		}
	}

	/* 清除外设中断标志位 */
	gpio_int_cleanFlag(GPIO1, 18);
}

在 'bsp/bsp_exti.c' 中的 'exti_init()' 函数中调用注册 GPIO1_IO18 对应中断ID的中断处理函数

2. 编译烧写SD卡验证按键GPIO中断实验结果

译修改主频后源码烧录SD卡验证主频修改是否生效,预期按下按键之后触发中断在中断中打开蜂鸣器,蜂鸣器鸣叫;再次按下按键之后触发中断在中断中关闭蜂鸣器,蜂鸣器停止鸣叫。

为本地实验验证的结果是,按下按键可以成功的控制蜂鸣器开启和关闭。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1680547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

luceda ipkiss教程 66:金属线的钝角转弯

案例分享&#xff1a;金属线的135度转弯&#xff1a; 所有代码如下&#xff1a; from si_fab import all as pdk import ipkiss3.all as i3 from ipkiss.geometry.shape_modifier import __ShapeModifierAutoOpenClosed__ from numpy import sqrtclass ShapeManhattanStub(__…

使用Rufus制作Ubuntu启动盘(windows同理)

问题 想要做系统&#xff0c;首先需要做启动盘&#xff0c;使用Rufus做启动盘操作简单。 解决 1.下载Rufus 这个软件免费的一搜便是&#xff0c;这里下载&#xff1a;Rufus - 轻松创建 USB 启动盘。下载完成后即点即用1无需安装。 打开 2.下载Ubuntu镜像 下载地址&#xff…

Flowable配置多数据源以及指定schema

异常反馈 如有问题可通过微信公众号“假装正经的程序员”反馈 为什么要多源 在项目的实际开发过程中通常会有两种常见的使用Flowable的方式&#xff0c;一种是以独立的服务提供工作流的能力&#xff0c;另一种是以Jar包的形式进行内部集成。 这两种方式各有利弊&#xff0c;…

暴力数据结构之二叉树(堆的相关知识)

1. 堆的基本了解 堆&#xff08;heap&#xff09;是计算机科学中一种特殊的数据结构&#xff0c;通常被视为一个完全二叉树&#xff0c;并且可以用数组来存储。堆的主要应用是在一组变化频繁&#xff08;增删查改的频率较高&#xff09;的数据集中查找最值。堆分为大根堆和小根…

购买商用ssl证书并在windows服务器IIS上配置https域名(案例为阿里云)

阿里云、华为云等各路云都有ssl证书购买&#xff0c;价格相差不大&#xff0c;操作也都差不多&#xff0c;请自行选择。 本文以阿里云操作为案例。 购买SSL证书 点击购买 付款买入 注意&#xff0c;如果自己搞起来有问题&#xff0c;阿里购买的时候建议选择申请协助服务。购买…

抖店商品详情API接口(店铺|标题|主图|价格|SKU属性等)

抖店商品详情API接口(店铺|标题|主图|价格|SKU属性等) 抖店商品详情API接口是指通过调用抖音开放平台提供的接口&#xff0c;获取抖店上商品的详细信息的方法。 抖店开放平台提供了一系列的接口&#xff0c;可以用于获取商品的基本信息、价格、库存、销量、评价等各种信息。以…

Python 全栈体系【四阶】(四十四)

第五章 深度学习 九、图像分割 3. 常用模型 3.4 DeepLab 系列 3.4.3 DeepLab v3&#xff08;2017&#xff09; 在DeepLab v3中&#xff0c;主要进行了以下改进&#xff1a; 使用更深的网络结构&#xff0c;以及串联不同膨胀率的空洞卷积&#xff0c;来获取更多的上下文信…

利用管道通信(pipe)测量进程间的上下文切换(context switch)开销

利用管道通信(pipe)测量进程间的上下文切换(context switch)开销 《https://pages.cs.wisc.edu/~remzi/OSTEP/cpu-mechanisms.pdf》 Measuring the cost of a context switch is a little trickier. The lmbench benchmark does so by running two processes on a single CPU…

【LabVIEW FPGA入门】NI 环境安装教程

注意&#xff1a;安装软件之前关闭杀毒软件&#xff0c;避免安装时损坏&#xff0c;安装完成在使用杀毒软件。 步骤1&#xff1a;判断自己是否需要LabVIEW 编程。 下面这几种情况可以调过安装LabVIEW&#xff1a; 不需要LabVIEW或其他语言编程&#xff0c;直接在MAX或仪器软面板…

短视频素材该去哪里找?分享8个短视频剪辑必备的素材大全

在短视频创作与运营中&#xff0c;素材的找寻常常成为创作者的最头疼的事&#xff0c;因为它既要求不侵犯版权&#xff0c;又追求内容的优质性。然而&#xff0c;今天我要为大家揭晓一些剪辑短视频素材库的宝藏网站&#xff0c;它们将成为你创作旅程中的得力帮手&#xff0c;让…

动态手势识别(VGG11)

学校的大作业要做一个视频图像处理相关的&#xff0c;就做了动态手势识别 VGG代码 import torch import torch.nn as nnclass VGG_11_3D(nn.Module):def __init__(self, num_classes, pretrainedFalse):super(VGG_11_3D, self).__init__()self.conv1 nn.Conv3d(3, 64, kernel…

猫狗分类识别①将文件夹中图像统一转化为某一固定格式

一、 导入库 pip install Image 二、确保库中存在Image库&#xff0c;可以在Terminal或控制台中查看 pip list 三、图像后缀处理 import os from PIL import Image def convert_to_png(input_folder, output_folder):if not os.path.exists(output_folder):os.makedirs(outp…

虚拟机安装麒麟系统

官网&#xff1a;https://www.kylinos.cn/ 系统&#xff1a;银河麒麟高级服务器操作系统V10&#xff08;Kylin-Server-10-8.2&#xff09; 安装介质&#xff1a;虚拟机 兼容版下载地址&#xff1a; https://distro-images.kylinos.cn:8802/web_pungi/download/share/phHF6x7rta…

一物一码数字化营销进军调味品行业,五丰黎红“星厨俱乐部”火啦!

近日&#xff0c;由五丰黎红联合纳宝科技精心打造的小程序“星厨俱乐部”火啦&#xff01;一经上线就吸引了大量用户注册和参与&#xff0c;可以说取得了非常成功的市场反馈&#xff0c;那究竟是一个什么样的小程序&#xff0c;竟然有这么大的吸引力呢&#xff1f; 介绍小程序之…

【Mysql数据库进阶02】第一范式~第四范式 Normal Form

第一范式~第四范式Normal Form 0 引言1 第一范式2 第二范式3 第三范式4 BC范式5 第四范式总结 0 引言 因为软考&#xff0c;我又重新拾起了数据库&#xff0c;那么到底如何去判断它属于第几范式呢 1 第一范式 设R是一个关系模式&#xff0c;R属于第一范式当且仅当R中每一个…

P8805 [蓝桥杯 2022 国 B] 机房

P8805 [蓝桥杯 2022 国 B] 机房 分析 是一道lca题目&#xff0c;可以直接套模板 前缀和处理点权 具体思路&#xff1a; 1.n台电脑用n-1条网线相连&#xff0c;任意两个节点之间有且仅有一条路径&#xff08;拆分成各自到公共祖先节点的路径——lca&#xff09;&#xff1b;…

MLP的代替:KAN

受柯尔莫哥洛夫-阿诺德表示定理的启发&#xff0c;作者提出柯尔莫哥洛夫-阿诺德网络&#xff08;KAN&#xff09;作为多层感知器&#xff08;MLP&#xff09;有前途的替代品。MLP 在节点&#xff08;“神经元”&#xff09;上具有固定的激活函数&#xff0c;而 KAN 在边&#x…

SAP CS07复制BOM简介

在比较大型的集团公司中会应用到这样一个场景,所有的BOM都是由总部研发统一管控,然后在下发到下属的工厂进行生产,当发生变更的时候BOM也是会随之进行变更。 同样的在相同的两家工厂中,使用的是一套的设计方案,并且当物料发起变更的时候BOM也要随之进行变更处理。 在对BO…

Linux程序开发(一):Linux基础入门安装和实操手册

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

C语言之旅:自定义类型(联合和枚举)

目录 一.联合体 1.1 联合体的声明 1.2 联合体的使用 1.3 为什么输出 4呢&#xff1f; 1.4 相同成员的结构体和联合体对比 1.5 联合体大小对比 1.6使用联合体判断大小端 二.枚举类型 2.1枚举类型的例举&#xff1a; 2.2枚举类型的优点 2.3 枚举类型的使用 在上篇文章中…