IMX51---GPIO
GPIO(General Purpose Input/Output)指通用输入/输出,IMX51的GPIO模块提供32位双向的、通用输入和输出的信号,下图是GPIO的框图:
图1
1. GPIO概述
GPIO模块提供专用的且可以配置为输入或是输出的通用pin。当GPIO配置为输出,用户可以通过向内部寄存器(DR)写数据来控制输出引脚的状态。当GPIO配置为输入,用户可以通过读取内部寄存器(PSR)来检测输入引脚的状态。
图2
GPIO模块提供8个寄存器、边沿检测电路和中断产生逻辑。
2. GPIO寄存器描述
GPIO的8个寄存器用下面的结构体描述:
typedef struct
{
UINT32 DR;
UINT32 GDIR;
UINT32 PSR;
UINT32 ICR1;
UINT32 ICR2;
UINT32 IMR;
UINT32 ISR;
UINT32 EDGE_SEL;
} CSP_GPIO_REGS, *PCSP_GPIO_REGS;
2.1 DR数据寄存器
如果IOMUX把对应的PIN设置为GPIO模式,且设置为输出,写到DR中的数据驱动PIN的状态。如果配置为输入,可通过读取DR寄存器来获取响应PIN的状态。为确保同步读取此寄存器,需要两个等待状态。
读取DR寄存器的得到的值取决于IOMUX输入模式设置和相应GDIR位,如下图:
图3
2.2 GDIR数据方向寄存器
GDIR寄存器每一位可以指定每个具体PAD的方向,设置为0表示输入,设置为1表示输出。
图4
2.3 PSR引脚采样寄存器
PSR是只读寄存器,每一位存储了相应PAD的值。此寄存器的值只有在访问的时候才能读取到。
图5
2.4 ICR(ICR1,ICR2)中断控制寄存器
ICR寄存器每2位指定每个相应中断引脚的中断配置,比如低电平触发、高电平触发、上升沿触发和下降沿触发,其中ICR1和ICR2寄存器都支持16个中断,分别对应中断引脚15到0和31到16。
图6
图7
2.5 IMR中断屏蔽寄存器
每一位用于屏蔽中断引脚,当设置为0表示禁用此中断,设置为1表示使能此中断。
图8
2.6 ISR中断状态寄存器
每一位指示中断是否发生,当一个中断产生,也就是ICR寄存器设置的中断条件满足的时候,此寄存器对应位被设置为1。当此中断被处理后,可以通过软件对此位写1来清零。
图9
2.7 EDGE_SEL边沿选择寄存器
支持32个中断的设置,当设置为1,此寄存器的值覆盖ICR寄存器的配置,也就是当设置为1后,GPIO忽略ICR功能及其配置的中断条件,只要有跳变沿,就产生中断。
图10
3. GPIO编程说明
3.1 读取PAD的值
读取PAD值的编程顺序如下:
⑴配置IOMUX选择GPIO模式。
⑵配置GPIO的GDIR寄存器,使对应的PAD作为输入。
⑶通过读DR寄存器或是PSR寄存器来获取PAD的值。
在GPIO配置为输入时,读取DR寄存器返回的不是DR数据,相反,而是返回PSR数据,对应相应PAD的值。
3.2 向PAD写值
设置PAD值的编程顺序如下:
⑴配置IOMUX选择GPIO模式。
⑵配置GPIO的GDIR寄存器,使对应的PAD作为输出。
⑶向DR寄存器对应位写入需要控制的值。
在GPIO设置为输出时,只能通过读取PSR寄存器来验证PAD的值。
3.3 中断控制单元
除了通用输入/输出功能,GPIO模块中的边沿检测逻辑能够反映出输入GPIO引脚电平的跳变。中断控制单元有32个子中断控制单元,每个子单元处理一个单独的中断引脚。
IMX51---GPIO的更多相关文章
- IMX51启动模式
相关链接: http://blog.csdn.net/kickxxx/article/details/7236040 http://blog.csdn.net/evilcode/article/det ...
- [转]: stm328种GPIO模式
[原创]:这段时间开始研究stm32,今天撸着一段代码一直追,追到了GPIO口模式的枚举类型这里,遂去网上查看这8种模式到底是什么,网上一查,看到了一个答案被很多博主转载或者原创,那我也就不重复废话了 ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(3)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(1)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- STM32f10xxx 之 GPIO口配置
背景 配置stm32f103使其完成PWM输出的过程中,在配置GPIO口的时候,按照习惯配置GPIO口的speed为50MHZ,突然就意识到,为什么大部分例程习惯配置为50MHZ,而不是其它值,即有了 ...
- android gpio口控制
android gpio口控制 GPIO口控制方式是在jni层控制的方式实现高低电平输出,类似linux的控制句柄方式,在linux系统下将每个设备看作一个文件,android系统是基于linux内 ...
- STM32F412应用开发笔记之二:基本GPIO控制
NUCLEO-F412ZG板子上的元器件并没有完全焊接,除去ST-LINK部分和电源部分后,还有用一个USB主机接口,三个LED灯和两个按钮,不过很多功能引脚都已经引到了插针.查看原理图可发现,由原理 ...
- 通过数组和枚举简化GPIO操作编码
在工作中,经常遇到大量使用GPIO作为数字量输入输出来控制设备或采集状态,每次定义操作不同的GPIO针脚既麻烦又容易出错,于是就想要简化操作过程.对于数字量输入来说就是采集对应针脚的状态:而输出则是根 ...
- Zybo GPIO Demo Run Embedded Linux
1.Environment Ubuntu 12.04 x86_64 Vivado 2013.4 SDK 2013.4 2.Pre-requisites 2.1 CodeSourcery arm-g ...
随机推荐
- 使用EasyNetQ组件操作RabbitMQ消息队列服务
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...
- IntelliJ IDEA设置统一编码utf-8
File菜单->Other Settings->Default Settings->File Encodings 全改成utf-8!
- 初识Redis系列之一:简单介绍
一:Redis是什么? Redis全称:REmote DIctionary Server(Redis) .Redis是一个由Salvatore Sanfilippo写的key-value存储系统,AN ...
- 利用mybatis-generator自动生成数据持久化的代码
MyBatis生成器简介 MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器.它将生成所有版本的MyBatis的代码,以及版本2.2.0之后的iB ...
- Python小代码_7_字符串的字符次数统计
生成包含 1000 个随机字符的字符串,并统计每个字符出现的次数. import string import random #获取字符 x = string.ascii_letters + strin ...
- 使用RedisDesktopManager工具,解决连接失败问题
今天在云服务器上搭建好了redis环境,想用RedisDesktopManager工具去连接一下,结果连接不上,显示如下图: 我确保了服务器防火墙关闭,又在redis配置文件中设置了requirepa ...
- AbstractQueuedSynchronizer源码解读--续篇之Condition
1. 背景 在之前的AbstractQueuedSynchronizer源码解读中,介绍了AQS的基本概念.互斥锁.共享锁.AQS对同步队列状态流转管理.线程阻塞与唤醒等内容.其中并不涉及Condit ...
- Bootstrap3 栅格系统-实例:响应列重置(Responsive column resets)
四层的网格你肯定会遇到问题,可用在特定的断点,你的列不清楚作为一个比另一个高完全正确.为了解决这个问题,结合使用.clearfix和响应的实用工具类. <div class="row& ...
- HBase的环境配置及其应用
-------------------------------------------------------------------------------------- [版权申明:本文系作者原创 ...
- J2EE进阶(十九)FileNotFoundException: http://hibernate.org/dtd/hibernate-mapping-3.0.dtd
J2EE进阶(十九)Nested exception: java.io.FileNotFoundException: http://hibernate.org/dtd/hibernate-mappin ...