0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

i.MX6ULL處理器GPIO寄存器配置原理及方法

CHANBAEK ? 來(lái)源:嵌入式攻城獅 ? 作者:安迪西 ? 2023-04-14 11:43 ? 次閱讀

之前的文章中介紹了新舊字符設(shè)備驅(qū)動(dòng)開(kāi)發(fā)的方式,并利用虛擬的字符設(shè)備來(lái)學(xué)習(xí)其開(kāi)發(fā)流程,沒(méi)有涉及到操作Linux開(kāi)發(fā)板上的硬件。 對(duì)硬件的操作,究其本質(zhì)最終都是要操作處理器寄存器。 因此在操作硬件之前,我們需要先了解有關(guān)GPIO的寄存器配置原理及方法

1. 認(rèn)識(shí)i. MX6ULL處理器GPIO

1.1 基本概念

以下是一些名詞縮寫(xiě)及其含義:

  • IO:Input Output,用于CPU與外界進(jìn)行信息交互
  • GPIO:General Purpose IO ports,通用IO口
  • SNVS:Secure Non-Volatile Storage 安全的非易失性存儲(chǔ)
  • IOMUX:Input Output Multiplexer 輸入/輸出多路復(fù)用器
  • IOMUXC:Input Output Multiplexer Controller 輸入/輸出多路復(fù)用控制器
  • SW:Switch 開(kāi)關(guān)

1.2 GPIO邏輯結(jié)構(gòu)

下圖為i. MX6ULL處理器的GPIO硬件結(jié)構(gòu)框圖,其中PAD1和PAD2表示i.MX6ULL芯片引出的GPIO引腳,其余部件均位于芯片內(nèi)部

圖片

上圖中各部分的功能和作用如下

PAD1 :GPIO引腳,其左側(cè)通過(guò)IOMUX復(fù)用選擇器連接到各種寄存器上

IOMUX復(fù)用選擇器:用于將芯片引腳與最左側(cè)的各種寄存器連接起來(lái)

IOMUXC復(fù)用控制器:IO通過(guò)MUX寄存器來(lái)配置復(fù)用功能,如GPIO、IIC等; 通過(guò)PAD寄存器來(lái)配置引腳屬性,如驅(qū)動(dòng)能力,是否使用上下拉電阻

Block外設(shè)功能控制塊:例如具有PWM輸出功能的引腳,它需要PWM外設(shè)的支持

GPIO外設(shè):GPIO是每個(gè)IO都有的外設(shè),是IO控制的基本功能, 如輸出高低電平、 檢測(cè)電平輸入等。 當(dāng)需要使用引腳的GPIO功能時(shí),就要配置GPIO外設(shè)中的各個(gè)寄存器

PAD2 :另一個(gè)引腳,它與PAD1有一根信號(hào)線(xiàn)連接,表示部分引腳的輸出可以作為另一個(gè)引腳的輸入

1.3 GPIO命名

i.MX6ULL處理器的GPIO被分為5組,且每組的數(shù)量不同,具體可查閱數(shù)據(jù)手冊(cè)

圖片

另外根據(jù)IO類(lèi)別,可以分為兩大類(lèi):SNVS域IO和通用域IO,這兩類(lèi)IO本質(zhì)上是一樣的

圖片

2. 配置i. MX6ULL處理器GPIO

下面以GPIO1_IO00引腳為例,介紹GPIO配置的步驟

2.1 時(shí)鐘配置

I.MX6ULL每個(gè)外設(shè)都有一個(gè)外設(shè)時(shí)鐘,使用GPIO時(shí),也必須先使能對(duì)應(yīng)的時(shí)鐘。 CCM (Clock Controller Module)時(shí)鐘控制模塊寄存器用來(lái)使能外設(shè)時(shí)鐘。 CMM一共有CCM_CCGR0~CCM_CCGR6這7個(gè)寄存器,控制著I.MX6U的所有外設(shè)時(shí)鐘開(kāi)關(guān)

以CCM_CCGR0為例,它是個(gè)32位寄存器,每2位控制一個(gè)外設(shè)的時(shí)鐘,比如 bit31:30 控制著GPIO2 的外設(shè)時(shí)鐘,兩個(gè)位就有 4 種操作方式:

圖片

若要打開(kāi)GPIO2的外設(shè)時(shí)鐘,只需要設(shè)置CCM_CCGR0的bit31和bit30為1即可,即 CCM_CCGR0=3 << 30

