<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > i.MX6 平臺的 GPIO 應用筆記

i.MX6 平臺的 GPIO 應用筆記

發(fā)布人:電子禪石 時(shí)間:2019-11-21 來(lái)源:工程師 發(fā)布文章

▋引言本文主要以FETMX6x-C平臺,Linux3.0.35內核為基礎,其他平臺也可以參考,不同平臺之間會(huì )存在差異,需自行修改適應自己的使用。

1

GPIO的通用操作



1.1 普通GPIO的使用    

在嵌入式系統中對GPIO的操作是最基本的操作。在Linux中有一個(gè)通用的GPIO操作接口。在開(kāi)發(fā)板文件系統中會(huì )有一個(gè)控制GPIO的目錄:/sys/class/gpio;linux-3.0.35內核中Documention文件夾下邊有g(shù)pio.txt文檔可以參考。

root@freescale/sys/class/gpio$ ls

export      gpiochip0    gpiochip160  gpiochip32   gpiochip96 gpiochip128  gpiochip192   gpiochip64    unexport

名稱(chēng)

描述

export

導出GPIO操作接口

unexport

撤銷(xiāo)GPIO操作接口的導出

gpiochip0

GPIO1組

gpiochip32

GPIO2組

gpiochip64

GPIO3組

gpiochip96

GPIO4組

gpiochip128

GPIO5組

gpiochip160

GPIO6組

gpiochip192

GPIO7組

其中,export和unexport為GPIO子系統的屬性文件,其余七個(gè)文件則為符號鏈接(gpiochip0,gpiochip32,gpiochip64,gpiochip96,gpiochip128,gpiochip160,gpiochip192),分別指向各自對應的GPIO組。

以gpiochip0為例,此目錄下的文件有:

root@freescale/sys/class/gpio/gpiochip0$ ls

base      label      ngpio      power      subsystem  uevent

名稱(chēng)

描述

base

GPIO組的初始編號

label

GPIO組標簽

ngpio

該組的GPIO總數

power

設備供電方面的相關(guān)信息

subsystem

符號鏈接,指向父目錄

uevent

內核與udev(自動(dòng)設備發(fā)現程序)之間的通信接口

當我們操作某個(gè)GPIO之前,需要先向export文件寫(xiě)入該GPIO編號以導出它的設備目錄。GPIO編號的計算公式如下所示:

GPIO編號=(BANK-1)*32+N

在公式中BANK為GPIO引腳所在的GPIO組編號,N則為引腳在該個(gè)BANK中的序號。以GPIO7-IO03為例,其BANK值為7,N值為3,因此排列序號為(7-1)*32+3=195。

下面介紹該目錄下的一些操作的用法。

1.1.1 GPIO編號導出

文件系統中/sys/class/gpio/export文件用于通知系統需要導出要控制的GPIO的編號:

echo195 >/sys/class/gpio/export

命令成功后生成/sys/class/gpio/gpio195目錄。如果沒(méi)有出現相應的目錄,說(shuō)明此引腳不可導出,一般這種情況是驅動(dòng)中pinmux功能配置不正確,或者配置了多種pinmux功能引起沖突導致。

1.1.2 取消GPIO編號導出

文件系統中/sys/class/gpio/unexport文件用于通知系統取消GPIO編號導出

echo195  > /sys/class/gpio/unexport

1.1.3 配置GPIO的輸入輸出方向

echoout >/sys/class/gpio/gpio195/direction

direction可接收的參數:in,out,high,low;其中high,low設置方向為輸出并將value值設置為相應的1/0。

1.1.4 查看GPIO的輸入輸出方向

cat/sys/class/gpio/gpio195/ direction

1.1.5 配置GPIO的高低電平(值為1/0)

當GPIO配置為輸出模式時(shí),可以通過(guò)設置value值設置GPIO的高低電平。

echo1 >/sys/class/gpio/value

1.1.6 查看GPIO的輸出值

cat/sys/class/gpio/gpio195/value

2

驅動(dòng)配置


2.1 修改pinmux配置  

驅動(dòng)中的主要位置:linux3.0.35/drivers/gpio/gpiolib.c

