GPIO与IOMUX

  • 1 GPIO
    • 1.1 何为GPIO?
    • 1.2 GPIO常用寄存器
      • 1.2.1 GPIO direction register (GPIOx_GDIR)
      • 1.2.2 GPIO data register (GPIOx_DR)
      • 1.2.3 GPIO pad status register (GPIOx_PSR)
    • 1.3 GPIO时钟
    • 1.4 GPIO逻辑结构
  • 2 IOMUX
    • 2.1 何为IOMUX
    • 2.2 IOMUX逻辑图
      • 2.2.1 IOMUX和PAD
      • 2.2.2 PAD和Module
  • 3 IOMUX设置PAD为GPIO实例
    • 3.1 寻找实例和对应的PAD
      • 3.1.1 设置SW_MUX_CTL_PAD_GPIO1_IO00
      • 3.1.2 设置SW_PAD_CTL_PAD_GPIO1_IO00
      • 3.1.3 设置实例GPIO1全组属性

1 GPIO

1.1 何为GPIO?

GPIO只是一个CPU内提供的一种功能外设CPU外部的I/O引脚会被赋予一种功能(GPIO、UART、I2C等);该功能由CPU内外设提供,具体是什么功能由IOMUX单元(I/O复用选择器)控制。

GPIO(General Purpose Input/Output)是芯片内的外设功能模块 ,每个GPIO外设连接到了外部的I/O引脚上,和GPIO外设相连的I/O引脚(I/O引脚相较于GPIO更加远离CPU) 起着通用输入输出的功能,所以被称为 GPIO 引脚。
但是,I/O引脚不仅和GPIO外设相连,还可以和芯片内部其它外设相连,比如和UART、IIC、SPI等外设相连作为通信外设的接口引脚,和定时器相连作为PWM输出引脚,等等。

1.2 GPIO常用寄存器

GPIO特性:
通用输入/输出逻辑功能:
• 使用数据寄存器进行特定数据输出(GPIO_DR)
• 控制信号方向(GPIO_GDIR)
• 使能核心通过读取pad寄存器对应的采样输入通讯信号(GPIO_PSR).
GPIO interrupt capabilities:
• 支持32种中断
• 定义中断沿

1.2.1 GPIO direction register (GPIOx_GDIR)

A GPIO signal can operate as a general-purpose input/output when the IOMUX is set to GPIO mode.

GPIO direction register (GPIO_GDIR)来确定是GPIO是输入还是输出。当为输入模式bit=0,对应输入情况由GPIO_PSR位读取确定。

1.2.2 GPIO data register (GPIOx_DR)

32位寄存器储存数据,时刻准备加载到output line中。
GPIO模式由IOMUX确定,由GPIO_GDIR确定输入还是输出;DR寄存器数据加载入output中。
• If GDIR[n] is set and IOMUXC input mode is GPIO, then reading DR[n] returns the contents of DR[n].
• If GDIR[n] is cleared and IOMUXC input mode is GPIO, then reading DR[n] returns the corresponding input signal’s value.
• If GDIR[n] is set and IOMUXC input mode is not GPIO, then reading DR[n] returns the contents of DR[n].
• If GDIR[n] is cleared and IOMUXC input mode is not GPIO, then reading DR[n] always returns zero.

1.2.3 GPIO pad status register (GPIOx_PSR)

GPIO_PSR is a read-only register. Each bit stores the value of the corresponding input signal (as configured in the IOMUX). This register is clocked with the ipg_clk_s clock, meaning that the input signal is sampled only when accessing this location. Two wait states are required any time this register is accessed for synchronization.

1.3 GPIO时钟

  1. 先查阅手册,找到GPIO的时钟隶属于哪一组;
  2. 去到Clock章节寻找对应的clock name:IPG_CLK_S
  3. 去查对应的寄存器,以CCM_CCGR0为例:


