国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

電子工程網(wǎng)

標題: iMX6Q GPIO 功能應用操作講解 [打印本頁]

作者: 哦哈喲    時間: 2021-10-22 15:13
標題: iMX6Q GPIO 功能應用操作講解
本文以飛凌嵌入式OKMX6Q/DL-C開發(fā)板為基礎(chǔ)講解,操作系統(tǒng)為Linux3.0.35,其它品牌產(chǎn)品請參考使用,本文主要介紹了imx6Q開發(fā)板GPIO的操作,寫本文章主要是記錄日?蛻艚(jīng)常問到的一些問題,為客戶提供一些解決思路,希望可以協(xié)助客戶加速產(chǎn)品的研發(fā)速度,由于水平有限,在服務過程中所提供的任何資料和信息,都僅供參考。一、通用GPIO的使用嵌入式系統(tǒng)中對GPIO的操作是最基本的操作。在Linux中有一個通用的GPIO操作接口。在imx6Q開發(fā)板文件系統(tǒng)中會有一個控制GPIO的目錄:/sys/class/gpio;Linux-3.0.35內(nèi)核中Documention文件夾下邊有g(shù)pio.txt文檔可以參考。

root@freescale /sys/class/gpio$ lsexport       gpiochip0    gpiochip160  gpiochip32   gpiochip96gpiochip128   gpiochip192   gpiochip64    unexport


名稱描述

export
導出GPIO操作接口

unexport
撤銷GPIO操作接口的導出

gpiochip0
GPIO1組

gpiochip32
GPIO2組

gpiochip64
GPIO3組

gpiochip96
GPIO4組

gpiochip128
GPIO5組

gpiochip160
GPIO6組

gpiochip192
GPIO7組

其中,export和unexport為GPIO子系統(tǒng)的屬性文件,其余七個文件則為符號鏈接(gpiochip0,gpiochip32,gpiochip64,gpiochip96,gpiochip128,gpiochip160,gpiochip192),分別指向各自對應的GPIO組。以gpiochip0為例,此目錄下的文件有:

root@freescale /sys/class/gpio/gpiochip0$ lsbase       label      ngpio      power      subsystem  uevent


名稱
描述

base
GPIO組的初始編號

label
GPIO組標簽

ngpio
該組的GPIO總數(shù)

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

subsystem
符號鏈接,指向父目錄

uevent
內(nèi)核與udev(自動設(shè)備發(fā)現(xiàn)程序)之間的通信接口

當我們操作某個GPIO之前,需要先向export文件寫入該GPIO編號以導出它的設(shè)備目錄。GPIO編號的計算公式如下所示:
           GPIO編號=(BANK-1)*32+N
在公式中BANK為GPIO引腳所在的GPIO組編號,N則為引腳在該個BANK中的序號。以GPIO7-IO03 為例,其BANK值為7,N值為3,因此排列序號為(7-1)*32+3=195。
下面介紹該目錄下的一些操作的用法。
1、GPIO編號導出
文件系統(tǒng)中/sys/class/gpio/export文件用于通知系統(tǒng)需要導出要控制的GPIO的編號:echo 195 >/sys/class/gpio/export
命令成功后生成/sys/class/gpio/gpio195目錄。如果沒有出現(xiàn)相應的目錄,說明此引腳不可導出,一般這種情況是驅(qū)動中pinmux功能配置不正確,或者配置了多種pinmux功能引起沖突導致。
2、取消GPIO編號導出
文件系統(tǒng)中/sys/class/gpio/unexport文件 用于通知系統(tǒng)取消GPIO編號導出:echo 195  > /sys/class/gpio/unexport
3、 配置GPIO的輸入輸出方向
echo out >/sys/class/gpio/gpio195/direction
direction可接收的參數(shù):in,out,high,low;其中high,low設(shè)置方向為輸出并將value值設(shè)置為相應的1/0。
4、查看GPIO的輸入輸出方向:cat /sys/class/gpio/gpio195/ direction
5、配置GPIO的高低電平(值為1/0)
當gpio配置為輸出模式時,可以通過設(shè)置value值設(shè)置gpio的高低電平。
echo 1 >/sys/class/gpio/value
6、 查看GPIO的輸出值cat /sys/class/gpio/gpio195/value
二、修改Pinmux配置驅(qū)動中的主要位置:linux3.0.35/drivers/gpio/gpiolib.c
修改文件arch/arm/mach-mx6/board-mx6q_sabresd.h,在其中增加該引腳對應的gpio配置,該引腳如果有其他復用配置,需要將其他復用配置去掉,只保留一種pinmux配置。內(nèi)核中引腳功能定義在arch/arm/plat-mxc/include/mach/iomux-mx6q.h文件中,該文件對每個引腳的復用功能進行了定義,有興趣的可以自己看一下。
以釋放原SD卡功能占用的部分引腳為例:
修改文件arch/arm/mach-mx6/board-mx6q_c_sabresd.h,在其中增加如下定義:

