注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

笨笨猫

 
 
 

日志

 
 

[转]I.MX51 GPIO 及驱动  

2011-11-17 13:08:05|  分类: MeeGo |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
I.MX51 GPIO 及驱动

I.MX51的GPIO 操作比ATMEL 的CPU要简单,ATMEL的GPIO组件设计得很复杂,寄存器又多;

GPIO的主要寄存器有 3个  DR GDIR  PSR

还有ICR1,ICR2,IMR,ISR 是GPIO的中断用寄存器,因为我目前没有使用,就不多说了。

DR :数据读写寄存器,通过该寄存器控制对应GPIO的高低电平,或者读入GPIO的电平状态。

GDIR :通知GPIO是通知于输出模式还是输入模式,

0  GPIO is configured as input.   对应的位设置为0 则为输入

1   GPIO is configured as output. 对应的位设置为1 则为输出 

如果对应的引脚设置为GPIO模式

   当GDIR设置为输入时,读DR寄存器,则返回引脚的电平状态

   当GDIR设置为输出时,读DR寄存器,则返回DR寄存器的状态

如果对应的引脚设置为非GPIO模式(并行设备) 

 

此外,还有一个很总要的配置就是IOMUX ,即IO引脚复用设置,因为I.MX51这款CPU实在

太他妈的复杂了,集成了太多的外设,在BGA529的封装下,也容纳不了这么多引脚。所以只能使用IO复用来解决该问题
即一个IC上的引脚,通过一个n选1的多路开关,把需要的外设连接到该引脚上。具体的配置通过 IOMUXC_SW_MUX_CTL_PAD寄存器来实现。
还有一个配套的寄存器IOMUXC_SW_PAD_CTL_PAD,主要用于配置管脚上拉、开漏等功能

[转]I.MX51 GPIO 及驱动 - 笨笨猫 - 我的博客

 

[转]I.MX51 GPIO 及驱动 - 笨笨猫 - 我的博客

上图是IOMUXC_SW_MUX_CTL_PAD_AUD3_BB_CK的IO复用配置,主要分2部分,SION和IO复用配置

SION:是软件强行配置模式,配置了该模式后,该IO的具体电平不由所连接模块的所决定,而是可以由软件写入决定,该功能估计是在调试硬件设备时使用;

IO复用:写入不同的配置,IO引脚连接到对应的模块,如 000时是AUD3_TXC

                                                                                   011时是作GPIO使用

 [转]I.MX51 GPIO 及驱动 - 笨笨猫 - 我的博客

[转]I.MX51 GPIO 及驱动 - 笨笨猫 - 我的博客

[转]I.MX51 GPIO 及驱动 - 笨笨猫 - 我的博客

IOMUXC_SW_PAD_CTL_PAD_AUD3_BB_CK 引脚配置;

I,MX51的配置比ATMEL的要丰富,连上、下拉电阻的阻值都可以配置,还有就是信号变化的上升率(slew rate filed)

keeper:就搞不懂事什么玩意??

IO复用配置,在写驱动时,很容易被忽略,我在第一次使用时,就碰到了,
我以为使用了gpio_request(IOMUX_TO_GPIO(MX51_PIN_AUD3_BB_CK), "BB_CK"); 函数会自动会帮我设置IOMUX
,后来用示波器看了管脚没有波形,再看gpio_request函数,原来这鬼,压根就没有对IOMUX进行任何配置
正确的使用:

 

//设置IO为输出

 //配置IOMUX寄存器,把MX51_PIN_AUD3_BB_CK引脚配置为GPIO
 mxc_request_iomux(MX51_PIN_AUD3_BB_CK,IOMUX_CONFIG_GPIO);  

 //linux系统通用的GPIO的操作函数,她的入口是个int的整型的数,所以需要使用IOMUX_TO_GPIO(MX51_PIN_AUD3_BB_CK)函数
 来转换。 “BB_CK”只是一个字符标记,填写什么内容都可以
 gpio_request(IOMUX_TO_GPIO(MX51_PIN_AUD3_BB_CK), "BB_CK");
 //设置GPIO的方向
 gpio_direction_output(IOMUX_TO_GPIO((MX51_PIN_AUD3_BB_CK), ), 0);

 gpio_set_value(IOMUX_TO_GPIO((MX51_PIN_AUD3_BB_CK)), 1);  //IO置高的操作
 gpio_set_value(IOMUX_TO_GPIO((MX51_PIN_AUD3_BB_CK)), 0);  //IO置低的操作

  评论这张
 
阅读(558)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017