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

前言:

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

引用:

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

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

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

说明:

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

0. 概述

本章实验的功能和之前按键控制蜂鸣器的实验一样,只是按键采用中断的方式来处理。当按下KEY0以后就打开蜂鸣器,再次按下蜂鸣器KEY0就关闭蜂鸣器。

1. 移植SDK

将NXP SDK里的文件 core_ca7.h 拷贝到本章实验目录中的 "imx6ul' 文件夹中,参考正点原子提供的示例源码"9_int"中的 core_ca7.h 进行修改。主要留下和GIC相关的内容,我们重点是需要使用 core_ca7.h 中的的10个API函数,这10个函数如下表所示:

函数描述
GIC_Init初始化GIC。
GIC_EnableIRQ使能指定外设中断。
GIC_DisableIRQ关闭指定的外设中断
GIC_AcknowledgeIRQ返回中断号。
GIC_DeactivateIRQ无效化指定中断。
GIC_GetRunningPriority获得当前正在运行的中断优先级。
GIC_SetPriorityGrouping设置抢占中断优先级位数。
GIC_GetPriorityGrougping获取抢占中断优先级位数。
GIC_SetPriority设置指定中断的优先级。
GIC_GetPriority获取指定中断的优先级。

移植好以后,吸怪 imx6ul.h ,在里面加上一行代码。

#include "core_ca7.h" 

在正点原子的哔哩哔哩网站第15.5 视频教程里,正点原子哥说自己移植NXP SDK里面的 core_ca7.h 花了一天时间,因为里面勾连引用了很多NXP SDK里的符号声明和定义等,我这里就直接偷懒从正点原子提供的示例源码里拷贝已经移植好的 core_ca7.h 来使用了。

core_ca7.h 的主要内容如下,我们关心的是前面列出来的10个GIC相关的 GIC_xxx 函数,这10个函数可以对GIC中断控制器进行配置,GIC中断控制器在之前的15.3,15.4两讲的博文里,已经分析过GIC中断控制器分为两个逻辑模块,GIC Distributor 分发器端和 GIC CPU Interface 内核接口端。GIC中断控制函数通过写对应的GIC寄存器(寄存器可以从ARM GICV2.0 手册中查到),来实现对中断的使能,关闭,应答,中断优先级配置。

  • 初始化GIC
  • 使能指定外设中断
  • 关闭指定外设中断
  • 返回中断号
  • 无效化指定中断
  • 获取当前正在运行的中断优先级
  • 设置抢占中断优先级位数
  • 获取抢占中断优先级位数
  • 设置指定中断的优先级
  • 获取指定中断的优先级

Struct GIC_Type 中定义的GIC分发器端寄存器和GIC CPU接口端寄存器,和《ARM Generic Interrupt Controller(ARM GIC控制器)V2.0.pdf》中介绍的GIC 内存映射分布是对应的。

然后是NXP SDK 在 core_ca7.h 文件里定义的 ‘GIC_xx()’ API 接口函数,通过上面的C语言嵌入式汇编语言的写法 '__MRC()' , '__MCR()' 来写相应的 GIC 寄存器来配置:GIC初始化,使能指定外设中断,关闭指定外设中断,获取中断ID号,获取指定中断优先级,设置指定中断优先级。

以下面一个函数为例分析NXP SDK 里的 core_ca7.h 里的函数宏展开之后如何读取GIC中断控制的的寄存器:

 

2. 编写bsp_int通用中断处理驱动

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL中的DQL

语法: select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段 limit 分页参数 条件查询 语法: 查询多个字段:select 字段1,字段2 from表名 查询所有字段&#xff1a…

计算机视觉——OpenCV实现Lucas-Kanade 光流追踪

1.光流 光流法是计算机视觉中用于估计图像序列中物体运动的关键技术。它类似于观察夜空中的彗星,通过其在天空中的运动轨迹来追踪它的路径。在图像处理中,光流帮助我们理解像素点如何在连续的帧之间移动。 1.1 稀疏光流法 稀疏光流法关注于图像中的关…

【算法】最短路问题 bfs 到 dijkstra

1976、到达目的地的方案数 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。输入保证你可以从任意路口出发到达其他任意路口,且任意两个路口之间最多有一条路。 给你一个整数 n 和二维整…

Coze扣子开发指南:AI零代码编程创建插件

在Coze扣子中创建插件,有两种方式,一是用API,具体方式参照上一篇文章《Coze扣子开发指南:用免费API自己创建插件》,还有一种方式就是编程,不过有了AI的帮助,即使不会编程的人,也可以…

AI语音模型PaddleSpeech踩坑(安装)指南

PaddleSpeech简介 PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,包含大量基于深度学习前沿和有影响力的模型。 PaddleSpeech安装步骤 提示:要找到一个合适的PaddleSpeech版本与pad…

软件全套资料梳理(需求、开发、实施、运维、安全、测试、交付、认证、评审、投标等)

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