1.4 GPIO逻辑结构

  1. PADx:它代表了芯片上的一个内部引脚。
  2. IOMUX复用选择器:芯片的每个PAD通过IOMUXC中的MUX寄存器和PAD寄存器设置,可以支持多种功能(如GPIO、IIC、USART…)。每一个PAD的功能都需要有IOMUXC决定;被设置完功能的PAD就体现为外部IO引脚。
  3. Block外设功能控制块:例如具有PWM输出功能的引脚,它需要PWM外设的支持。
  4. GPIO外设:GPIO模块是每个PAD都具有的外设,但不一定每一个PAD都会使用。当需要赋予PAD引脚GPIO功能时,就要在通过IOMUX沛公功能后,再配置GPIO外设中的各个寄存器(DR、GDIR、PSR…)。
  5. 与其它引脚的连接:这里是另一个引脚PAD2,它与PAD1有一根信号线连接,表示部分引脚的输出可以作为另一个引脚的输入。
  6. 外部IO = 内部PAD + 外设

2 IOMUX

2.1 何为IOMUX

它是CPU内部的控制器,负责给PAD赋予不同功能,使得PAD在外部展现出不同的功能;而PAD的外部就是IO引脚;因此实现IO复用。

2.2 IOMUX逻辑图

2.2.1 IOMUX和PAD

  1. 一个PAD可以去链接多个模块(module),从而实现PAD输入输出信号的复用功能;这里说明一个PAD可能有几种ALT。
  2. 当需要链接一个模块并实现功能时,首先需要给PAD赋予功能(SW_MUX_CTL_PAD_x);在赋予功能后(如GPIO后)启动那些功能属性(SW_PAD_CTL_PAD_x)。
  3. 每一个PIN是PAD在IOMUXC确定后,通过IOMUX Cell链接对应module之后对外展现的引脚。
  4. 每一个PAD都有很多个外设模块可以链接,每一种外设模块对应PAD的一种ALT

2.2.2 PAD和Module

  1. 每一个PAD都有一个IOMUIX Cell对应用于控制它;但是并不是每一个PAD会配有自己独立的模块;模块是共用的。
  2. PAD的复用是通过IOMUX Cell去分配这个PAD接受/输出数据是经过哪一个模块;
  3. PAD复用后(ALT选择后),与模块实例下的某一个端口相连;

3 IOMUX设置PAD为GPIO实例

3.1 寻找实例和对应的PAD

位于手册 Muxing Options


从左到右分别为:实例(功能)、实例端口、PAD、PAD应该被设置为ALTx
外部信号按模块实例分组的,每个信号的复用选项以及用于将信号路由到所选 PAD 的寄存器。

  1. 当你需要PIN(外部引脚)实现一个功能时,这个功能是由模块(CPU内外设)实现的;而PAD负责传输数据;实际信号流动顺序:外部信号(IO引脚)—module—PAD。
  2. 实际使用中根据需要的功能去找实例和实例端口,再由端口去找可以链接这个模块端口的PAD;并完成对PAD的设置。

以实例GPIO1组下端口IO1为例:Pad为GPIO1_IO01,模式为ALT5。

3.1.1 设置SW_MUX_CTL_PAD_GPIO1_IO00

所有的Pad设置均是如此,先设置SW_MUX_CTL_PAD_xxx


查手册,因此寄存器通过位运算设置低四位为:0101

3.1.2 设置SW_PAD_CTL_PAD_GPIO1_IO00

设置这个Pad的属性,比如驱动能力、是否使用上下拉电阻等。

3.1.3 设置实例GPIO1全组属性

注意:对于单个引脚(IO和Pad)需要设置它的功能(属于哪个module)和引脚属性,但是设置只是针对当前引脚的功能和属性;每一个引脚隶属于一个Instance(本质上是module外设),需要设置整个module(实例组)的属性。

GPIO实例需要设定的属性:


GPIOx_GDIR:每一个bit位的0/1表示一个GPIO实例的属性

