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

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

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

GPIO系統(tǒng)的基礎(chǔ)知識解析

GReq_mcu168 ? 來源:搜狐網(wǎng) ? 作者:搜狐網(wǎng) ? 2020-09-14 11:55 ? 次閱讀

作為一個工作多年的系統(tǒng)工程師,免不了做兩件事情:培訓(xùn)新員工和給新員工分配任務(wù)。對于那些剛剛從學(xué)校出來的學(xué)生,一般在開始的時候總是分配一些非常簡單的任務(wù),例如GPIO driver、LED driver。往往CPU datasheet的關(guān)于GPIO或者IO ports的章節(jié)都是比較簡單的,非常適合剛?cè)胄械墓こ處煛km然GPIO子系統(tǒng)相關(guān)的硬件比較簡單,沒有復(fù)雜的協(xié)議,不過,對于軟件抽象而言,其分層次的軟件思想是每個嵌入式軟件工程師需要掌握的內(nèi)容。

個人更傾向使用GPIO系統(tǒng)這個名字來代替GPIO driver這個名字,GPIO driver僅僅包含了pin signal狀態(tài)控制和讀取的內(nèi)容,而GPIO系統(tǒng)包括了pin multiplexing、pin configuration、GPIO control、GPIO interrupt control等內(nèi)容。

一、GPIO相關(guān)硬件有哪些差異

嵌入式工程師總是要處理各種各樣的target board,每個target board上的GPIO總是存在不同,例如:

1、和CPU的連接方式不同

對于ARM的嵌入式硬件平臺,SOC本身可以提供大量的IO port,SOC上的GPIO controller是通過SOC的總線(AMBA)連接到CPU的。對于嵌入式系統(tǒng)而言,除了SOC的IO port,一些外設(shè)芯片也可能會提供IO port,例如:

(1)有些key controller芯片、codec或者PMU的芯片會提供I/O port

(2)有些專用的IO expander芯片可以擴(kuò)展16個或者32個GPIO

從硬件角度看,這些IO和SOC提供的那些IO完全不同,CPU和IO expander是通過I2C(也有可能是SPI等其他類型的bus)連接的,在這種情況下,訪問這些SOC之外的GPIO需要I2C的操作,而控制SOC上的GPIO只需要寫寄存器的操作。不要小看這個不同,寫一個SOC memory map的寄存器非??欤峭ㄟ^I2C來操作IO就不是那么快了,甚至,如果總線繁忙有可能阻塞當(dāng)前進(jìn)程,這種情況下,內(nèi)核同步機(jī)制必須有所區(qū)別(如果操作GPIO可能導(dǎo)致sleep,那么同步機(jī)制不能采用spinlock)。

2、訪問方式不同

SOC片內(nèi)的GPIO controller和SOC片外的IO expander的訪問當(dāng)然不一樣,不過,即便都是SOC片內(nèi)的GPIO controller,不同的ARM芯片,其訪問方式也不完全相同,例如:有些SOC的GPIO controller會提供一個寄存器來控制輸出電平。向寄存器寫1就是set high,向寄存器寫0就是set low。但是有些SOC的GPIO controller會提供兩個寄存器來控制輸出電平。向其中一個寄存器寫一就是set high,向另外一個寄存器寫一就是set low。

3、配置方式不同

即便是使用了同樣的硬件(例如都使用同樣的某款SOC),不同硬件系統(tǒng)上GPIO的配置不同。在一個系統(tǒng)上配置為輸入,在另外的系統(tǒng)上可能配置為輸出。

4、GPIO特性不同。這些特性包括:

(1)是否能觸發(fā)中斷。對一個SOC而言,并非所有的IO port都支持中斷功能,可能某些處理器只有一兩組GPIO有中斷功能。

(2)如果能夠觸發(fā)中斷,那么該GPIO是否能夠?qū)PU從sleep狀態(tài)喚醒

(3)有些有軟件可控的上拉或者下拉電阻的特性,有的GPIO不支持這種特性。在設(shè)定為輸入的時候,有的GPIO可以設(shè)定debouce的算法,有的則不可以。

5、多功能復(fù)用

