1. 程式人生 > >飛思卡爾IMX6處理器的GPIO配置方式

飛思卡爾IMX6處理器的GPIO配置方式

在linux或android系統中,假如我們要配置飛思卡爾IMX6處理器的GPIO管腳,比如是GPIO_19這個管腳,那麼要像這樣:

#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)

這個IOMUX_PAD巨集是定義GPIO的關鍵巨集,其原型為:

#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進位制)

_mux_ctrl_ofs

MUX控制暫存器的偏移地址(16進位制), 用於選擇引腳的功能

_mux_mode

MUX模式,bit0~3,範圍0~7

_select_input_ofs   

SELECT_INPUT暫存器偏移地址(16進位制)

_select_input 

Daisy Chain模式, bit0~1,範圍0~3

_pad_ctrl

bits to be set in register _pad_ctrl_ofs for configuration selection

具體的含義要結合IMX6資料手冊【Chapter 36 IMOUX Controller(IOMUXC)】的內容。

以下就GPIO_19這個管腳的配置進行說明:

1、_pad_ctrl_ofs

找到資料手冊page 2433:

從上圖可知:_pad_ctrl_ofs = 0x624

2、_mux_ctrl_ofs、_mux_mode

找到資料手冊page 2055的內容:

如上圖,_mux_ctrl_ofs取值為0x254,_mux_mode範圍為000~110

只有_mux_mode = 0時,_select_input_ofs和_select_input才有效,其餘時候_select_input_ofs和_select_input 都為0。

3、_select_input_of、_select_input

當_mux_mode = 0時,_select_input_ofs的取值需參考資料手冊page 2654:

此時_select_input_ofs=0x8e8,_select_input=0x1

4、_pad_ctrl

_pad_ctrl一般取值為0

綜上所述,GPIO_19的配置巨集定義如下:

#define _MX6Q_PAD_GPIO_19__KPP_COL_5			\
		IOMUX_PAD(0x0624, 0x0254, 0, 0x08E8, 1, 0)
#define _MX6Q_PAD_GPIO_19__ENET_1588_EVENT0_OUT		\
		IOMUX_PAD(0x0624, 0x0254, 1, 0x0000, 0, 0)
#define _MX6Q_PAD_GPIO_19__SPDIF_OUT1			\
		IOMUX_PAD(0x0624, 0x0254, 2, 0x0000, 0, 0)
#define _MX6Q_PAD_GPIO_19__CCM_CLKO			\
		IOMUX_PAD(0x0624, 0x0254, 3, 0x0000, 0, 0)
#define _MX6Q_PAD_GPIO_19__ECSPI1_RDY			\
		IOMUX_PAD(0x0624, 0x0254, 4, 0x0000, 0, 0)
#define _MX6Q_PAD_GPIO_19__GPIO_4_5			\
		IOMUX_PAD(0x0624, 0x0254, 5, 0x0000, 0, 0)
#define _MX6Q_PAD_GPIO_19__ENET_TX_ER			\
		IOMUX_PAD(0x0624, 0x0254, 6, 0x0000, 0, 0)
#define _MX6Q_PAD_GPIO_19__SRC_INT_BOOT			\
		IOMUX_PAD(0x0624, 0x0254, 7, 0x0000, 0, 0)

以上的巨集定義來自imx6的linux原始碼的arm/arch/palt-mxc/include/mach/iomux-mx6q.h