首页 > 代码库 > IMX6 GPIO的定义

IMX6 GPIO的定义

比如定义PAD_GPIO_19作为一个GPIO_4_5使用:

#define  MX6Q_PAD_GPIO_19__GPIO_4_5     (_MX6Q_PAD_GPIO_19__GPIO_4_5 | MUX_PAD_CTRL(NO_PAD_CTRL))  

看上面的宏:

_MX6Q_PAD_GPIO_19__GPIO_4_5

它的定义是:

#define _MX6Q_PAD_GPIO_19__GPIO_4_5      IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0)

#define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs,   _sel_input, _pad_ctrl) 

IOMUX_PAD宏有6个参数,每个参数的意思是:

_pad_ctrl_ofs      控制寄存器的偏移地址(16进制) 该地址定义PAD是cmos还是schimitt输入,上拉还是下拉,阻抗多少om等功能,请查看寄存器;

_mux_ctrl_ofs     MUX控制寄存器的偏移地址(16进制), 用于选择引脚的功能

 _mux_mode      MUX模式,bit0~3,范围0~7,ALT的值,0~7,就是选引脚是gpio还是其他功能,一个pad是个确确实实能摸到的芯片的管脚,而这管脚有多种配置,实现不同的功能

_sel_input_ofs     SELECT_INPUT寄存器偏移地址(16进制)  当ALT的选择使得PAD作为其他PAD也能实现的功能时,这个寄存器才有用。比如关键PIN35\PIN45都能做UART_TXD,这个时候,就要在这个寄存器里,对_sel_input,进行设置,具体查看寄存器。

_pad_ctrl  一般取值为0(好吧,暂不追究)

因此一个PAD就可以出现下面这么多种配置:

  1. #define _MX6Q_PAD_GPIO_19__KPP_COL_5            \  
  2.         IOMUX_PAD(0x0624, 0x0254, 0, 0x08E8, 1, 0)  
  3. #define _MX6Q_PAD_GPIO_19__ENET_1588_EVENT0_OUT     \  
  4.         IOMUX_PAD(0x0624, 0x0254, 1, 0x0000, 0, 0)  
  5. #define _MX6Q_PAD_GPIO_19__SPDIF_OUT1           \  
  6.         IOMUX_PAD(0x0624, 0x0254, 2, 0x0000, 0, 0)  
  7. #define _MX6Q_PAD_GPIO_19__CCM_CLKO         \  
  8.         IOMUX_PAD(0x0624, 0x0254, 3, 0x0000, 0, 0)  
  9. #define _MX6Q_PAD_GPIO_19__ECSPI1_RDY           \  
  10.         IOMUX_PAD(0x0624, 0x0254, 4, 0x0000, 0, 0)  
  11. #define _MX6Q_PAD_GPIO_19__GPIO_4_5         \  
  12.         IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0)  
  13. #define _MX6Q_PAD_GPIO_19__ENET_TX_ER           \  
  14.         IOMUX_PAD(0x0624, 0x0254, 6, 0x0000, 0, 0)  
  15. #define _MX6Q_PAD_GPIO_19__SRC_INT_BOOT         \  
  16.         IOMUX_PAD(0x0624, 0x0254, 7, 0x0000, 0, 0) 

以上的宏定义来自imx6的linux源码的arm/arch/palt-mxc/include/mach/iomux-mx6q.h

MUX_PAD_CTRL(NO_PAD_CTRL)

这个好像是一些上拉或下拉,还有电阻的控制。具体还待研究!

参照:

http://blog.csdn.net/xnwyd/article/details/9042159

谢谢!

IMX6 GPIO的定义