圖片

2.2 IO配置

配置MUX寄存器:配置復(fù)用功能

圖片

IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00寄存器地址為:0x020E005C,只用到了最低的5位,bit0~bit3就是設(shè)置復(fù)用功能的,該引腳可復(fù)用為9種不同功能的IO

配置PAD 寄存器:配置引腳屬性

圖片

IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO00寄存器地址為:0x020E02E8,只用到了低17位,用于設(shè)置速度、驅(qū)動(dòng)能力、壓擺率等

2.3 GPIO配置

上面的MUX和PAD寄存器都是配置IO的,當(dāng)把IO配置為了GPIO功能后,還需要繼續(xù)對(duì)GPIO外設(shè)的各種寄存器進(jìn)行配置

配置DR寄存器:數(shù)據(jù)寄存器,一個(gè)GPIO組最大只有32個(gè)IO,32位DR寄存器中的每一個(gè)位對(duì)應(yīng)一個(gè)GPIO

圖片

當(dāng)設(shè)置為輸出模式,向指定的位寫(xiě)入數(shù)據(jù),相應(yīng)的IO就會(huì)輸出相應(yīng)的高低電平; 當(dāng)設(shè)置為輸入模式,比如GPIO1_IO00引腳接地的話(huà),GPIO1. DR的bit0就是0

配置GDIR寄存器:方向寄存器,設(shè)置GPIO的工作方向是輸入還是輸出,每個(gè)位對(duì)應(yīng)一個(gè)IO

圖片

若要設(shè)置GPIO1_IO00為輸入,則GPIO1.GDIR=0;反之GPIO1.GDIR=1

配置PSR寄存器:狀態(tài)寄存器,每個(gè)IO對(duì)應(yīng)一個(gè)位,用于獲取對(duì)應(yīng)的GPIO的狀態(tài)

圖片

是一個(gè)只讀寄存器,功能類(lèi)似于輸入狀態(tài)下的DR寄存器

配置ICR1/ICR2寄存器:中斷控制寄存器,每?jī)晌粚?duì)應(yīng)一個(gè)GPIO,ICR1用于配置低16個(gè)GPIO,ICR2用于配置高16個(gè)GPIO

圖片

例如設(shè)置GPIO1_IO15為上升沿觸發(fā)中斷,則GPIO1.ICR1 = 2 << 30

配置IMR寄存器:中斷屏蔽寄存器,每個(gè)IO對(duì)應(yīng)一個(gè)位,用于控制GPIO的中斷使能和禁止

圖片

例如要使能GPIO1_IO00的中斷,則GPIO1.MIR=1

配置ISR寄存器:中斷狀態(tài)寄存器,每個(gè)IO對(duì)應(yīng)一個(gè)位,只要某個(gè)GPIO的中斷發(fā)生,ISR中相應(yīng)的位會(huì)被置1

圖片

可通過(guò)讀取ISR寄存器來(lái)判斷GPIO中斷是否發(fā)生,相當(dāng)于中斷標(biāo)志位。 處理完中斷后,必須清除中斷標(biāo)志位

配置EDGE_SEL寄存器:邊沿選擇寄存器,每個(gè)IO對(duì)應(yīng)一個(gè)位,用來(lái)設(shè)置邊沿中斷, 并會(huì)覆蓋ICR1和ICR2的設(shè)置

圖片

若相應(yīng)位被置1,相當(dāng)于設(shè)置了對(duì)應(yīng)GPIO雙邊沿(上升沿和下降沿)觸發(fā)。 例如,設(shè)置GPIO1.EDGE_SEL=1,則表示雙邊沿觸發(fā)中斷,無(wú)論 GFPIO1_CR1的設(shè)置為多少

3. GPIO配置總結(jié)

綜上所述,i.MX6ULL的IO作為GPIO使用,需要進(jìn)行以下幾個(gè)步驟的配置:

  • 使能GPIO對(duì)應(yīng)的時(shí)鐘
  • 配置MUX寄存器,設(shè)置IO的復(fù)用功能,使其復(fù)用為GPIO功能
  • 配置PAD寄存器,設(shè)置IO的上下拉、速度等
  • 配置GPIO的各種寄存器,設(shè)置輸入/輸出、是否使用中斷、默認(rèn)輸出電平等

裸機(jī)開(kāi)發(fā)中,需要自已定義寄存器及其地址,通常代碼如下:

