本文引用地址:http://www.eepw.com.cn/article/257110.htm11.3.1GPIO工作原理
FS2410開發板的S3C2410處理器具有117個多功能通用I/O(GPIO)埠管腳,包括GPIO8個埠組,分別為GPA(23個輸出埠)、GPB(11個輸入/輸出埠)、GPC(16個輸入/輸出埠)、GPD(16個輸入/輸出埠)、GPE(16個輸入/輸出埠)、GPF(8個輸入/輸出埠)、GPH(11個輸入/輸出埠)。根據各種系統設計的需求,通過軟體方法可以將這些埠配置成具有相應功能(例如:外部中斷或數據總線)的埠。
為了控制這些埠,S3C2410處理器為每個埠組分別提供幾種相應的控制寄存器。其中最常用的有埠配置寄存器(GPACON~GPHCON)和埠數據寄存器(GPADAT~GPHDAT)。因為大部分I/O管腳可以提供多種功能,通過配置寄存器(PnCON)設定每個管腳用於何種目的。數據寄存器的每位將對應於某個管腳上的輸入或輸出。所以通過對數據寄存器(PnDAT)的位讀寫,可以進行對每個埠的輸入或輸出。
在此主要以發光二極體(LED)和蜂鳴器為例,討論GPIO設備的驅動程序。它們的硬體驅動電路的原理圖如圖11.4所示。
圖11.4LED(左)和蜂鳴器(右)的驅動電路原理圖
在圖11.4中,可知使用S3C2410處理器的通用I/O口GPF4、GPF5、GPF6和GPF7分別直接驅動LEDD12、D11、D10以及D9,而使用GPB0埠驅動蜂鳴器。4個LED分別在對應埠(GPF4~GPF7)為低電平時發亮,而蜂鳴器在GPB0為高電平時發聲。這5個埠的數據流方向均為輸出。
在表11.15中,詳細描述了GPF的主要控制寄存器。GPB的相關寄存器的描述與此類似,具體可以參考S3C2410處理器數據手冊。
表11.15 GPF埠(GPF0-GPF7)的主要控制寄存器
寄存器
地址
R/W
功能
初始值
GPFCON
0x56000050
R/W
配置GPF埠組
0x0
GPFDAT
0x56000054
R/W
GPF埠的數據寄存器
未定義
GPFUP
0x56000058
R/W
GPF埠的取消上拉寄存器
0x0
GPFCON
位
描述
GPF7
[15:14]
00=輸入01=輸出10=EINT711=保留
GPF6
[13:12]
00=輸入01=輸出10=EINT611=保留
GPF5
[11:10]
00=輸入01=輸出10=EINT511=保留
GPF4
[9:8]
00=輸入01=輸出10=EINT411=保留
GPF3
[7:6]
00=輸入01=輸出10=EINT311=保留
GPF2
[5:4]
00=輸入01=輸出10=EINT211=保留
GPF1
[3:2]
00=輸入01=輸出10=EINT111=保留
GPF0
[1:0]
00=輸入01=輸出10=EINT011=保留
GPFDAT
位
描述
GPF[7:0]
[7:0]
每位對應於相應的埠,若埠用於輸入,則可以通過相應的位讀取數據;若埠用於輸出,則可以通過相應的位輸出數據;若埠用於其他功能,則其值無法確定。
GPFUP
位
描述
GPF[7:0]
[7:0]
0:向相應埠管腳賦予上拉(pull-up)功能
1:取消上拉功能
為了驅動LED和蜂鳴器,首先通過埠配置寄存器將5個相應寄存器配置為輸出模式。然後通過對埠數據寄存器的寫操作,實現對每個GPIO設備的控制(發亮或發聲)。在下一個小節中介紹的驅動程序中,s3c2410_gpio_cfgpin()函數和s3c2410_gpio_pullup()函數將進行對某個埠的配置,而s3c2410_gpio_setpin()函數實現向數據寄存器的某個埠的輸出。
linux相關文章:linux教程
蜂鳴器相關文章:蜂鳴器原理