嵌入式Linux設(shè)備驅(qū)動(dòng)開發(fā)之:GPIO驅(qū)動(dòng)程序?qū)嵗?/h1>
本文引用地址:http://www.ex-cimer.com/article/257110.htm11.3GPIO驅(qū)動(dòng)程序實(shí)例
11.3.1GPIO工作原理
FS2410開發(fā)板的S3C2410處理器具有117個(gè)多功能通用I/O(GPIO)端口管腳,包括GPIO8個(gè)端口組,分別為GPA(23個(gè)輸出端口)、GPB(11個(gè)輸入/輸出端口)、GPC(16個(gè)輸入/輸出端口)、GPD(16個(gè)輸入/輸出端口)、GPE(16個(gè)輸入/輸出端口)、GPF(8個(gè)輸入/輸出端口)、GPH(11個(gè)輸入/輸出端口)。根據(jù)各種系統(tǒng)設(shè)計(jì)的需求,通過軟件方法可以將這些端口配置成具有相應(yīng)功能(例如:外部中斷或數(shù)據(jù)總線)的端口。
為了控制這些端口,S3C2410處理器為每個(gè)端口組分別提供幾種相應(yīng)的控制寄存器。其中最常用的有端口配置寄存器(GPACON~GPHCON)和端口數(shù)據(jù)寄存器(GPADAT~GPHDAT)。因?yàn)榇蟛糠諭/O管腳可以提供多種功能,通過配置寄存器(PnCON)設(shè)定每個(gè)管腳用于何種目的。數(shù)據(jù)寄存器的每位將對應(yīng)于某個(gè)管腳上的輸入或輸出。所以通過對數(shù)據(jù)寄存器(PnDAT)的位讀寫,可以進(jìn)行對每個(gè)端口的輸入或輸出。
在此主要以發(fā)光二極管(LED)和蜂鳴器為例,討論GPIO設(shè)備的驅(qū)動(dòng)程序。它們的硬件驅(qū)動(dòng)電路的原理圖如圖11.4所示。
圖11.4LED(左)和蜂鳴器(右)的驅(qū)動(dòng)電路原理圖
在圖11.4中,可知使用S3C2410處理器的通用I/O口GPF4、GPF5、GPF6和GPF7分別直接驅(qū)動(dòng)LEDD12、D11、D10以及D9,而使用GPB0端口驅(qū)動(dòng)蜂鳴器。4個(gè)LED分別在對應(yīng)端口(GPF4~GPF7)為低電平時(shí)發(fā)亮,而蜂鳴器在GPB0為高電平時(shí)發(fā)聲。這5個(gè)端口的數(shù)據(jù)流方向均為輸出。
在表11.15中,詳細(xì)描述了GPF的主要控制寄存器。GPB的相關(guān)寄存器的描述與此類似,具體可以參考S3C2410處理器數(shù)據(jù)手冊。
表11.15 GPF端口(GPF0-GPF7)的主要控制寄存器
寄存器
地址
R/W
功能
初始值
GPFCON
0x56000050
R/W
配置GPF端口組
0x0
GPFDAT
0x56000054
R/W
GPF端口的數(shù)據(jù)寄存器
未定義
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]
每位對應(yīng)于相應(yīng)的端口,若端口用于輸入,則可以通過相應(yīng)的位讀取數(shù)據(jù);若端口用于輸出,則可以通過相應(yīng)的位輸出數(shù)據(jù);若端口用于其他功能,則其值無法確定。
GPFUP
位
描述
GPF[7:0]
[7:0]
0:向相應(yīng)端口管腳賦予上拉(pull-up)功能
1:取消上拉功能
為了驅(qū)動(dòng)LED和蜂鳴器,首先通過端口配置寄存器將5個(gè)相應(yīng)寄存器配置為輸出模式。然后通過對端口數(shù)據(jù)寄存器的寫操作,實(shí)現(xiàn)對每個(gè)GPIO設(shè)備的控制(發(fā)亮或發(fā)聲)。在下一個(gè)小節(jié)中介紹的驅(qū)動(dòng)程序中,s3c2410_gpio_cfgpin()函數(shù)和s3c2410_gpio_pullup()函數(shù)將進(jìn)行對某個(gè)端口的配置,而s3c2410_gpio_setpin()函數(shù)實(shí)現(xiàn)向數(shù)據(jù)寄存器的某個(gè)端口的輸出。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
linux相關(guān)文章:linux教程
蜂鳴器相關(guān)文章:蜂鳴器原理
11.3GPIO驅(qū)動(dòng)程序實(shí)例
11.3.1GPIO工作原理
FS2410開發(fā)板的S3C2410處理器具有117個(gè)多功能通用I/O(GPIO)端口管腳,包括GPIO8個(gè)端口組,分別為GPA(23個(gè)輸出端口)、GPB(11個(gè)輸入/輸出端口)、GPC(16個(gè)輸入/輸出端口)、GPD(16個(gè)輸入/輸出端口)、GPE(16個(gè)輸入/輸出端口)、GPF(8個(gè)輸入/輸出端口)、GPH(11個(gè)輸入/輸出端口)。根據(jù)各種系統(tǒng)設(shè)計(jì)的需求,通過軟件方法可以將這些端口配置成具有相應(yīng)功能(例如:外部中斷或數(shù)據(jù)總線)的端口。
為了控制這些端口,S3C2410處理器為每個(gè)端口組分別提供幾種相應(yīng)的控制寄存器。其中最常用的有端口配置寄存器(GPACON~GPHCON)和端口數(shù)據(jù)寄存器(GPADAT~GPHDAT)。因?yàn)榇蟛糠諭/O管腳可以提供多種功能,通過配置寄存器(PnCON)設(shè)定每個(gè)管腳用于何種目的。數(shù)據(jù)寄存器的每位將對應(yīng)于某個(gè)管腳上的輸入或輸出。所以通過對數(shù)據(jù)寄存器(PnDAT)的位讀寫,可以進(jìn)行對每個(gè)端口的輸入或輸出。
在此主要以發(fā)光二極管(LED)和蜂鳴器為例,討論GPIO設(shè)備的驅(qū)動(dòng)程序。它們的硬件驅(qū)動(dòng)電路的原理圖如圖11.4所示。
圖11.4LED(左)和蜂鳴器(右)的驅(qū)動(dòng)電路原理圖
在圖11.4中,可知使用S3C2410處理器的通用I/O口GPF4、GPF5、GPF6和GPF7分別直接驅(qū)動(dòng)LEDD12、D11、D10以及D9,而使用GPB0端口驅(qū)動(dòng)蜂鳴器。4個(gè)LED分別在對應(yīng)端口(GPF4~GPF7)為低電平時(shí)發(fā)亮,而蜂鳴器在GPB0為高電平時(shí)發(fā)聲。這5個(gè)端口的數(shù)據(jù)流方向均為輸出。
在表11.15中,詳細(xì)描述了GPF的主要控制寄存器。GPB的相關(guān)寄存器的描述與此類似,具體可以參考S3C2410處理器數(shù)據(jù)手冊。
表11.15 GPF端口(GPF0-GPF7)的主要控制寄存器
寄存器 | 地址 | R/W | 功能 | 初始值 | |
GPFCON | 0x56000050 | R/W | 配置GPF端口組 | 0x0 | |
GPFDAT | 0x56000054 | R/W | GPF端口的數(shù)據(jù)寄存器 | 未定義 | |
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] | 每位對應(yīng)于相應(yīng)的端口,若端口用于輸入,則可以通過相應(yīng)的位讀取數(shù)據(jù);若端口用于輸出,則可以通過相應(yīng)的位輸出數(shù)據(jù);若端口用于其他功能,則其值無法確定。 |
GPFUP | 位 | 描述 |
GPF[7:0] | [7:0] | 0:向相應(yīng)端口管腳賦予上拉(pull-up)功能 1:取消上拉功能 |
為了驅(qū)動(dòng)LED和蜂鳴器,首先通過端口配置寄存器將5個(gè)相應(yīng)寄存器配置為輸出模式。然后通過對端口數(shù)據(jù)寄存器的寫操作,實(shí)現(xiàn)對每個(gè)GPIO設(shè)備的控制(發(fā)亮或發(fā)聲)。在下一個(gè)小節(jié)中介紹的驅(qū)動(dòng)程序中,s3c2410_gpio_cfgpin()函數(shù)和s3c2410_gpio_pullup()函數(shù)將進(jìn)行對某個(gè)端口的配置,而s3c2410_gpio_setpin()函數(shù)實(shí)現(xiàn)向數(shù)據(jù)寄存器的某個(gè)端口的輸出。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
蜂鳴器相關(guān)文章:蜂鳴器原理
評論