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,主要用于配置管脚上拉、开漏等功能

 

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

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

IO复用:写入不同的配置,IO引脚连接到对应的模块,如 000时是AUD3_TXC  011时是作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置低的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值