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的更多相关文章

  1. IMX51启动模式

    相关链接: http://blog.csdn.net/kickxxx/article/details/7236040 http://blog.csdn.net/evilcode/article/det ...

  2. [转]: stm328种GPIO模式

    [原创]:这段时间开始研究stm32,今天撸着一段代码一直追,追到了GPIO口模式的枚举类型这里,遂去网上查看这8种模式到底是什么,网上一查,看到了一个答案被很多博主转载或者原创,那我也就不重复废话了 ...

  3. 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(3)

    作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...

  4. 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)

    作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...

  5. 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(1)

    作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...

  6. STM32f10xxx 之 GPIO口配置

    背景 配置stm32f103使其完成PWM输出的过程中,在配置GPIO口的时候,按照习惯配置GPIO口的speed为50MHZ,突然就意识到,为什么大部分例程习惯配置为50MHZ,而不是其它值,即有了 ...

  7. android gpio口控制

    android gpio口控制  GPIO口控制方式是在jni层控制的方式实现高低电平输出,类似linux的控制句柄方式,在linux系统下将每个设备看作一个文件,android系统是基于linux内 ...

  8. STM32F412应用开发笔记之二:基本GPIO控制

    NUCLEO-F412ZG板子上的元器件并没有完全焊接,除去ST-LINK部分和电源部分后,还有用一个USB主机接口,三个LED灯和两个按钮,不过很多功能引脚都已经引到了插针.查看原理图可发现,由原理 ...

  9. 通过数组和枚举简化GPIO操作编码

    在工作中,经常遇到大量使用GPIO作为数字量输入输出来控制设备或采集状态,每次定义操作不同的GPIO针脚既麻烦又容易出错,于是就想要简化操作过程.对于数字量输入来说就是采集对应针脚的状态:而输出则是根 ...

  10. 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 ...

随机推荐

  1. [坑况]饿了么你是这样的前端——vue+element ui 【this dependency was not found:'element-ui/lib/theme-chalk/index.css'】

    element ui 坑况:今日pull代码,潇洒npm run dev ,被告知:this dependency was not found:'element-ui/lib/theme-chalk/ ...

  2. Java Web -【分页功能】详解

    分页简介 分页功能在网页中是非常常见的一个功能,其作用也就是将数据分割成多个页面来进行显示. 使用场景: 当取到的数据量达到一定的时候,就需要使用分页来进行数据分割. 当我们不使用分页功能的时候,会面 ...

  3. oss web直传

    签名信息 auth.php <?php function gmt_iso8601($time) { $dtStr = date("c", $time); $mydatetim ...

  4. numpy的初探

    # data = numpy.genfromtxt("C:\\Users\\Admin\Desktop\\111.txt", delimiter='\t', dtype='str' ...

  5. c++DLL编程详解

    DLL(Dynamic Link Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代. ...

  6. ACM Sudoku

    Sudoku是一个非常简单的任务. 具有9行9列的方形表被划分为9个较小的正方形3x3,如图所示. 在一些单元格中写入从1到9的十进制数字.其他单元格为空. 目标是填充空单元格,其中十进制数字从1到9 ...

  7. comtypes加word 2013批量将pdf转换为doc

    office 2013很强大. import os import sys import re import comtypes.client wdFormatPDF = 17 def covx_to_p ...

  8. 一小时入门PHP

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:[http://blog.csdn.net/sdksdk0/article/details/52332296](http://blog.csdn ...

  9. 集群技术(二) MySQL集群简介与配置详解

    when?why? 用MySQL集群? 减少数据中心结点压力和大数据量处理(读写分离),采用把MySQL分布,一个或多个application对应一个MySQL数据库.把几个MySQL数据库公用的数据 ...

  10. 24 AIDL案例

    服务端 MainActivity.java package com.qf.day24_aidl_wordserver; import android.app.Activity; import andr ...