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功能概括圖如圖所示。
在S5PV210中,輸出端口被分為如表所示的種類。 表
提示:GPxCON、GPxDAT、GPxPUD和GPxDRV工作在普通模式,GPxPDNCON、GPxPDNPULL工作在低功耗模式。 1.2.5 S5PV210I/O接口常用寄存器詳解 對于GPIO控制寄存器,現在來看一下每一組IO的詳細功能描述,考慮到GPIO的寄存器很多,這里只列出與后面GPIO示例有關的寄存器,如表所示。 表GPC0CON控制寄存器(可讀/可寫 Address = 0xE0200060)
GPIO數據寄存器 GPIO數據寄存器如表所示。 表GPC0DAT數據寄存器(可讀/可寫 Address = 0xE0200064)
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的亮滅。
因此,當這幾個引腳輸出高電平時發光二極管點亮;反之,發光二極管熄滅。 1.3.3 實驗內容 (1) 寄存器設置 為了實現控制LED的目的,需要通過配置GPC0CON寄存器將GPC0_3、GPC0_4設置為輸出屬性。通過設置GPC0DAT寄存器實現點亮與熄滅LED。 對于本例來說,GPC0上拉寄存器可以不用設置。 (2) 程序編寫 相關代碼如下:
/*相關GPIO端口的功能設定*/ 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等閃爍。
1.3.5 實驗現象 用FS-JTAG仿真器仿真程序,可以看到LED燈有規律的閃動。
發表評論
|