• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 博客專欄

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

    i.MX6 平臺的 GPIO 應用筆記

    發布人:電子禪石 時間:2019-11-21 來源:工程師 發布文章

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

    1

    GPIO的通用操作



    1.1 普通GPIO的使用    

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

    root@freescale/sys/class/gpio$ ls

    export      gpiochip0    gpiochip160  gpiochip32   gpiochip96 gpiochip128  gpiochip192   gpiochip64    unexport

    名稱

    描述

    export

    導出GPIO操作接口

    unexport

    撤銷GPIO操作接口的導出

    gpiochip0

    GPIO1組

    gpiochip32

    GPIO2組

    gpiochip64

    GPIO3組

    gpiochip96

    GPIO4組

    gpiochip128

    GPIO5組

    gpiochip160

    GPIO6組

    gpiochip192

    GPIO7組

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

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

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

    base      label      ngpio      power      subsystem  uevent

    名稱

    描述

    base

    GPIO組的初始編號

    label

    GPIO組標簽

    ngpio

    該組的GPIO總數

    power

    設備供電方面的相關信息

    subsystem

    符號鏈接,指向父目錄

    uevent

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

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

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

    在公式中BANK為GPIO引腳所在的GPIO組編號,N則為引腳在該個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目錄。如果沒有出現相應的目錄,說明此引腳不可導出,一般這種情況是驅動中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配置為輸出模式時,可以通過設置value值設置GPIO的高低電平。

    echo1 >/sys/class/gpio/value

    1.1.6 查看GPIO的輸出值

    cat/sys/class/gpio/gpio195/value

    2

    驅動配置


    2.1 修改pinmux配置  

    驅動中的主要位置: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文件中,該文件對每個引腳的復用功能進行了定義,有興趣的可以自己看一下。

    以釋放原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,

    將原來的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,

    */

     修改前 



     修改后 



    修改完成后重新編譯內核,并將鏡像燒寫到開發板上進行測試。

    測試

    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相關的內容,手冊第二章MemoryMaps內存映射大概在215頁,有關于GPIO組的映射地址:


    3.2 GPIO寄存器  

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

    寄存器

    描述

    GPIOx_DR

    數據寄存器,當GPIO為輸出時,可以通過寫DR寄存器來驅動GPIO引腳

    GPIOx_GDIR

    控制GPIO引腳方向

    GPIOx_PSR

    GPIO為輸入時,從PSR寄存器讀取數據

    GPIOx_ICR1

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

    GPIOx_ICR2

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

    GPIOx_IMR

    中斷屏蔽寄存器

    GPIOx_ISR

    中斷狀態寄存器

    GPIOx_EDGR_SEL

    設置邊沿觸發方式


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


    *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



    關鍵詞:

    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 凌云县| 新乡县| 买车| 安国市| 扶余县| 崇文区| 海林市| 建阳市| 隆化县| 长顺县| 景东| 齐齐哈尔市| 依安县| 进贤县| 溧阳市| 华池县| 驻马店市| 界首市| 桑日县| 宜君县| 廊坊市| 诸城市| 阿拉善左旗| 肃宁县| 长岛县| 苍山县| 姚安县| 昌江| 房山区| 鄂州市| 五河县| 仁寿县| 江西省| 自贡市| 五峰| 介休市| 铜梁县| 溆浦县| 霞浦县| 福泉市| 琼中|