国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 >
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功能概括圖如圖所示。


圖 GPIO功能概括圖

在S5PV210中,輸出端口被分為如表所示的種類。

I/O類型 I/O端口 描述
A GPA0, GPA1, GPC0, GPC1, GPD0, GPD1, GPE0, GPE1, GPF0, GPF1, GPF2, GPF3, GPH0, GPH1, GPH2, GPH3, GPI, GPJ0, GPJ1, GPJ2, GPJ3, GPJ4 標(biāo)準(zhǔn)I/O
(3.3V I/O)
OSC_A ETC4[5](XrtcXTI/XrtcXTO) 快速I/O (3.3V I/O)
C MP1,MP2 DRAM I/O (1.8V I/O)

提示: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)

GPC0CON 描述 初始狀態(tài)
GPC0CON[4] [19:16] 0000 = 輸入,0001 = 輸出, 0010 = I2S_1_SDO,0011 = PCM_1_SOUT,
0100 = AC97SDO,0101 ~ 1110 = 保留, 1111 = GPC0_INT[4]
0000
GPC0CON[3] [15:12] 0000 = 輸入,? 0001 = 輸出,? 0010 = I2S_1_SDI ,? 0011 = PCM_1_SIN
0100 = AC97SDI,? 0101 ~ 1110 = Reserved ,? 1111 = GPC0_INT[3]
0000
GPC0CON[2] [11:8] 0000 = 輸入,? 0001 = 輸出,? 0010 = I2S_1_LRCK ,? 0011 = PCM_1_FSYNC
0100 = AC97SYNC ,? 0101 ~ 1110 = Reserved ,? 1111 = GPC0_INT[2]
0000
GPC0CON[1] [7:4] 0000 = 輸入,? 0001 = 輸出,? 0010 = I2S_1_CDCLK ,? 0011 = PCM_1_EXTCLK
0100 = AC97RESETn ,? 0101 ~ 1110 = Reserved ,? 1111 = GPC0_INT[1]
0000
GPC0CON[0] [3:0] 0000 = 輸入,? 0001 = 輸出,? 0010 = I2S_1_SCLK ,? 0011 = PCM_1_SCLK
0100 = AC97BITCLK ,? 0101 ~ 1110 = Reserved ,? 1111 = GPC0_INT[0]
0000

GPIO數(shù)據(jù)寄存器

GPIO數(shù)據(jù)寄存器如表所示。

表GPC0DAT數(shù)據(jù)寄存器(可讀/可寫(xiě) Address = 0xE0200064)

GPC0CON 描述 初始狀態(tài)
GPC0DAT[4:0] [4:0] 該寄存器決定了輸入或者輸出的電平狀態(tài) 0x00

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的亮滅。


圖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è)定*/
        /*GPC0控制寄存器*/
        volatile unsigned int *GPC0CON = (volatile unsigned int *) 0xE0200060;
        /*GPC0數(shù)據(jù)寄存器*/
        volatile unsigned int *GPC0DAT = (volatile unsigned int *) 0xE0200064;

        /*延時(shí)函數(shù)的實(shí)現(xiàn)*/
        void delay()
        {
                int i = 0x100000;
                while (i--);
        }

        int main(void)
        {
                int i = 0;

                /* GPC0CON:GPC0CON[4]、GPC0CON[3]引腳設(shè)為輸出模式 */

                *GPC0CON &= ~0xff000;
                *GPC0CON |= 0x11000;

                while (1)
                {
                        /*
                        * i's bit3 => GPC0DAT[3] => GPG3_1 => LED1
                        * i's bit4 => GPC0DAT[4] => GPG3_2 => LED2
                        */
                        *GPC0DAT &= ~(3 << 3);
                        *GPC0DAT |= i << 3;
                        i++;
                        if (i == 16)
                        i = 0;
                        delay();
                }
                return 0;
        }

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等閃爍。


注意:Debug時(shí)只能有一項(xiàng),不可以多對(duì)象存在。如圖所示:

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)