can使能上拉 gpio_IMX6ULL 的 GPIO 操作方法
來(lái)源:百問網(wǎng)
作者:韋東山
本文字?jǐn)?shù):1652,閱讀時(shí)長(zhǎng):4分鐘
- CCM: Clock Controller Module (時(shí)鐘控制模塊)
- IOMUXC : IOMUX Controller,IO 復(fù)用控制器
- GPIO: General-purpose input/output,通用的輸入輸出口
1、IMX6ULL 的 GPIO 模塊結(jié)構(gòu)
參考資料:芯片手冊(cè)《Chapter 28: General Purpose Input/Output (GPIO)》
有 5 組 GPIO(GPIO1~GPIO5),每組引腳最多有 32 個(gè),但是可能實(shí)際上并沒有那么多。
- GPIO1 有 32 個(gè)引腳:GPIO1_IO0~GPIO1_IO31;
- GPIO2 有 22 個(gè)引腳:GPIO2_IO0~GPIO2_IO21;
- GPIO3 有 29 個(gè)引腳:GPIO3_IO0~GPIO3_IO28;
- GPIO4 有 29 個(gè)引腳:GPIO4_IO0~GPIO4_IO28;
- GPIO5 有 12 個(gè)引腳:GPIO5_IO0~GPIO5_IO11;
GPIO 的控制涉及 4 大模塊:CCM、IOMUXC、GPIO 模塊本身,框圖如下:
2、CCM 用于設(shè)置是否向 GPIO 模塊提供時(shí)鐘
參考資料:芯片手冊(cè)《Chapter 18: Clock Controller Module (CCM)》
GPIOx 要用 CCM_CCGRy 寄存器中的 2 位來(lái)決定該組 GPIO 是否使能。哪組 GPIO 用哪個(gè) CCM_CCGR 寄 存器來(lái)設(shè)置,請(qǐng)看上圖紅框部分。
CCM_CCGR 寄存器中某 2 位的取值含義如下:
① 00:該 GPIO 模塊全程被關(guān)閉
② 01:該 GPIO 模塊在 CPU run mode 情況下是使能的;在 WAIT 或 STOP 模式下,關(guān)閉
③ 10:保留
④ 11:該 GPIO 模塊全程使能
GPIO2 時(shí)鐘控制:
GPIO1、GPIO5 時(shí)鐘控制:
GPIO3 時(shí)鐘控制:
GPIO4 時(shí)鐘控制:
3、IOMUXC:引腳的模式(Mode、功能)
參考資料:芯片手冊(cè)《Chapter 32: IOMUX Controller (IOMUXC)》。
對(duì)于某個(gè)/某組引腳,IOMUXC 中有 2 個(gè)寄存器用來(lái)設(shè)置它:
① 選擇功能:
IOMUXC_SW_MUX_CTL_PAD_ :Mux pad xxx,選擇某個(gè) pad 的功能
IOMUXC_SW_MUX_CTL_GRP_:Mux grp xxx,選擇某組引腳的功能
某個(gè)引腳,或是某組預(yù)設(shè)的引腳,都有 8 個(gè)可選的模式(alternate (ALT) MUX_MODE)。
比如:
② 設(shè)置上下拉電阻等參數(shù):
IOMUXC_SW_PAD_CTL_PAD_:pad pad xxx,設(shè)置某個(gè) pad 的參數(shù)
IOMUXC_SW_PAD_CTL_GRP_:pad grp xxx,設(shè)置某組引腳的參數(shù)
比如:
4、GPIO 模塊內(nèi)部
我們暫時(shí)只需要關(guān)心 3 個(gè)寄存器:
① GPIOx_GDIR:設(shè)置引腳方向,每位對(duì)應(yīng)一個(gè)引腳,1-output,0-input
② GPIOx_DR:設(shè)置輸出引腳的電平,每位對(duì)應(yīng)一個(gè)引腳,1-高電平,0-低電平
怎么編程
5、讀 GPIO
翻譯一下:
① 設(shè)置 CCM_CCGRx 寄存器中某位使能對(duì)應(yīng)的 GPIO 模塊 // 默認(rèn)是使能的,上圖省略了
② 設(shè)置 IOMUX 來(lái)選擇引腳用于 GPIO
③ 設(shè)置 GPIOx_GDIR 中某位為 0,把該引腳設(shè)置為輸入功能
④ 讀 GPIOx_DR 或 GPIOx_PSR 得到某位的值(讀 GPIOx_DR 返回的是 GPIOx_PSR 的值)
6、寫 GPIO
翻譯一下:
① 設(shè)置 CCM_CCGRx 寄存器中某位使能對(duì)應(yīng)的 GPIO 模塊 // 默認(rèn)是使能的,上圖省略了
② 設(shè)置 IOMUX 來(lái)選擇引腳用于 GPIO
③ 設(shè)置 GPIOx_GDIR 中某位為 1,把該引腳設(shè)置為輸出功能
④ 寫 GPIOx_DR 某位的值
需要注意的是,你可以設(shè)置該引腳的 loopback 功能,這樣就可以從 GPIOx_PSR 中讀到引腳的有實(shí) 電平;你從 GPIOx_DR 中讀回的只是上次設(shè)置的值,它并不能反應(yīng)引腳的真實(shí)電平,比如可能因?yàn)橛布?故障導(dǎo)致該引腳跟地短路了,你通過設(shè)置 GPIOx_DR 讓它輸出高電平并不會(huì)起效果。
「新品首發(fā)」STM32MP157開發(fā)板火爆預(yù)售!首批僅300套
點(diǎn)擊“了解更多”相關(guān)章節(jié)
總結(jié)
以上是生活随笔為你收集整理的can使能上拉 gpio_IMX6ULL 的 GPIO 操作方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本田将推新车:电动、三个轮
- 下一篇: 开机cpu风扇声音大_联想拯救者R720