正点原子[第二期]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通用中断处理驱动

最近更新

  1. TCP协议是安全的吗?

    2024-05-12 08:44:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-12 08:44:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-12 08:44:08       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-12 08:44:08       20 阅读

热门阅读

  1. C#连接MySql数据库 (ASP.NET API)

    2024-05-12 08:44:08       10 阅读
  2. 孩子通过编程可以收获什么?

    2024-05-12 08:44:08       11 阅读
  3. 基于select for update 实现数据库排他锁

    2024-05-12 08:44:08       10 阅读
  4. oracle 行转列及列转行

    2024-05-12 08:44:08       7 阅读
  5. Docker 部署 MySQL 数据库

    2024-05-12 08:44:08       8 阅读
  6. Mybatis plus 三种分页方式,可以兼容pagehelper

    2024-05-12 08:44:08       12 阅读
  7. PostgreSQL自带的命令行工具21- initdb

    2024-05-12 08:44:08       8 阅读
  8. MySQL 数据库中 Insert 语句的锁机制

    2024-05-12 08:44:08       9 阅读
  9. redis

    redis

    2024-05-12 08:44:08      8 阅读
  10. 1.5编程基础之循环控制 03:均值

    2024-05-12 08:44:08       10 阅读