色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 >
GPIO裸機編程
時間:2018-08-09作者:華清遠見

作者:李老師,華清遠見教育科技集團講師。

GPIO控制技術是接口技術中簡單的一種。本章通過介紹S5PV210芯片的GPIO控制方法,讓讀者初步掌握控制硬件接口的方法。本章的主要內容:

GPIO功能介紹。

S5PV210芯片的GPIO控制器詳解。

S5PV210的GPIO應用。

1.1 GPIO功能介紹

首先應該理解什么是GPIO。GPIO的英文全稱為General-Purpose IO ports,也就是通用IO接口。在嵌入式系統中常常有數量眾多,但是結構卻比較簡單的外部設備/電路,對這些設備/電路,有的需要CPU為之提供控制手段,有的則需要被CPU用做輸入信號。而且,許多這樣的設備/電路只要求一位,即只要有開/關兩種狀態就夠了。比如,控制某個LED燈亮與滅,或者通過獲取某個引腳的電平屬性來達到判斷外圍設備的狀態。對這些設備/電路的控制,使用傳統的串行口或并行口都不合適。所以在微控制器芯片上一般都會提供一個“通用可編程IO接口”,即GPIO。接口至少有兩個寄存器,即“通用IO控制寄存器”與“通用IO數據寄存器”。數據寄存器的各位都直接引到芯片外部,而對這種寄存器中每一位的作用,即每一位的信號流通方向,則可以通過控制寄存器中對應位獨立地加以設置。比如,可以設置某個引腳的屬性為輸入、輸出或其他特殊功能。

在實際的MCU中,GPIO是有多種形式的。比如,有的數據寄存器可以按照位尋址,有些卻不能按照位尋址,這在編程時就要區分了。比如傳統的8051系列,就區分成可位尋址和不可位尋址兩種寄存器。另外,為了使用的方便,很多MCU的 GPIO接口除必須具備兩個標準寄存器外,還提供上拉寄存器,可以設置IO的輸出模式是高阻,還是帶上拉的電平輸出,或者不帶上拉的電平輸出。這在電路設計中,外圍電路就可以簡化不少。

1.2 S5PV210芯片的GPIO控制器詳解

1.2.1 特性

S5PV210的GPIO特性包括如下幾點:

146個可中斷通用控制I/O。

32個可控外部中斷。

237個多路復用I/O口

睡眠模式引腳狀態可控(除了GPH0、GPH1、GPH2和GPH3)。

1.2.2 GPIO分組預覽

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 –鍵盤,大支持32位的睡眠可中斷接口。