有的GPIO就是單純的作為一個GPIO出現(xiàn),有些GPIO有其他的復(fù)用的功能。例如IO expander上的GPIO只能是GPIO,但是SOC上的某個GPIO除了做普通的IO pin腳,還可以是SPI上clock信號線。

二、硬件功能分類

ARM based SOC的datasheet中總有一個章節(jié)叫做GPIO controller(或者I/O ports)的章節(jié)來描述如何配置、使用SOC的引腳。雖然GPIO controller的硬件描述中充滿了大量的寄存器的描述,但是這些寄存器的功能大概分成下面三個類別:

1、有些硬件邏輯是和IO port本身的功能設(shè)定相關(guān)的,我們稱這個HW block為pin controller。軟件通過設(shè)定pin controller這個硬件單元的寄存器可以實現(xiàn):

(1)引腳功能配置。例如該I/O pin是一個普通的GPIO還是一些特殊功能引腳(例如memeory bank上CS信號)。

(2)引腳特性配置。例如pull-up/down電阻的設(shè)定,drive-strength的設(shè)定等。

2、如果一組GPIO被配置成SPI,那么這些pin腳被連接到了SPI controller,如果配置成GPIO,那么控制這些引腳的就是GPIO controller。通過訪問GPIO controller的寄存器,軟件可以:

(1)配置GPIO的方向

(2)如果是輸出,可以配置high level或者low level

(3)如果是輸入,可以獲取GPIO引腳上的電平狀態(tài)

3、如果一組gpio有中斷控制器的功能,雖然控制寄存器在datasheet中的I/O ports章節(jié)描述,但是實際上這些GPIO已經(jīng)被組織成了一個interrupt controller的硬件block,它更像是一個GPIO type的中斷控制器,通過訪問GPIO type的中斷控制器的寄存器,軟件可以:

(1)中斷的enable和disable(mask和unmask)

(2)觸發(fā)方式

(3)中斷狀態(tài)清除

三、如何通過軟件抽象來掩蓋硬件差異

傳統(tǒng)的GPIO driver是負(fù)責(zé)上面三大類的控制,而新的linux kernel中的GPIO subsystem則用三個軟件模塊來對應(yīng)上面三類硬件功能:

(1)pin control subsystem。驅(qū)動pin controller硬件的軟件子系統(tǒng)。

(2)GPIO subsystem。驅(qū)動GPIO controller硬件的軟件子系統(tǒng)。

(3)GPIO interrupt chip driver。這個模塊是作為一個interrupt subsystem中的一個底層硬件驅(qū)動模塊存在的。本文主要描述前兩個軟件模塊,具體GPIO interrupt chip driver以及interrupt subsystem請參考本站其他相關(guān)文檔。

1、pin control subsystem block diagram

下圖描述了pin control subsystem的模塊圖:

底層的pin controller driver是硬件相關(guān)的模組,初始化的時候會向pin control core模塊注冊pin control設(shè)備(通過pinctrl_register這個bootom level interface)。pin control core模塊是一個硬件無關(guān)模塊,它抽象了所有pin controller的硬件特性,僅僅從用戶(各個driver就是pin control subsystem的用戶)角度給出了top level的接口函數(shù),這樣,各個driver不需要關(guān)注pin controller的底層硬件相關(guān)的內(nèi)容。

2、GPIO subsystem block diagram

下圖描述了GPIO subsystem的模塊圖:

基本上這個軟件框架圖和pin control subsystem是一樣的,其軟件抽象的思想也是一樣的,當(dāng)然其內(nèi)部具體的實現(xiàn)不一樣,我們會在后續(xù)的文章中描述。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5060

    文章

    18980

    瀏覽量

    302249
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1189

    瀏覽量

    51847