C++ | Leetcode C++题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; class Solution { public:int largestRectangleArea(vector<int>& heights) {int n heights.size();vector<int> left(n), right(n, n);stack<int> mono_stack;for (int i 0; i < n; i) {while (!mono_stack.em…

批量生成大量附件(如:excel,txt,pdf)压缩包等文件时前端超时,采用mq+redis异步处理和多线程优化提升性能

一.首先分析一下场景&#xff1a;项目中我需要从财务模块去取单证模块的数据来生成一个个excel文件 在单证那个一个提单号就是一个excel文件&#xff0c;我们这边一个财务发票可能会查出几千个提单&#xff0c;也就是会生成几百个excel&#xff0c;然后压缩为一个压缩包&#x…

企业微信创建应用(一)

登录到企业微信后台管理(https://work.weixin.qq.com/)进入自建应用(应用管理-应用-创建应用) 3.查看参数AgentId和 Secret 4.企业微信查看效果

Python | Leetcode Python题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; class Solution:def largestRectangleArea(self, heights: List[int]) -> int:n len(heights)left, right [0] * n, [n] * nmono_stack list()for i in range(n):while mono_stack and heights[mono_stack[-1]] > heights[i]:righ…

音频运放LPF使用

1、用于差分ADC输入的单端到差分缓冲器和抗混叠LPF 2、用于单端ADC输入的缓冲和抗混叠LPF 3、用于DAC输出的后置LPF和差分到单端缓冲器&#xff08;AC耦合&#xff09; 4、后LPF和差分到DAC输出的单端缓冲器&#xff08;直流耦合&#xff09; 5、用于差分ADC输入的具有抗混叠LP…

【无标获取S4与ECC的具体差异的方法题】

首先我们需要对ECC vs S4的差异这个课题要有一个深刻的理解&#xff0c;这不是一个简单并能准确说清楚的课题。 我们需要结合实际项目的具体情况去回答这个问题&#xff0c;因为这个问题本身是没有标准答案的。 首先要了解SAP本身ERP产品线的发展概况&#xff0c;其次我们要…

微信小程序踩坑,skyline模式下,scroll-view下面的一级元素设置margin中的auto无效,具体数据有效

开发工具版本 基础库 开启skyline渲染调试 问题描述 skyline模式下,scroll-view下面的一级元素的margin写auto的值是没有效果的(二级元素margin写auto是有效果的),关闭这个模式就正常显示 演示效果图 父元素的宽度和高度效果(宽度是750rpx,宽度占满的) 一级元素宽度和css效果…

在Linux上安装并启动Redis

目录 安装gcc环境 上传redis文件方法一&#xff1a;sftp 上传redis文件方法二&#xff1a;wget 启动redis-server ctrlc关闭redis-server 参考文章&#xff1a;Linux 安装 Redis 及踩坑 - 敲代码的阿磊 - 博客园 (cnblogs.com) 准备&#xff1a;打开VMware Workstation&am…

20240511,谓词,内建函数对象

拜托铠甲勇士真的帅好不好&#xff01;&#xff01;&#xff01; STL案例2-员工分组 10个员工&#xff0c;指派部门&#xff0c;员工信息&#xff08;姓名&#xff0c;工资组成&#xff0c;部门&#xff1a;策划&#xff0c;美术&#xff0c;研发&#xff09;&#xff0c;随机…

【Web】2023香山杯决赛 security system 题解

目录 step -1 step 0 step 1 step 2 step 3 step -1 ①题目hint&#xff1a;想办法修改属性值后进入java的原生反序列化&#xff0c;然后利用jackson链写入内存马 ②jackson反序列化基础&#xff1a; ObjectMapper objectMapper new ObjectMapper(); String jsonStrin…

MyBatis-plus(一):快速入门

目录 一、MyBatis-plus 快速入门 1、原理 2、实体类命名规则 3、常见注解 4、主键 id 策略 5、使用 TableField 的常见场景 6、常用配置 二、核心功能 1、条件构造器 2、自定义 SQL 3、IService 接口 一、MyBatis-plus 快速入门 1、原理 MyBatisPlus 通过扫描实体…

✨✨使用vue3打造一个el-form表单及高德地图的关联组件实例✨

✨1. 实现功能 &#x1f31f;表单内显示省市县以及详细地址 点击省市县输入框时&#xff0c;打开对应地图弹窗&#xff0c;进行位置选择选择位置回显入对应输入框表单内的省市县以及地址输入框同外嵌表单走相同的校验方式触发校验后点击reset实现清除校验与清空数据 &#x1f…

WebSocket 详解加入门实操理解加深

WebSocket 介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接…

图的顺序存储和链式存储实现

目录 一、顺序存储 有向图&#xff1a; 无向图 代码实现 二、链式存储 有向图 无向图 代码实现 一、顺序存储 主要用到的是一个二维数组&#xff0c;也就是矩阵&#xff0c;直接上栗子&#xff1a; 有向图&#xff1a; 若要储存如下这个有向图&#xff1a; 需要建立一…