GPIO与IOMUX相关推荐

  1. 使用linux的gpio点亮imx6ull的led灯

    一.查看硬件原理图,确定原理图上的led灯的引脚位置 二.查看imx6ull芯片手册<IMX6ULLRM> 参考资料:芯片手册<Chapter 28: General Purpose ...

  2. 【i.MX6ULL】驱动开发3——GPIO寄存器配置原理

    前面的两篇Linux驱动文章,介绍了字符设备驱动的两种新旧开发方式,并使用一个虚拟的字符驱动来学习字符设备的开发的流程. 本篇起,就要来操作Linux开发板的硬件,首先当然是通过经典的点亮LED灯程序 ...

  3. RT-1052学习笔记 - GPIO架构分析

    RT-1052学习笔记 - GPIO架构分析 一.RT1052之GPIO与IOMUX 二.GPIO架构分析 分析GPIO的外设框架 库函数操作 1.初始化MUX 2.初始化PAD 3.初始化GPIO外 ...

  4. rk3568 Android 适配红外遥控器

    rk3568 适配红外遥控器 生活中充满了各种波长的电磁波,所谓的可见(色)光就是人眼可见的电磁波谱,其波长为 380~770nm,为了避免遥控器发射的光造成人眼不适及减少一般人造光源干扰,故选用人眼 ...

  5. imx6ull-qemu 裸机教程1:GPIO,IOMUX,I2C

    无意间搜到了韦东山老师的6ul网站,上面有一个6ul的qemu仿真器,下载下来用了用,非常好用,有UI,比原装的qemu-system-arm提供的6ul开发板多了很多功能. 下面贴出的就是韦东山老师 ...

  6. 【驱动】GPIO 作为按键时的 设备树 配置

    #[驱动]GPIO作为按键时的 设备树 配置 0.设备树 0.0 别名 imx6ul.dtsi 什么作用??? /*************开始/ / { aliases {- gpio0 = &am ...

  7. stm32驱动lcd段码io配置_I.MX6U处理器GPIO的命名复用与IO配置

    一.I.MX6U处理器GPIO的命名 STM32 中的 IO 都是 PA0~15.PB0~15 这样命名的,I.MX6U 的 IO 是怎么命名的呢?打开NXP官方提供的<I.MX6UL 参考手册 ...

  8. IMX6ULL的GPIO操作方法

    文章目录 1 IMX6ULL的GPIO模块结构 2 CCM用于设置是否向GPIO模块提供时钟 3 IOMUXC:引脚的模式(Mode.功能) 4 GPIO模块内部 5 如何编程 5.1 读GPIO 5 ...

  9. can使能上拉 gpio_IMX6ULL 的 GPIO 操作方法

    来源:百问网 作者:韦东山 本文字数:1652,阅读时长:4分钟 CCM: Clock Controller Module (时钟控制模块) IOMUXC : IOMUX Controller,IO ...

最新文章

  1. 微星网卡linux驱动,微星中国
  2. 网络推广外包“重拳出击”中小企业网站优化力求超越网络推广外包行业站
  3. cus.crm.notes.Component.extend(cus.crm.notes.ext.Component, {
  4. Zookeeper Learning
  5. python课设总结_Python技术分享课总结:用Python模拟知乎自动登录
  6. 工作371-javascript判断数组为空
  7. 使用redis解决并发操作问题
  8. python正则表达式提取字符串密码_用python正则表达式提取字符串
  9. 你知道数字图像处理的经典Lenna图背后的故事吗
  10. [JZOJ3296] 【SDOI2013】刺客信条
  11. 数据科学学习之统计实验的设计、检验与分析
  12. python的对文档密码的简单破解
  13. HDLC(High-Level Data Link Control)(对比以太网)
  14. shell教程(2):积木游戏之认识积木--重要的系统命令
  15. 批量图片压缩的方法-免费批量无损压缩软件
  16. 弹性布局案例实操(京东网页制作的草稿)
  17. 阿里云https证书申请与部署
  18. [AGC001E]BBQ Hard
  19. Python利用Scrapy爬取前程无忧
  20. 计算机信息安全必须学,计算机信息安全技术和防护措施介绍

热门文章

  1. Android Studio 环信IM聊天设置用户头像
  2. 7款最流行的在线项目管理工具
  3. java set集合基础使用及其特点
  4. 输入一个字符串,将其逆序输出。
  5. COLA开发流程总结
  6. D. Nearest Excluded Points(cf)坐标反向BFS
  7. (与运算)、|(或运算)、^(异或运算)等运算符的解释与运用
  8. Oracle日期函数months_between的用法
  9. 2023年Java学习路线图(适合自学详细版)
  10. potplayer播放器实现人声增强