/* 寄存器物理地址 */
#define CCM_CCGR1_BASE              (0X020C406C) 
#define SW_MUX_SNVS_TAMPER3_BASE    (0X02290014)
#define SW_PAD_SNVS_TAMPER3_BASE    (0X02290058)
#define GPIO5_DR_BASE               (0X020AC000)
#define GPIO5_GDIR_BASE             (0X020AC004)
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19103

    瀏覽量

    228825
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5295

    瀏覽量

    119824
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11212

    瀏覽量

    208721
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4900

    瀏覽量

    97064
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1189

    瀏覽量

    51839
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    i.MX6ULL 驅(qū)動(dòng)開(kāi)發(fā)7—按鍵輸入捕獲與GPIO輸入配置與高低電平讀取

    本篇主要介紹了i.MX6ULL的按鍵檢測(cè)的使用,主要的知識(shí)點(diǎn)是設(shè)備樹(shù)的修改,以及GPIO的輸入配置與高低電平的讀取。
    的頭像 發(fā)表于 05-24 09:11 ?6093次閱讀
    <b class='flag-5'>i.MX6ULL</b> 驅(qū)動(dòng)開(kāi)發(fā)7—按鍵輸入捕獲與<b class='flag-5'>GPIO</b>輸入<b class='flag-5'>配置</b>與高低電平讀取

    I.MX6ULL終結(jié)者開(kāi)發(fā)板裸機(jī)仿真jlink調(diào)試

    I.MX6ULL‘終結(jié)者’開(kāi)發(fā)板預(yù)留了JTAG仿真接口,并給出了開(kāi)發(fā)文檔,可以實(shí)現(xiàn)在JLINK仿真條件下的單步跟蹤、斷點(diǎn)調(diào)試等功能,使得開(kāi)發(fā)研究i.MX6ULL處理器的相關(guān)技術(shù)更加直
    發(fā)表于 07-07 10:56

    i.MX6ULL核心板資源

    `STAMP-IMX6ULL-CM是浙江啟揚(yáng)智能科技有限公司推出的基于 NXP i.MX6ULL 處理器的產(chǎn)品;i.MX 6ULL 是 NX
    發(fā)表于 07-12 17:50

    初識(shí) i.MX6ULL 寄存器

    i.MX6ULL 電氣屬性寄存器2.4 i.MX6ULL GPIO控制寄存器3. ARM 匯編指令集簡(jiǎn)介3.1
    發(fā)表于 12-20 07:13

    I.MUX6ULL的初始化方法

    拉、速度等);4.使用GPIO輸出高低電平。二、I.MX6ULL初始化1.使能時(shí)鐘CCGR0-CCGR6,這七個(gè)寄存器控制著6ull所有外設(shè)
    發(fā)表于 03-02 06:18

    ARM裸機(jī)篇之i.MX6ULL處理器資料分享

    1、i.MX6ULL處理器啟動(dòng)過(guò)程i.MX6ULL是NXP基于ARM Cortex-A7內(nèi)核的單核處理器家族,主頻可以高900MHz。i.MX6UL
    發(fā)表于 04-14 16:42

    關(guān)于i.MX6ULL配置GPIO

    處理器,它的GPIO外設(shè)應(yīng)該如何配置呢?今天小編就將通過(guò)飛凌嵌入式的OKMX6ULL-S開(kāi)發(fā)板來(lái)為大家詳細(xì)介紹。一、i.MX6ULL
    發(fā)表于 08-05 10:37

    珠海明遠(yuǎn)智睿科技聯(lián)合NXP強(qiáng)勢(shì)推出i.MX6ull核心板

    NXP I.MX6ULL是一個(gè)高性能、低功耗、高性?xún)r(jià)比處理器系列,基于ARM Cortex-A7內(nèi)核,主頻可達(dá)900MHz。i.MX 6ULL應(yīng)用
    發(fā)表于 04-24 14:10 ?543次閱讀

    飛凌i.MX6ULL開(kāi)發(fā)板的評(píng)測(cè),再次進(jìn)階擁有更高的性?xún)r(jià)比

    MCIMX6Y2開(kāi)發(fā)設(shè)計(jì),采用先進(jìn)的ARMCortex-A7內(nèi)核,運(yùn)行速度高達(dá)800MHz。i.MX6ULL應(yīng)用處理器包括一個(gè)集成的電源管理模塊,降低了外接電源的復(fù)雜性,并簡(jiǎn)化了上電時(shí)序。 i
    發(fā)表于 10-27 11:55 ?1448次閱讀
    飛凌<b class='flag-5'>i.MX6ULL</b>開(kāi)發(fā)板的評(píng)測(cè),再次進(jìn)階擁有更高的性?xún)r(jià)比

    基于NXP i.MX6ULL處理器的FETMX6ULL-C核心板

    “性?xún)r(jià)比高,功能接口豐富,資料齊全,穩(wěn)定性強(qiáng)”這是許多用戶(hù)對(duì)飛凌FETMX6ULL-S核心板的評(píng)價(jià)。作為NXP公司一顆經(jīng)典的MPU,i.MX6ULL的市場(chǎng)認(rèn)可度無(wú)需多言。而作為NXP公司的金牌
    發(fā)表于 04-11 15:05 ?1128次閱讀
    基于NXP <b class='flag-5'>i.MX6ULL</b><b class='flag-5'>處理器</b>的FETMX<b class='flag-5'>6ULL</b>-C核心板

    基于i.MX6ULL應(yīng)用處理器的FETMX6ULL-C核心板

    NXP i.MX6ULL擴(kuò)展了i.MX6系列,它是一個(gè)高性能、超高效、低成本處理器子系列,采用先進(jìn)的ARM Cortex-A7內(nèi)核,運(yùn)行速度高達(dá)800MHz。i.MX6ULL應(yīng)用
    發(fā)表于 04-29 14:37 ?1315次閱讀
    基于<b class='flag-5'>i.MX6ULL</b>應(yīng)用<b class='flag-5'>處理器</b>的FETMX<b class='flag-5'>6ULL</b>-C核心板

    i.MX6ULL】驅(qū)動(dòng)開(kāi)發(fā)4——點(diǎn)亮LED(寄存器版)

    本篇主要介紹了如何通過(guò)操作寄存器來(lái)點(diǎn)亮i.MX6ULL開(kāi)發(fā)板上的led,通過(guò)編寫(xiě)LED對(duì)應(yīng)的驅(qū)動(dòng)程序和應(yīng)用程序,實(shí)現(xiàn)程序設(shè)計(jì)的分層。
    的頭像 發(fā)表于 05-21 21:26 ?2923次閱讀
    【<b class='flag-5'>i.MX6ULL</b>】驅(qū)動(dòng)開(kāi)發(fā)4——點(diǎn)亮LED(<b class='flag-5'>寄存器</b>版)

    使用pinctrl和gpio子系統(tǒng)實(shí)現(xiàn)LED燈驅(qū)動(dòng)

    前邊已經(jīng)學(xué)了兩種點(diǎn)燈,本質(zhì)依然還是通過(guò)配置寄存器;在學(xué)習(xí)STM32的時(shí)候除了學(xué)習(xí)配置一下寄存器,基本都是使用庫(kù)來(lái)開(kāi)發(fā),那么在i.MX6ULL
    的頭像 發(fā)表于 04-03 10:17 ?1266次閱讀

    飛凌嵌入式技術(shù)帖——i.MX9352的GPIO怎么用?

    讓我們一起走近i.MX9352處理器,深入了解這位i.MX系列新成員的GPIO該如何操作,以及它與前輩i.MX6ULL
    的頭像 發(fā)表于 05-16 15:07 ?1016次閱讀
    飛凌嵌入式技術(shù)帖——<b class='flag-5'>i.MX</b>9352的<b class='flag-5'>GPIO</b>怎么用?

    基于i.MX6ULL的掉電檢測(cè)設(shè)計(jì)與軟件測(cè)試

    基于i.MX6ULL的掉電檢測(cè)設(shè)計(jì)與軟件測(cè)試基于i.MX6ULL平臺(tái)設(shè)計(jì)實(shí)現(xiàn)掉電檢測(cè)功能,首先選擇一路IO,利用IO電平變化觸發(fā)中斷,在編寫(xiě)驅(qū)動(dòng)時(shí)捕獲該路GPIO的中斷,然后在中斷響應(yīng)函數(shù)中發(fā)
    的頭像 發(fā)表于 11-09 10:40 ?798次閱讀
    基于<b class='flag-5'>i.MX6ULL</b>的掉電檢測(cè)設(shè)計(jì)與軟件測(cè)試