当前位置: 首页 > news >正文

【linux学习---1】点亮一个LED---驱动一个GPIO

文章目录

  • 1、原理图找对应引脚
  • 2、IO复用
  • 3、IO配置
  • 4、GPIO配置
  • 5、GPIO时钟使能
  • 6、总结

1、原理图找对应引脚

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上图 可以看出, 蜂鸣器 接到了 BEEP 上, BEEP 就是 GPIO5_IO05

2、IO复用

查找IMX6UL参考手册
在这里插入图片描述
和 STM32一样,如果某个 IO 要作为某个外设引脚使用的话, 是需要配置复用寄存器的。

3、IO配置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、GPIO配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
此寄存器是 32 位的,一个 GPIO 组最大只有 32 个 IO,因此 DR 寄存器中的每个位都对应
一个 GPIO。当 GPIO 被配置为输出功能以后,向指定的位写入数据那么相应的 IO 就会输出相
应的高低电平,比如要设置 GPIO1_IO00 输出高电平,那么就应该设置 GPIO1.DR=1。
在这里插入图片描述
GDIR 寄存器也是 32 位的,此寄存器用来设置某个 IO 的工作方向,是输入还是输出。同
样的,每个 IO 对应一个位,如果要设置 GPIO 为输入的话就设置相应的位为 0,如果要设置为
输出的话就设置为 1。比如要设置 GPIO1_IO00 为输入,那么 GPIO1.GDIR=0;
同样的 PSR 寄存器也是一个 GPIO 对应一个位,读取相应的位即可获取对应的 GPIO 的状
态,也就是 GPIO 的高低电平值。功能和输入状态下的 DR 寄存器一样
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
IMR 寄存器也是一个 GPIO 对应一个位, IMR 寄存器用来控制 GPIO 的中断禁止和使能,
如果使能某个 GPIO 的中断,那么设置相应的位为 1 即可,反之,如果要禁止中断,那么就设
置相应的位为 0 即可。例如,要使能 GPIO1_IO00 的中断,那么就可以设置 GPIO1.MIR=1 即

在这里插入图片描述
ISR 寄存器也是 32 位寄存器,一个 GPIO 对应一个位,只要某个 GPIO 的中断发生,那么
ISR 中相应的位就会被置 1。所以,我们可以通过读取 ISR 寄存器来判断 GPIO 中断是否发生,
相当于 ISR 中的这些位就是中断标志位。当我们处理完中断以后,必须清除中断标志位,清除
方法就是向 ISR 中相应的位写 1,也就是写 1 清零。
在这里插入图片描述
EDGE_SEL 寄存器用来设置边沿中断,这个寄存器会覆盖 ICR1 和 ICR2 的设置,同样是一
个 GPIO 对应一个位。如果相应的位被置 1,那么就相当与设置了对应的 GPIO 是上升沿和下降
沿(双边沿)触发。例如,我们设置 GPIO1.EDGE_SEL=1,那么就表示 GPIO1_IO01 是双边沿触
发中断,无论 GFPIO1_CR1 的设置为多少,都是双边沿触发。

5、GPIO时钟使能

在这里插入图片描述
在这里插入图片描述

6、总结

总结一下,要将 I.MX6UL的 IO 作为 GPIO 使用,我们需要一下
几步:
①、使能 GPIO 对应的时钟。
②、设置寄存器 IOMUXC_SW_MUX_CTL_PAD_XX_XX,设置 IO 的复用功能,使其复用
为 GPIO 功能。
③、设置寄存器 IOMUXC_SW_PAD_CTL_PAD_XX_XX,设置 IO 的上下拉、速度等等。
④、第②步已经将 IO 复用为了 GPIO 功能,所以需要配置 GPIO,设置输入/输出、是否使
用中断、默认输出电平等。

相关文章:

  • 使用python做飞机大战
  • Android Service两种启动方式的区别
  • 无人机云台的类型及其作用
  • deepstream 6.2版本下载链接
  • 为什么我感觉 C 语言在 Linux 下执行效率比 Windows 快得多?
  • 什么是嵌入式,单片机又是什么,两者有什么关联又有什么区别?
  • Dubbo负载均衡策略都有哪些(简单描述)
  • CS2黑屏、闪退、掉线的解决方法一览
  • 【Linux】性能分析器 perf 详解(二):list、record、report、top
  • Git不想跟踪某个文件
  • 品牌推广好做吗?掌握技巧和方法,流程也需精通!
  • Android 监听网络状态变化(无切换中间态版)
  • Webpack: 持久化缓存大幅提升构建性能
  • 【软件测试】Junit单元测试框架 | 注解 | 参数化 | 测试套件
  • 算法训练营第七十三天 | Bellman_ford算法、SPFA算法、Bellman_ford之判断负权回路
  • 11111111
  • 30天自制操作系统-2
  • Angular 2 DI - IoC DI - 1
  • angular2开源库收集
  • Intervention/image 图片处理扩展包的安装和使用
  • leetcode98. Validate Binary Search Tree
  • Markdown 语法简单说明
  • Python连接Oracle
  • Python学习之路16-使用API
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Web标准制定过程
  • 从零开始在ubuntu上搭建node开发环境
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 强力优化Rancher k8s中国区的使用体验
  • 如何利用MongoDB打造TOP榜小程序
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用SAX解析XML
  • 线性表及其算法(java实现)
  • 小程序测试方案初探
  • 用mpvue开发微信小程序
  • ​Java并发新构件之Exchanger
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • $L^p$ 调和函数恒为零
  • (2)空速传感器
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (rabbitmq的高级特性)消息可靠性
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (五)c52学习之旅-静态数码管
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转) Face-Resources
  • (转)Oracle存储过程编写经验和优化措施
  • ***检测工具之RKHunter AIDE
  • **PHP二维数组遍历时同时赋值
  • . Flume面试题
  • .bat批处理(一):@echo off
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net 4.0并行库实用性演练
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core 和 .NET Framework 中的 MEF2