GPI:低功率I2S,PCM、低功耗PDN配置(通過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信號控制 (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中,大多數的引腳都可復用,所以必須對每個引腳進行配置。端口控制寄存器(GPnCON)定義了每個引腳的功能。

(2) 端口數據寄存器(GPA0DAT-GPJ4DAT)

如果端口被配置成了輸出端口,可以向GPnDAT的相應位寫數據。如果端口被配置成了輸入端口,可以從GPnDAT的相應位讀出數據。

(3) 端口上拉寄存器(GPA0PULL - GPJ4PULL)

端口上拉寄存器控制了每個端口組的上拉/下拉電阻的使能/禁止。根據對應位的0/1組組合,設置對應端口的上拉/下拉電阻功能是否使能。如果端口的上拉電阻被使能,無論在哪種狀態(輸入、輸出、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 標準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接口常用寄存器詳解

對于GPIO控制寄存器,現在來看一下每一組IO的詳細功能描述,考慮到GPIO的寄存器很多,這里只列出與后面GPIO示例有關的寄存器,如表所示。

表GPC0CON控制寄存器(可讀/可寫 Address = 0xE0200060)

GPC0CON 描述 初始狀態
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數據寄存器

GPIO數據寄存器如表所示。

表GPC0DAT數據寄存器(可讀/可寫 Address = 0xE0200064)

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

1.3 實驗5 GPIO控制實驗

通過第4章的介紹,讀者了解了GPIO的功能,以及S5PV210芯片GPIO控制器的配置方法。本章通過一個簡單示例說明S5PV210的GPIO接口的應用。

1.3.1 實驗目的

示例將利用S5PV210的GPC0_3、GPC0_4這2個I/O引腳控制2個LED發光二極管,使其有規律地閃爍。

1.3.2 實驗原理

如圖所示,LED1~LED2分別與GPC0_3、GPC0_4相連,通過GPC0_3、GPC0_4引腳的高低電平來控制三極管的導通性,從而控制LED的亮滅。


圖LED接線原理圖

因此,當這幾個引腳輸出高電平時發光二極管點亮;反之,發光二極管熄滅。

1.3.3 實驗內容

(1) 寄存器設置

為了實現控制LED的目的,需要通過配置GPC0CON寄存器將GPC0_3、GPC0_4設置為輸出屬性。通過設置GPC0DAT寄存器實現點亮與熄滅LED。

對于本例來說,GPC0上拉寄存器可以不用設置。

(2) 程序編寫

相關代碼如下:

/*相關GPIO端口的功能設定*/
        /*GPC0控制寄存器*/
        volatile unsigned int *GPC0CON = (volatile unsigned int *) 0xE0200060;
        /*GPC0數據寄存器*/
        volatile unsigned int *GPC0DAT = (volatile unsigned int *) 0xE0200064;

        /*延時函數的實現*/
        void delay()
        {
                int i = 0x100000;
                while (i--);
        }

        int main(void)
        {
                int i = 0;

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

                *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 實驗步驟

(1) 按照實驗1的步驟,連接好開發板及FS-JTAG仿真器,并且連接好配線。

(2) 打開串口終端并配置。

(3) 啟動開發板,在串口終端中輸入任意按鍵講開發板系統停在u-boot的位置。

(4) 打開FS-JTAG工具軟件,點擊“Connect”按鈕連接仿真器,如下圖所示即連接成功。如連接不成功請檢查連線及步驟(3)。

注意:確定FS-JTAG驅動已經安裝成功,USB線已經如第(1)步連接上。點擊“Connect”出現如想Error表示連接成功。反之,出現Info等信息,1、有可能是FS-JTAG問題。2、核心板有問題。3、大多數是eclipse工具處理Debug狀態,關閉或刪除Debug(Terminate And Remove)。

(5) 打開eclipse軟件,導入實驗目錄下的實驗4“GPIO控制實驗”。

   

(6) 選擇菜單下“Run -> Debug Configurations”,雙擊左側“Zylin Embedded debug(Native)”。

(7) 填寫此程序的elf文件到“Main”菜單下的“C/C++ Application”下。

(8) 選擇LED.elf文件

(9) 填寫GCC工具集中的GDB工具路徑到“Debugger”菜單下的“GDB debugger”下。

(10) 填寫仿真器的配置文件到“Debugger”菜單下的“GDB command file”下。

(11) 填寫初始化命令到“Commands”菜單下的“ ‘Initialize’ commands”中。

(12) 執行Debug后,eclipse進入Debug調試界面,可以看到程序停在reset的位置。

(13) 點擊全速運行,可以看到開發板LED等閃爍。


注意:Debug時只能有一項,不可以多對象存在。如圖所示:

1.3.5 實驗現象

用FS-JTAG仿真器仿真程序,可以看到LED燈有規律的閃動。


發表評論

全國咨詢電話:400-611-6270,雙休日及節假日請致電值班手機:15010390966

在線咨詢: 曹老師QQ(3337544669), 徐老師QQ(1462495461), 劉老師 QQ(3108687497)

企業培訓洽談專線:010-82600901,院校合作洽談專線:010-82600350,在線咨詢:QQ(248856300)

Copyright 2004-2018 華清遠見教育科技集團 版權所有 ,京ICP備16055225號,京公海網安備11010802025203號

主站蜘蛛池模板: 国产裸体美女视频全黄 | 日本无码精品一二三四区视频 | gogogo高清在线观看中文 | 亚一区| 亚洲2022国产成人精品无码区 | 免费做爰猛烈吃奶摸视频在线观看 | 97精品免费公开在线视频 | 国产精品丝袜黑色高跟鞋 | 亚洲a片成人无码av 手机黄色在线观看 | 一区二区三国产精华液 | 亚洲综合无码一区二区三区 | BBWBBWBBW少妇毛茸茸 | 国产精品无码素人福利免费 | 三级九九| 久久精品国产亚洲AV大全 | 日本精品免费观看 | 欧美人与动ZOZO在线播放 | 水蜜桃AV无码一区二区 | 婷婷成人综合激情在线视频播放 | 欧洲亚洲精品A片久久99动漫 | 欧美日本91精品久久久久 | 免费观看欧美成人AA片爱我多深 | 久久精品蜜芽亚洲国产AV | 蜜桃在线播放 | 西川ゆい和黑人在线播放 | 免费A级毛视频 | 免费国产黄网站在线观看动图 | 男女一边摸一边做爽爽的免费阅读 | 欧洲一卡2卡3卡4卡国产 | 中文字幕高清不卡 | 精品一区二区三区东京热 | 又粗又大又硬毛片免费看 | 日本簧片在线观看 | 欧洲性开放少妇ZOZO | 中文字幕日韩一区二区三区不卡 | 久久久只有精品 | 国产精品无码免费专区午夜 | 免费精品国自产拍在线播放 | 国产成人无码精品久久灭火器 | 国产精品自在在线午夜精华在线 | 调教小奴高潮惩罚PLAY露出 |