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

Linux imu6ull驱动- led

一、GPIO模块结构

        开始来啃手册了,打开我们的imx6ull手册。本章我们编写的是GPIO的,打开手册的第28章,这一章就有关于IMX6ULL 的 GPIO 模块结构。

mx6ull一共有5 组 GPIO(GPIO1~GPIO5)

GPIO1 有 32 个引脚:GPIO1_IO0~GPIO1_IO31;

GPIO2 有 22 个引脚:GPIO2_IO0~GPIO2_IO21;

GPIO3 有 29 个引脚:GPIO3_IO0~GPIO3_IO28;

GPIO4 有 29 个引脚:GPIO4_IO0~GPIO4_IO28;

GPIO5 有 12 个引脚:GPIO5_IO0~GPIO5_IO11;

往下拉就能看到GPIO配置的寄存器功能框架图。

 

二、寄存器配置分析

        根据上文的模块框图,我们知道GPIO 的控制涉及 4 大模块:CCM、IOMUXC、GPIO 模块本身。

1、CCM

参考资料:芯片手册《Chapter 32: IOMUX Controller (IOMUXC)》

功能:CCM 用于设置是否向 GPIO 模块提供时钟

①GPIOx 要用 CCM_CCGRy 寄存器中的 2 位来决定该组 GPIO 是否使能。哪组

GPIO 用哪个 CCM_CCGR 寄存器来设置。前面框图就有显示,使能对应GPIO组需要配置的寄存器位。

00:该 GPIO 模块全程被关闭

01:该 GPIO 模块在 CPU run mode 情况下是使能的;在 WAIT 或 STOP模式下,关闭

10:保留

11:该 GPIO 模块全程使能

 例如:GPIO1、GPIO5 时钟控制:

2、IOMUXC

参考资料:芯片手册《Chapter 32: IOMUX Controller (IOMUXC)》。

功能:引脚的模式(Mode、功能)

框图:可以看到IOMUXC分为两个部分。对于某个/某组引脚,IOMUXC中有2个寄存器用来设置它:SW_MUX和SW_PAD

(1)SW_MUX(选择功能)。

        对于选择寄存器,里面可以选择直接配置一个端口,也可以直接对一组引脚进行配置,这样子,对于我们有时候需要配置多个引脚,就可以直接配置一整组io。

(1)IOMUXC_SW_MUX_CTL_PAD_PADNAME> :Mux pad xxx,选择某个 pad 的功能。

(2)IOMUXC_SW_MUX_CTL_GRP_GROUP NAME>:Mux grp xxx,选择某组引脚的功能。

某个引脚,或是某组预设的引脚,都有8个可选的模式(alternate (ALT)MUX_MODE)。

比如:

(2)SW_PAD(设置上下拉电阻等参数

        对于设置上下拉电阻等参数寄存器,也是可以选择直接配置一个端口,或者直接对一组引脚进行配置。

(1)IOMUXC_SW_PAD_CTL_PAD_PAD_NAME>:pad pad xxx,设置某个pad的参数。

(2)IOMUXC_SW_PAD_CTL_GRP_GROUP NAME>:pad grp xxx,设置某组引脚的参数。

比如:

3、GPIO 模块

参考资料:芯片手册《Chapter 28​: General Purpose Input/Output (GPIO)

框图如下:

这里面我们需要关心3个寄存器:

(1)GPIOx_GDIR:设置引脚方向。

每位对应一个引脚,1-output,0-input。

(2)GPIOx_DR:设置输出引脚的电平。

每位对应一个引脚,1-高电平,0-低电平

 (3)GPIOx_PSR:读取引脚的电平。

每位对应一个引脚,1-高电平,0-低电平

 

三、GPIO读写寄存器具体分析。

1、读GPIO。

翻译一下,具体步骤为:

(1)设置CCM_CCGRx寄存器中某位使能对应的GPIO模块 // 默认是使能的,上图省略了

(2)设置IOMUX来选择引脚用于GPIO

(3)设置GPIOx_GDIR中某位为0,把该引脚设置为输入功能

(4)读GPIOx_DR或GPIOx_PSR得到某位的值(读GPIOx_DR返回的是GPIOx_PSR的值)

 

2、写GPIO

 

翻译一下:

(1)设置CCM_CCGRx寄存器中某位使能对应的GPIO模块 // 默认是使能的,上图省略了

(2)设置IOMUX来选择引脚用于GPIO

(3)设置GPIOx_GDIR中某位为1,把该引脚设置为输出功能写GPIOx_DR某位的值。

        需要注意的是,你可以设置该引脚的loopback功能,这样就可以从GPIOx_PSR中读到引脚的有实电平;你从GPIOx_DR中读回的只是上次设置的值,它并不能反应引脚的真实电平,比如可能因为硬件故障导致该引脚跟地短路了,你通过设置GPIOx_DR让它输出高电平并不会起效果。

 

http://www.lryc.cn/news/225339.html

相关文章:

  • 【 云原生 | K8S 】Kubernetes 概述
  • 边缘计算多角色智能计量插座:用电监测和资产管理的未来智能化引擎
  • mysql隐式转换转换引起的bug
  • 【Python】gevent模块实现协程模拟高并发
  • leetcode:2485. 找出中枢整数(python3解法)
  • asp.net core mvc之模型绑定、特性约束模型绑定、模型验证(服务器/客户端/远程)
  • AI诈骗防范:保护数字社会的安全前线
  • (待完善)python学习参考手册
  • STM32-HAL库09-CAN通讯(loopback模式)
  • jsvascript使用dhtmlXTreeObject的loadJSONObject绘制目录树
  • LeetCode 17. 电话号码的字母组合 中等
  • 《GPT与AI助手:技术进步与就业前景》
  • 线性代数 | 矩阵运算 加减 数乘 矩阵的幂运算
  • Linux---(五)三大工具yum、vim、gcc/g++
  • 网络通信TCP、UDP详解
  • Flutter笔记:绘图示例 - 一个简单的(Canvas )时钟应用
  • Bard和ChatGPT的一些比较
  • centos7安装Nexus(Maven私服)与配置使用教程
  • Azure 机器学习 - 有关为 Azure 机器学习配置 Kubernetes 群集的参考
  • 使用微信小程序控制蓝牙小车(微信小程序端)
  • 【react hook】react hook组件中,在forEach中使用async/awati进行异步操作,为什么后面代码没有等待直接同步运行了呢?
  • 高斯过程回归 | GPR高斯过程回归
  • [autojs]逍遥模拟器和vscode对接
  • Docker 安装与优化
  • Wix使用velo添加Google ads tag并在form表单提交时向谷歌发送事件
  • Centos配置邮件发送
  • Ubuntu系统使用apt-get管理软件工具
  • 带你走进Cflow (三)·控制符号类型分析
  • FPGA UDP RGMII 千兆以太网(3)ODDR
  • OSG交互:选中场景模型并高亮显示