修改文件arch/arm/mach-mx6/board-mx6q_c_sabresd.h,在其中增加該引腳對應的GPIO配置,該引腳如果有其他復用配置,需要將其他復用配置去掉,只保留一種pinmux配置。內核中引腳功能定義在arch/arm/plat-mxc/include/mach/iomux-mx6q.h文件中,該文件對每個(gè)引腳的復用功能進(jìn)行了定義,有興趣的可以自己看一下。

以釋放原SD卡功能占用的部分引腳為例

修改文件arch/arm/mach-mx6/board-mx6q_c_sabresd.h,在其中增加如下定義:

/*GPIO*/

MX6Q_PAD_SD3_CLK__GPIO_7_3,

MX6Q_PAD_SD3_CMD__GPIO_7_2,

MX6Q_PAD_SD3_DAT2__GPIO_7_6,

MX6Q_PAD_SD3_DAT3__GPIO_7_7,

MX6Q_PAD_SD3_DAT4__GPIO_7_1,

MX6Q_PAD_SD3_DAT5__GPIO_7_0,

將原來(lái)的SD卡的功能注釋掉

/*USDHC3 */

/*     MX6Q_PAD_SD3_CLK__USDHC3_CLK_50MHZ,

MX6Q_PAD_SD3_CMD__USDHC3_CMD_50MHZ,

MX6Q_PAD_SD3_DAT0__USDHC3_DAT0_50MHZ,

MX6Q_PAD_SD3_DAT1__USDHC3_DAT1_50MHZ,

MX6Q_PAD_SD3_DAT2__USDHC3_DAT2_50MHZ,

MX6Q_PAD_SD3_DAT3__USDHC3_DAT3_50MHZ,

MX6Q_PAD_SD3_DAT4__USDHC3_DAT4_50MHZ,

MX6Q_PAD_SD3_DAT5__USDHC3_DAT5_50MHZ,

*/

 修改前 



 修改后 



修改完成后重新編譯內核,并將鏡像燒寫(xiě)到開(kāi)發(fā)板上進(jìn)行測試。

測試

echo195 > /sys/class/gpio/export

echoout > /sys/class/gpio/gpio195/direction

echo1 > /sys/class/gpio/gpio195/value

cat/sys/class/gpio/gpio195/value

3

Datasheet查看GPIO


3.1GPIO地址  IMX6DQRM.pdf手冊中的第28章描述的是GPIO相關(guān)的內容,手冊第二章MemoryMaps內存映射大概在215頁(yè),有關(guān)于GPIO組的映射地址:


3.2 GPIO寄存器  

數據手冊第28章中第1429頁(yè)描述的是GPIO控制的8個(gè)32位寄存器

寄存器

描述

GPIOx_DR

數據寄存器,當GPIO為輸出時(shí),可以通過(guò)寫(xiě)DR寄存器來(lái)驅動(dòng)GPIO引腳

GPIOx_GDIR

控制GPIO引腳方向

GPIOx_PSR

GPIO為輸入時(shí),從PSR寄存器讀取數據

GPIOx_ICR1

配置GPIO中斷的觸發(fā)方式,高低電平出發(fā)還是沿觸發(fā)

GPIOx_ICR2

配置GPIO中斷的觸發(fā)方式,高低電平出發(fā)還是沿觸發(fā)

GPIOx_IMR

中斷屏蔽寄存器

GPIOx_ISR

中斷狀態(tài)寄存器

GPIOx_EDGR_SEL

設置邊沿觸發(fā)方式


3.3 引腳復用  數據手冊36章IOMUXController這一章節有興趣的也可以詳細看一下或者從網(wǎng)絡(luò )上找一些相關(guān)資料了解,此處不做詳述。該章節主要描述引腳的復用配置以及一些功能的配置等,內核代碼中關(guān)于這一塊的配置在linux-3.0.35/arch/arm/plat-mxc/include/mach/iomux-mx6q.h文件中。該文件中的具體配置有興趣的可以自己看一下,一般這塊恩智浦(NXP)官方是默認配置好的,配置項的具體含義也可以從網(wǎng)上搜搜,并結合iomux-mx6q.h文件自己看看。


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>