/*GPIO*/3       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,       MX6Q_PAD_SD3_DAT6__GPIO_6_18,       MX6Q_PAD_SD3_DAT7__GPIO_6_17,       MX6Q_PAD_NANDF_D1__GPIO_2_1,       MX6Q_PAD_NANDF_D0__GPIO_2_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,        MX6Q_PAD_SD3_DAT6__USDHC3_DAT6_50MHZ,        MX6Q_PAD_SD3_DAT7__USDHC3_DAT7_50MHZ,        MX6Q_PAD_NANDF_D0__GPIO_2_0,                  MX6Q_PAD_NANDF_D1__GPIO_2_1,            */

修改前:

修改后:

修改完成后重新編譯內(nèi)核,并將鏡像燒寫到iMX6Q開發(fā)板上進行測試。
測試
echo 195 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio195/direction
echo 1 > /sys/class/gpio/gpio195/value
cat /sys/class/gpio/gpio195/value

三、Datasheet查看gpio1、GPIO地址
IMX6DQRM.pdf手冊中的第28章描述的是gpio相關(guān)的內(nèi)容。
手冊第二章Memory Maps內(nèi)存映射大概在215頁,有關(guān)于GPIO組的映射地址:

2、GPIO寄存器
數(shù)據(jù)手冊第28章中第1429頁描述的是GPIO控制的8個32位寄存器。
寄存器
描述

GPIOx_DR
數(shù)據(jù)寄存器,當GPIO為輸出時,可以通過寫DR寄存器來驅(qū)動gpio引腳

GPIOx_GDIR
控制GPIO引腳方向

GPIOx_PSR
當GPIO為輸入時,從PSR寄存器讀取數(shù)據(jù)

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

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

GPIOx_IMR
中斷屏蔽寄存器

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

GPIOx_EDGR_SEL
設(shè)置邊沿觸發(fā)方式
3、引腳復用
iMX6Q數(shù)據(jù)手冊36章IOMUX Controller這一章節(jié)有興趣的也可以詳細看一下或者從網(wǎng)絡(luò)上找一些相關(guān)資料了解,此處不做詳述
該章節(jié)主要描述引腳的復用配置以及一些功能的配置等,內(nèi)核代碼中關(guān)于這一塊的配置在linux-3.0.35/arch/arm/plat-mxc/include/mach/iomux-mx6q.h文件中。該文件中的具體配置有興趣的可以自己看一下,一般這塊恩智浦NXP官方是默認配置好的,配置項的具體含義也可以從網(wǎng)上搜搜,并結(jié)合iomux-mx6q.h文件自己看看。
4、參數(shù)查找配置方法
手冊第四章查找EIM_A22,可以看到需要ALT Mode是ALT5,而且Pad Settings需要配置的參數(shù)有PKE – ENABLED, 對應的Pad Registers為[SW_PAD_CTL_PAD_EIM_Addr22]。

手冊繼續(xù)搜索[SW_PAD_CTL_PAD_EIM_ADDR22] 寄存器, 可以看到寄存器的具體配置和具體的偏移地址以及上拉的配置。

手冊尋找對應的MUX Control Registers [IOMUXC_SW_MUX_CTL_PAD_EIM_ADDR22]?梢钥吹骄唧w的配置模式ALT5模式的配置值為0x05UL。

附錄:常見GPIO調(diào)試問題處理參考常見GPIO調(diào)試問題處理參考:
1.如果在GPIO導出時出現(xiàn)Device or resource busy的情況
      一般都是該引腳在內(nèi)核中配置為其他功能,需要仔細檢查內(nèi)核中引腳配置,不要被其他功能占用。
2.GPIO能夠?qū)С,但是使用的時候各種功能都不正常的情況
     這種情況一般也是引腳在內(nèi)核中配置為其他功能,需要仔細檢查內(nèi)核中引腳配置,不要被其他功能占用(一般被串口占用會有這種情況);
    還有就是檢查硬件電路,看硬件上有沒有上拉下拉這樣的硬件控制。
原文鏈接:https://www.forlinx.com/article_view_634.html





歡迎光臨 電子工程網(wǎng) (http://m.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: 天堂综合网| 欧美在线一区二区三区不卡 | 日韩成人午夜 | 日韩在线看片 | 国产99视频精品免费视频7 | 国产欧美一区二区精品性色 | 国产精品欧美在线观看 | 国产亚洲午夜精品a一区二区 | 黄色毛片在线 | www.haole018| 日本香蕉视频 | 亚洲免费观看在线视频 | 亚洲麻豆一区 | 色在线网站免费观看 | 国产精品无卡无在线播放 | 亚洲高清不卡 | 亚洲自拍偷拍视频 | 天堂网在线看 | 99视频精品全部免费观看 | 成人免费视频网站 | 91视频首页 | 女奥特曼苍月战士未删减在线 | 99re6这里只有精品 | 国产精品国产三级国产无毒 | 九九在线精品 | 国产成人性色视频 | 免费看一级做a爰片久久 | 免费黄色网站视频 | 算你色永久免费视频播放 | 特黄a三级三级三级 | 婷婷六月天在线 | 久久久久久久久一级毛片 | 国产成人午夜精品5599 | 四虎影视在线观看永久地址 | 精品国产高清不卡毛片 | 黄视频网站观看 | 亚洲黄色一级毛片 | 99精品一区二区三区 | 国产一区亚洲二区 | se97se成人亚洲网站 | 国产精品欧美一区喷水 |