原文標(biāo)題:嵌入式新手注意了:GPIO系統(tǒng)搞懂了沒?聽聽這位老工程師的沒錯

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    STM32 GPIO寄存器的相關(guān)知識

    在之前的STM32的GPIO理論基礎(chǔ)知識中,分別對基本結(jié)構(gòu)和工作模式進(jìn)行了詳細(xì)的介紹。 GPIO基本結(jié)構(gòu)中主要對GPIO內(nèi)部的各個功能電路逐一的進(jìn)行的分析;
    發(fā)表于 04-14 10:43 ?2694次閱讀
    STM32 <b class='flag-5'>GPIO</b>寄存器的相關(guān)<b class='flag-5'>知識</b>

    WiFi基礎(chǔ)知識解析

    一、wifi基礎(chǔ)1、詳細(xì)見如下鏈接(1)WiFi基礎(chǔ)知識解析(2)WiFi基本知識(3)11種物聯(lián)網(wǎng)協(xié)議簡介,如WiFi、藍(lán)牙、ZigBee、蜂窩等 二、wifi模塊淺析1、WiFi模塊淺析 三
    發(fā)表于 08-05 08:10

    STM32F407的系統(tǒng)bootloader基礎(chǔ)知識下載

    STM32F407的系統(tǒng)bootloader基礎(chǔ)知識下載,第28章 STM32F407的系統(tǒng)bootloader基礎(chǔ)知識本章為大家介紹STM32F407內(nèi)置的
    發(fā)表于 08-10 08:00

    LED及GPIO基礎(chǔ)知識介紹

    文章目錄實驗準(zhǔn)備一、LED及GPIO基礎(chǔ)知識二、STM32CUBEMX配置1.新建工程2.配置時鐘3.配置調(diào)試接口及時基4.配置引腳5.生成工程三、Keil編寫代碼1.配置keil2.編寫代碼并燒錄
    發(fā)表于 01-20 06:39

    電子元器件基礎(chǔ)知識大全:IC測試原理解析

    電子元器件基礎(chǔ)知識大全:IC測試原理解析      數(shù)字通信系統(tǒng)發(fā)射器由以下幾個部分構(gòu)成:    *CODEC(編碼/解碼器)
    發(fā)表于 11-12 17:17 ?2838次閱讀

    嵌入式系統(tǒng)基礎(chǔ)知識

    關(guān)于嵌入式系統(tǒng)基礎(chǔ)知識關(guān)于嵌入式系統(tǒng)基礎(chǔ)知識關(guān)于嵌入式系統(tǒng)基礎(chǔ)知識
    發(fā)表于 03-03 16:58 ?5次下載

    顯示技術(shù)基礎(chǔ)知識

    顯示技術(shù)基礎(chǔ)知識,精確解析,實用文件資源。
    發(fā)表于 05-10 17:06 ?0次下載

    智能家居弱電布線基礎(chǔ)知識解析

    智能家居弱電布線基礎(chǔ)知識解析
    發(fā)表于 01-22 21:11 ?13次下載

    電子系統(tǒng)設(shè)計的基礎(chǔ)知識

    電子系統(tǒng)設(shè)計的基礎(chǔ)知識
    發(fā)表于 12-22 10:22 ?0次下載

    什么是DCS系統(tǒng)?DCS系統(tǒng)基礎(chǔ)知識入門

    什么是DCS系統(tǒng)?DCS系統(tǒng)基礎(chǔ)知識入門
    的頭像 發(fā)表于 12-02 11:14 ?4.6w次閱讀
    什么是DCS<b class='flag-5'>系統(tǒng)</b>?DCS<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>基礎(chǔ)知識</b>入門

    STM8S_001_ GPIO基礎(chǔ)知識

    STM8S_001_GPIO基礎(chǔ)知識
    的頭像 發(fā)表于 03-20 11:09 ?3056次閱讀
    STM8S_001_ <b class='flag-5'>GPIO</b><b class='flag-5'>基礎(chǔ)知識</b>

    線性系統(tǒng)基礎(chǔ)知識

    線性系統(tǒng)基礎(chǔ)知識免費下載。
    發(fā)表于 04-15 15:02 ?6次下載

    變頻器基礎(chǔ)知識解析

    變頻器基礎(chǔ)知識解析
    發(fā)表于 11-11 11:11 ?852次閱讀

    弱電系統(tǒng)基礎(chǔ)知識培訓(xùn)

    弱電系統(tǒng)基礎(chǔ)知識培訓(xùn)弱電系統(tǒng)簡圖如下:
    發(fā)表于 05-18 09:37 ?3次下載

    EMC基礎(chǔ)知識講解解析

    EMC基礎(chǔ)知識分享
    發(fā)表于 06-30 15:37 ?11次下載