GPIO与IOMUX
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时钟
- 先查阅手册,找到GPIO的时钟隶属于哪一组;
- 去到Clock章节寻找对应的clock name:IPG_CLK_S
- 去查对应的寄存器,以CCM_CCGR0为例:
1.4 GPIO逻辑结构
- PADx:它代表了芯片上的一个内部引脚。
- IOMUX复用选择器:芯片的每个PAD通过IOMUXC中的MUX寄存器和PAD寄存器设置,可以支持多种功能(如GPIO、IIC、USART…)。每一个PAD的功能都需要有IOMUXC决定;被设置完功能的PAD就体现为外部IO引脚。
- Block外设功能控制块:例如具有PWM输出功能的引脚,它需要PWM外设的支持。
- GPIO外设:GPIO模块是每个PAD都具有的外设,但不一定每一个PAD都会使用。当需要赋予PAD引脚GPIO功能时,就要在通过IOMUX沛公功能后,再配置GPIO外设中的各个寄存器(DR、GDIR、PSR…)。
- 与其它引脚的连接:这里是另一个引脚PAD2,它与PAD1有一根信号线连接,表示部分引脚的输出可以作为另一个引脚的输入。
- 外部IO = 内部PAD + 外设。
2 IOMUX
2.1 何为IOMUX
它是CPU内部的控制器,负责给PAD赋予不同功能,使得PAD在外部展现出不同的功能;而PAD的外部就是IO引脚;因此实现IO复用。
2.2 IOMUX逻辑图
2.2.1 IOMUX和PAD
- 一个PAD可以去链接多个模块(module),从而实现PAD输入输出信号的复用功能;这里说明一个PAD可能有几种ALT。
- 当需要链接一个模块并实现功能时,首先需要给PAD赋予功能(SW_MUX_CTL_PAD_x);在赋予功能后(如GPIO后)启动那些功能属性(SW_PAD_CTL_PAD_x)。
- 每一个PIN是PAD在IOMUXC确定后,通过IOMUX Cell链接对应module之后对外展现的引脚。
- 每一个PAD都有很多个外设模块可以链接,每一种外设模块对应PAD的一种ALT。
2.2.2 PAD和Module
- 每一个PAD都有一个IOMUIX Cell对应用于控制它;但是并不是每一个PAD会配有自己独立的模块;模块是共用的。
- PAD的复用是通过IOMUX Cell去分配这个PAD接受/输出数据是经过哪一个模块;
- PAD复用后(ALT选择后),与模块实例下的某一个端口相连;
3 IOMUX设置PAD为GPIO实例
3.1 寻找实例和对应的PAD
位于手册 Muxing Options:
从左到右分别为:实例(功能)、实例端口、PAD、PAD应该被设置为ALTx。
外部信号按模块实例分组的,每个信号的复用选项以及用于将信号路由到所选 PAD 的寄存器。
- 当你需要PIN(外部引脚)实现一个功能时,这个功能是由模块(CPU内外设)实现的;而PAD负责传输数据;实际信号流动顺序:外部信号(IO引脚)—module—PAD。
- 实际使用中根据需要的功能去找实例和实例端口,再由端口去找可以链接这个模块端口的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相关推荐
- 使用linux的gpio点亮imx6ull的led灯
一.查看硬件原理图,确定原理图上的led灯的引脚位置 二.查看imx6ull芯片手册<IMX6ULLRM> 参考资料:芯片手册<Chapter 28: General Purpose ...
- 【i.MX6ULL】驱动开发3——GPIO寄存器配置原理
前面的两篇Linux驱动文章,介绍了字符设备驱动的两种新旧开发方式,并使用一个虚拟的字符驱动来学习字符设备的开发的流程. 本篇起,就要来操作Linux开发板的硬件,首先当然是通过经典的点亮LED灯程序 ...
- RT-1052学习笔记 - GPIO架构分析
RT-1052学习笔记 - GPIO架构分析 一.RT1052之GPIO与IOMUX 二.GPIO架构分析 分析GPIO的外设框架 库函数操作 1.初始化MUX 2.初始化PAD 3.初始化GPIO外 ...
- rk3568 Android 适配红外遥控器
rk3568 适配红外遥控器 生活中充满了各种波长的电磁波,所谓的可见(色)光就是人眼可见的电磁波谱,其波长为 380~770nm,为了避免遥控器发射的光造成人眼不适及减少一般人造光源干扰,故选用人眼 ...
- imx6ull-qemu 裸机教程1:GPIO,IOMUX,I2C
无意间搜到了韦东山老师的6ul网站,上面有一个6ul的qemu仿真器,下载下来用了用,非常好用,有UI,比原装的qemu-system-arm提供的6ul开发板多了很多功能. 下面贴出的就是韦东山老师 ...
- 【驱动】GPIO 作为按键时的 设备树 配置
#[驱动]GPIO作为按键时的 设备树 配置 0.设备树 0.0 别名 imx6ul.dtsi 什么作用??? /*************开始/ / { aliases {- gpio0 = &am ...
- stm32驱动lcd段码io配置_I.MX6U处理器GPIO的命名复用与IO配置
一.I.MX6U处理器GPIO的命名 STM32 中的 IO 都是 PA0~15.PB0~15 这样命名的,I.MX6U 的 IO 是怎么命名的呢?打开NXP官方提供的<I.MX6UL 参考手册 ...
- IMX6ULL的GPIO操作方法
文章目录 1 IMX6ULL的GPIO模块结构 2 CCM用于设置是否向GPIO模块提供时钟 3 IOMUXC:引脚的模式(Mode.功能) 4 GPIO模块内部 5 如何编程 5.1 读GPIO 5 ...
- can使能上拉 gpio_IMX6ULL 的 GPIO 操作方法
来源:百问网 作者:韦东山 本文字数:1652,阅读时长:4分钟 CCM: Clock Controller Module (时钟控制模块) IOMUXC : IOMUX Controller,IO ...
最新文章
- 微星网卡linux驱动,微星中国
- 网络推广外包“重拳出击”中小企业网站优化力求超越网络推广外包行业站
- cus.crm.notes.Component.extend(cus.crm.notes.ext.Component, {
- Zookeeper Learning
- python课设总结_Python技术分享课总结:用Python模拟知乎自动登录
- 工作371-javascript判断数组为空
- 使用redis解决并发操作问题
- python正则表达式提取字符串密码_用python正则表达式提取字符串
- 你知道数字图像处理的经典Lenna图背后的故事吗
- [JZOJ3296] 【SDOI2013】刺客信条
- 数据科学学习之统计实验的设计、检验与分析
- python的对文档密码的简单破解
- HDLC(High-Level Data Link Control)(对比以太网)
- shell教程(2):积木游戏之认识积木--重要的系统命令
- 批量图片压缩的方法-免费批量无损压缩软件
- 弹性布局案例实操(京东网页制作的草稿)
- 阿里云https证书申请与部署
- [AGC001E]BBQ Hard
- Python利用Scrapy爬取前程无忧
- 计算机信息安全必须学,计算机信息安全技术和防护措施介绍