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个子中断控制单元,每个子单元处理一个单独的中断引脚。

最新文章

  1. 《CLR via C#》---枚举标志和标志位
  2. W5200移植W5500驱动教程
  3. 20145206邹京儒《Java程序设计》第一周学习总结
  4. ARM流水线关键技术分析与代码优化
  5. Codeforces 706 D. Vasiliy's Multiset (字典树贪心)
  6. Struts知识问答 分类: 面试 2015-07-10 22:01 4人阅读 评论(0) 收藏
  7. hdu 3746 Cyclic Nacklace(KMP)
  8. Android批量插入数据到SQLite数据库
  9. nginx区分手机与电脑浏览器并进入相应站点
  10. Sort函数的相关知识
  11. ural1772 Ski-Trails for Robots
  12. ACM-ICPC北京赛区(2017)网络赛_Minimum
  13. attr和prop的区别以及在企业开发中应该如何抉择
  14. kettle查询-2
  15. Cassandra数据模型
  16. Linux命令-cut篇
  17. 取消win10 任务栏已固定的软件
  18. 分数模板(C++模板)
  19. Django文件存储(二)定制存储系统
  20. G711编解码

热门文章

  1. 第四周小组作业:Wordcount优化
  2. JVM内存模型及分区
  3. javascript templating
  4. python字典无限遍历
  5. PostOffice最小距离问题
  6. js页面(页面上无服务端控件,且页面不刷新)实现请求一般处理程序下载文件方法
  7. 独立游戏《Purgatory Ashes》的经验与总结
  8. jdk和tomcat配置
  9. /usr,/usr/local/ 还是 /opt ?
  10. Openstack: change endpoint IP addresses after installation