GPIO裸機(jī)編程
時(shí)間:2018-08-09作者:華清遠(yuǎn)見(jiàn)
作者:李老師,華清遠(yuǎn)見(jiàn)教育科技集團(tuán)講師。 GPIO控制技術(shù)是接口技術(shù)中簡(jiǎn)單的一種。本章通過(guò)介紹S5PV210芯片的GPIO控制方法,讓讀者初步掌握控制硬件接口的方法。本章的主要內(nèi)容: GPIO功能介紹。 S5PV210芯片的GPIO控制器詳解。 S5PV210的GPIO應(yīng)用。 1.1 GPIO功能介紹 首先應(yīng)該理解什么是GPIO。GPIO的英文全稱為General-Purpose IO ports,也就是通用IO接口。在嵌入式系統(tǒng)中常常有數(shù)量眾多,但是結(jié)構(gòu)卻比較簡(jiǎn)單的外部設(shè)備/電路,對(duì)這些設(shè)備/電路,有的需要CPU為之提供控制手段,有的則需要被CPU用做輸入信號(hào)。而且,許多這樣的設(shè)備/電路只要求一位,即只要有開(kāi)/關(guān)兩種狀態(tài)就夠了。比如,控制某個(gè)LED燈亮與滅,或者通過(guò)獲取某個(gè)引腳的電平屬性來(lái)達(dá)到判斷外圍設(shè)備的狀態(tài)。對(duì)這些設(shè)備/電路的控制,使用傳統(tǒng)的串行口或并行口都不合適。所以在微控制器芯片上一般都會(huì)提供一個(gè)“通用可編程IO接口”,即GPIO。接口至少有兩個(gè)寄存器,即“通用IO控制寄存器”與“通用IO數(shù)據(jù)寄存器”。數(shù)據(jù)寄存器的各位都直接引到芯片外部,而對(duì)這種寄存器中每一位的作用,即每一位的信號(hào)流通方向,則可以通過(guò)控制寄存器中對(duì)應(yīng)位獨(dú)立地加以設(shè)置。比如,可以設(shè)置某個(gè)引腳的屬性為輸入、輸出或其他特殊功能。 在實(shí)際的MCU中,GPIO是有多種形式的。比如,有的數(shù)據(jù)寄存器可以按照位尋址,有些卻不能按照位尋址,這在編程時(shí)就要區(qū)分了。比如傳統(tǒng)的8051系列,就區(qū)分成可位尋址和不可位尋址兩種寄存器。另外,為了使用的方便,很多MCU的 GPIO接口除必須具備兩個(gè)標(biāo)準(zhǔn)寄存器外,還提供上拉寄存器,可以設(shè)置IO的輸出模式是高阻,還是帶上拉的電平輸出,或者不帶上拉的電平輸出。這在電路設(shè)計(jì)中,外圍電路就可以簡(jiǎn)化不少。 1.2 S5PV210芯片的GPIO控制器詳解 1.2.1 特性 S5PV210的GPIO特性包括如下幾點(diǎn): 146個(gè)可中斷通用控制I/O。 32個(gè)可控外部中斷。 237個(gè)多路復(fù)用I/O口 睡眠模式引腳狀態(tài)可控(除了GPH0、GPH1、GPH2和GPH3)。 1.2.2 GPIO分組預(yù)覽 GPA0:8 in/out port – 2xUART 帶控制流 GPA1:4 in/out port – 2xUART 不帶控制流或1xUART 帶控制流。 GPB:8 in/out port – 2x SPI總線接口。 GPC0:5 in/out port – I2S總線接口,PCM接口,AC97接口。 GPC1:5 in/out port – I2S總線接口,SPDIF接口,LCD_FRM接口。 GPD0:4 in/out port –PWM接口。 GPD1:6 in/out port – 3xI2C總線接口,PWM接口,IEM接口。 GPE0,1:13in/out port –攝像頭接口。 GPF0,1,2,3:30 in/out port – LCD 接口。 GPG0,1,2,3:28 in/out port – 4xMMC通道。 GPH0,1,2,3:32 in/out port –鍵盤(pán),大支持32位的睡眠可中斷接口。 GPI:低功率I2S,PCM、低功耗PDN配置(通過(guò)AUDIO_SS PDN寄存器配置)。 GPJ0,1,2,3,4:35 in/out port–Modem IF, CAMIF, CFCON, KEYPAD, SROM ADDR[22:16] MP0_1,2,3: 20 in/out port – EBI信號(hào)控制 (SROM, NF, OneNAND) MP0_4,5,6,7: 32 in/out memory port – EBI MP1_0~8: 71 DRAM1 ports MP2_0~8: 71 DRAM2 ports ETC0, ETC1, ETC2, ETC4(ETC3保留): 28 in/out ETC ports - JTAG, Operating Mode, RESET, CLOCK 1.2.3 S5PV210的GPIO常用寄存器分類 (1) 端口控制寄存器(GPA0CON-GPJ4CON) 在S5PV210中,大多數(shù)的引腳都可復(fù)用,所以必須對(duì)每個(gè)引腳進(jìn)行配置。端口控制寄存器(GPnCON)定義了每個(gè)引腳的功能。 (2) 端口數(shù)據(jù)寄存器(GPA0DAT-GPJ4DAT) 如果端口被配置成了輸出端口,可以向GPnDAT的相應(yīng)位寫(xiě)數(shù)據(jù)。如果端口被配置成了輸入端口,可以從GPnDAT的相應(yīng)位讀出數(shù)據(jù)。 (3) 端口上拉寄存器(GPA0PULL - GPJ4PULL) 端口上拉寄存器控制了每個(gè)端口組的上拉/下拉電阻的使能/禁止。根據(jù)對(duì)應(yīng)位的0/1組組合,設(shè)置對(duì)應(yīng)端口的上拉/下拉電阻功能是否使能。如果端口的上拉電阻被使能,無(wú)論在哪種狀態(tài)(輸入、輸出、DATAn、EINTn等)下,上拉電阻都起作用。 1.2.4 GPIO功能描述 GPIO功能概括圖如圖所示。
在S5PV210中,輸出端口被分為如表所示的種類。 表
提示:GPxCON、GPxDAT、GPxPUD和GPxDRV工作在普通模式,GPxPDNCON、GPxPDNPULL工作在低功耗模式。 1.2.5 S5PV210I/O接口常用寄存器詳解 對(duì)于GPIO控制寄存器,現(xiàn)在來(lái)看一下每一組IO的詳細(xì)功能描述,考慮到GPIO的寄存器很多,這里只列出與后面GPIO示例有關(guān)的寄存器,如表所示。 表GPC0CON控制寄存器(可讀/可寫(xiě) Address = 0xE0200060)
GPIO數(shù)據(jù)寄存器 GPIO數(shù)據(jù)寄存器如表所示。 表GPC0DAT數(shù)據(jù)寄存器(可讀/可寫(xiě) Address = 0xE0200064)
1.3 實(shí)驗(yàn)5 GPIO控制實(shí)驗(yàn) 通過(guò)第4章的介紹,讀者了解了GPIO的功能,以及S5PV210芯片GPIO控制器的配置方法。本章通過(guò)一個(gè)簡(jiǎn)單示例說(shuō)明S5PV210的GPIO接口的應(yīng)用。 1.3.1 實(shí)驗(yàn)?zāi)康?/strong> 示例將利用S5PV210的GPC0_3、GPC0_4這2個(gè)I/O引腳控制2個(gè)LED發(fā)光二極管,使其有規(guī)律地閃爍。 1.3.2 實(shí)驗(yàn)原理 如圖所示,LED1~LED2分別與GPC0_3、GPC0_4相連,通過(guò)GPC0_3、GPC0_4引腳的高低電平來(lái)控制三極管的導(dǎo)通性,從而控制LED的亮滅。
因此,當(dāng)這幾個(gè)引腳輸出高電平時(shí)發(fā)光二極管點(diǎn)亮;反之,發(fā)光二極管熄滅。 1.3.3 實(shí)驗(yàn)內(nèi)容 (1) 寄存器設(shè)置 為了實(shí)現(xiàn)控制LED的目的,需要通過(guò)配置GPC0CON寄存器將GPC0_3、GPC0_4設(shè)置為輸出屬性。通過(guò)設(shè)置GPC0DAT寄存器實(shí)現(xiàn)點(diǎn)亮與熄滅LED。 對(duì)于本例來(lái)說(shuō),GPC0上拉寄存器可以不用設(shè)置。 (2) 程序編寫(xiě) 相關(guān)代碼如下:
/*相關(guān)GPIO端口的功能設(shè)定*/ 1.3.4 實(shí)驗(yàn)步驟 (1) 按照實(shí)驗(yàn)1的步驟,連接好開(kāi)發(fā)板及FS-JTAG仿真器,并且連接好配線。
(2) 打開(kāi)串口終端并配置。
(3) 啟動(dòng)開(kāi)發(fā)板,在串口終端中輸入任意按鍵講開(kāi)發(fā)板系統(tǒng)停在u-boot的位置。
(4) 打開(kāi)FS-JTAG工具軟件,點(diǎn)擊“Connect”按鈕連接仿真器,如下圖所示即連接成功。如連接不成功請(qǐng)檢查連線及步驟(3)。
注意:確定FS-JTAG驅(qū)動(dòng)已經(jīng)安裝成功,USB線已經(jīng)如第(1)步連接上。點(diǎn)擊“Connect”出現(xiàn)如想Error表示連接成功。反之,出現(xiàn)Info等信息,1、有可能是FS-JTAG問(wèn)題。2、核心板有問(wèn)題。3、大多數(shù)是eclipse工具處理Debug狀態(tài),關(guān)閉或刪除Debug(Terminate And Remove)。
(5) 打開(kāi)eclipse軟件,導(dǎo)入實(shí)驗(yàn)?zāi)夸浵碌膶?shí)驗(yàn)4“GPIO控制實(shí)驗(yàn)”。
(6) 選擇菜單下“Run -> Debug Configurations”,雙擊左側(cè)“Zylin Embedded debug(Native)”。
(7) 填寫(xiě)此程序的elf文件到“Main”菜單下的“C/C++ Application”下。
(8) 選擇LED.elf文件
(9) 填寫(xiě)GCC工具集中的GDB工具路徑到“Debugger”菜單下的“GDB debugger”下。
(10) 填寫(xiě)仿真器的配置文件到“Debugger”菜單下的“GDB command file”下。
(11) 填寫(xiě)初始化命令到“Commands”菜單下的“ ‘Initialize’ commands”中。
(12) 執(zhí)行Debug后,eclipse進(jìn)入Debug調(diào)試界面,可以看到程序停在reset的位置。
(13) 點(diǎn)擊全速運(yùn)行,可以看到開(kāi)發(fā)板LED等閃爍。
1.3.5 實(shí)驗(yàn)現(xiàn)象 用FS-JTAG仿真器仿真程序,可以看到LED燈有規(guī)律的閃動(dòng)。
發(fā)表評(píng)論
|
全國(guó)咨詢電話:400-611-6270,雙休日及節(jié)假日請(qǐng)致電值班手機(jī):15010390966
在線咨詢: 曹老師QQ(3337544669), 徐老師QQ(1462495461), 劉老師 QQ(3108687497)
企業(yè)培訓(xùn)洽談專線:010-82600901,院校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)
Copyright 2004-2018 華清遠(yuǎn)見(jiàn)教育科技集團(tuán) 版權(quán)所有 ,京ICP備16055225號(hào),京公海網(wǎng)安備11010802025203號(hào)