新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式Linux設(shè)備驅(qū)動開發(fā)之:GPIO驅(qū)動程序?qū)嵗?/p>

嵌入式Linux設(shè)備驅(qū)動開發(fā)之:GPIO驅(qū)動程序?qū)嵗?/h1>
作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/257110.htm

11.3實例

11.3.1GPIO工作原理

FS2410開發(fā)板的S3C2410處理器具有117個多功能通用I/O(GPIO)端口管腳,包括GPIO8個端口組,分別為GPA(23個輸出端口)、GPB(11個輸入/輸出端口)、GPC(16個輸入/輸出端口)、GPD(16個輸入/輸出端口)、GPE(16個輸入/輸出端口)、GPF(8個輸入/輸出端口)、GPH(11個輸入/輸出端口)。根據(jù)各種系統(tǒng)設(shè)計的需求,通過軟件方法可以將這些端口配置成具有相應(yīng)功能(例如:外部中斷或數(shù)據(jù)總線)的端口。

為了控制這些端口,S3C2410處理器為每個端口組分別提供幾種相應(yīng)的控制寄存器。其中最常用的有端口配置寄存器(GPACON~GPHCON)和端口數(shù)據(jù)寄存器(GPADAT~GPHDAT)。因為大部分I/O管腳可以提供多種功能,通過配置寄存器(PnCON)設(shè)定每個管腳用于何種目的。數(shù)據(jù)寄存器的每位將對應(yīng)于某個管腳上的輸入或輸出。所以通過對數(shù)據(jù)寄存器(PnDAT)的位讀寫,可以進行對每個端口的輸入或輸出。

在此主要以發(fā)光二極管(LED)和蜂鳴器為例,討論GPIO設(shè)備的驅(qū)動程序。它們的硬件驅(qū)動電路的原理圖如圖11.4所示。

圖11.4LED(左)和蜂鳴器(右)的驅(qū)動電路原理圖

在圖11.4中,可知使用S3C2410處理器的通用I/O口GPF4、GPF5、GPF6和GPF7分別直接驅(qū)動LEDD12、D11、D10以及D9,而使用GPB0端口驅(qū)動蜂鳴器。4個LED分別在對應(yīng)端口(GPF4~GPF7)為低電平時發(fā)亮,而蜂鳴器在GPB0為高電平時發(fā)聲。這5個端口的數(shù)據(jù)流方向均為輸出。

在表11.15中,詳細描述了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ū)動LED和蜂鳴器,首先通過端口配置寄存器將5個相應(yīng)寄存器配置為輸出模式。然后通過對端口數(shù)據(jù)寄存器的寫操作,實現(xiàn)對每個GPIO設(shè)備的控制(發(fā)亮或發(fā)聲)。在下一個小節(jié)中介紹的驅(qū)動程序中,s3c2410_gpio_cfgpin()函數(shù)和s3c2410_gpio_pullup()函數(shù)將進行對某個端口的配置,而s3c2410_gpio_setpin()函數(shù)實現(xiàn)向數(shù)據(jù)寄存器的某個端口的輸出。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

linux相關(guān)文章:linux教程


蜂鳴器相關(guān)文章:蜂鳴器原理

上一頁 1 2 3 4 下一頁


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