嵌入式Linux設備驅動開發之:GPIO驅動程序實例

2021-01-19 電子產品世界

本文引用地址: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作業系統詳解(linux不再難懂)

linux相關文章:linux教程

蜂鳴器相關文章:蜂鳴器原理

相關焦點

  • 嵌入式Linux設備驅動開發之:按鍵驅動程序實例
    按鍵同樣使用GPIO接口,但按鍵本身需要外部的輸入,即在驅動程序中要處理外部中斷。按鍵硬體驅動原理圖如圖11-7所示。在圖11-7的4×4矩陣按鍵(K1~K16)電路中,使用4個輸入/輸出埠(EINT0、EINT2、EINT11和EINT19)和4個輸出埠(KSCAN0~KSCAN3)。
  • 嵌入式Linux之我行——LED驅動在2440上的實例開發
    一、開發環境主機:VMWare--Fedora 9開發板:Mini2440--64MB Nand編譯器:arm-linux-gcc-4.3.2二、實現步驟
  • 實時嵌入式作業系統VxWorks設備驅動程序的設計
    摘要:在嵌入式實時系統中進行軟硬體開發的關鍵是編寫高效可靠的設備驅動程序,而VxWorks下END網口驅動程序是設備驅動程序中較為複雜的一類。
  • 嵌入式Linux設備驅動開發之:字符設備驅動編程
    本文引用地址:http://www.eepw.com.cn/article/257111.htm設備驅動程序可以使用模塊的方式動態加載到內核中去。加載模塊的方式與以往的應用程式開發有很大的不同。以往在開發應用程式時都有一個main()函數作為程序的入口點,而在驅動開發時卻沒有main()函數,模塊在調用insmod命令時被加載,此時的入口點是init_module()函數,通常在該函數中完成設備的註冊。同樣,模塊在調用rmmod命令時被卸載,此時的入口點是cleanup_module()函數,在該函數中完成設備的卸載。
  • Linux CommonClock Framework分析之四 gpio clk gate驅動實現
    本章大概分為如下幾個章節:一、 本次驅動開發涉及的知識點 二、clk provider driver的實現流程說明 三、gpio clk gate driver驅動設計一、 本次驅動開發涉及的知識點本次驅動實踐主要涉及如下幾個方面的知識點
  • dm6441的gpio驅動
    這是我進入嵌入式行業進公司做的第一個驅動,平臺:Tidm6441linu2.6.18本文引用地址:http://www.eepw.com.cn/article/201611/321880.htmGPIO是嵌入式系統最簡單、最常用的資源了,比如點亮
  • 《嵌入式Linux應用程式開發標準教程》(第2版)
    C編程基礎之:實驗內容Linux下C編程基礎之:本章小結與思考與練習第4章 嵌入式系統基礎嵌入式系統基礎之:嵌入式系統概述嵌入式系統基礎之:ARM處理器硬體開發平臺嵌入式系統基礎之:嵌入式軟體開發流程嵌入式系統基礎之:實驗內容——使用JTAG燒寫Nand Flash嵌入式系統基礎之:本章小結與思考與練習
  • 嵌入式Linux設備驅動開發之:實驗內容——test驅動
    本文引用地址:http://www.eepw.com.cn/article/257106.htm1.實驗目的該實驗是編寫最簡單的字符驅動程序,這裡的設備也就是一段內存,實現簡單的讀寫功能,並列出常用格式的Makefile以及驅動的加載和卸載腳本。讀者可以熟悉字符設備驅動的整個編寫流程。
  • 基於USB設備的Linux網絡驅動程序開發
    由於Linux比較完整的繼承了各種UNIX版本的穩定和高效,並且克服和改進了傳統UNIX中的很多缺點,更因為其開放的開發模式,Linux成為一個具有強大網絡服務功能的作業系統。它支持主流的TCP/IP以及IPX/SPX、 NETBEUI等眾多網絡協議,無論在嵌入式系統,伺服器還是桌面作業系統領域,Linux都取得了廣泛的應用。
  • 嵌入式Linux的USB驅動設計
    摘要:本文主要介紹了Linux平臺的USB設備驅動開發的一般步驟方法和技巧,通過詳細介紹USB的相關概念和Linux中USB設備驅動程序的數據結構,框架和步驟,並通過設計和實現一個驅動的實例,總結了USB驅動的一般方法和技巧。
  • PWM在ARM Linux中的原理和蜂鳴器驅動實例開發
    下面我們來通過一個蜂鳴器的實例來說明PWM功能的使用。三、蜂鳴器驅動實例1. 蜂鳴器的種類和工作原理 蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。有的壓電式蜂鳴器外殼上還裝有發光二極體。
  • 「正點原子FPGA連載」第二十八章Linux蜂鳴器驅動實驗
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?本章我們就驅動開發板上的有源蜂鳴器,使其周期性的「滴、滴、滴…..」鳴叫。本節我們來看一下如果在Linux下編寫蜂鳴器驅動需要做哪些工作:①在設備樹中創建蜂鳴器節點beeper;②在蜂鳴器節點beeper中指定gpio;③編寫驅動程序和測試APP,和第二十七章的LED驅動程序和測試APP基本一樣。接下來我們就根據上面這三步來編寫蜂鳴器Linux驅動程序。
  • 嵌入式Linux設備驅動開發之:中斷編程
    前面所講述的驅動程序中都沒有涉及中斷處理,而實際上,有很多Linux的驅動都是通過中斷的方式來進行內核和硬體的交互。中斷機制提供了硬體和軟體之間異步傳遞信息的方式。硬體設備在發生某個事件時通過中斷通知軟體進行處理。
  • 嵌入式Linux移植實時設備驅動程序
    Linux暴風雨般地佔領了嵌入式系統市場。根據工業分析家分析,大約1/3到1/2的新的32位和64位嵌入式系統設計採用了Linux。嵌入式Linux已經在很多應用領域顯示出優勢,比如SOHO家庭網絡和成像/多功能外設,並在以下幾方面具備巨大的跨越式發展前景:(NAS/SAN)存儲,家庭數字娛樂(HDTV/PVR/DVR/STB)和手持設備/無線設備,特別是數字行動電話。
  • Linux環境下的USB攝像頭驅動開發
    本文從Linux內核的USB核心模塊出發,遵循Video4Linux接口標準,採用urb策略與內存映射的方式以提高數據讀取速度,設計開發了基於Linux環境下的USB攝像頭驅動,並在ARM9實驗平臺上對該驅動程序進行了測試與分析。
  • 「正點原子FPGA連載」第二十七章gpio子系統下的驅動實驗
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?在上一章當中已經給大家介紹了linux的gpio子系統,那本章我們就來編寫一個基於gpio子系統API的led驅動程序,本章將在第二十五章實驗的基礎上進行修改完成。
  • 「正點原子FPGA連載」第二十二章Linux LED驅動開發
    1)摘自【正點原子】領航者 ZYNQ 之linux驅動開發指南2)實驗平臺:正點原子領航者ZYNQ開發板3)平臺購買地址:https://item.taobao.com/item.htm?Linux LED驅動開發實驗上一章我們詳細的講解了字符設備驅動開發步驟,並且用一個虛擬的chrdevbase設備為例帶領大家完成了第一個字符設備驅動的開發。
  • 嵌入式Linux系統開發入門基礎
    Gdb調試技術 Autoconf Automake Makefile 代碼優化 熟悉Linux系統下的開發環境 熟悉Gcc編譯器 熟悉Makefile規則編寫Hello,World程序 使用 make命令編譯程序 編寫帶有一個循環的程序 調試一個有問題的程序   4、嵌入式系統開發基礎嵌入式系統概述 交叉編譯 配置TFTP服務 配置NFS服務 下載Bootloader和內核 嵌入式Linux
  • 嵌入式Linux下USB驅動程序的設計
    一個USB系統主要有三部分組成:USB互連、USB主機、USB設備三部分組成的,其結構如圖1所示。在編寫USB設備驅動程序設計時,可以分為三部分編寫:主機端設備驅動程序、主機控制器驅動程序設計和設備端驅動程序三部分,在本文中重點介紹主機端驅動程序的設計。
  • [ARM筆記]驅動對設備的識別過程及實例——NAND Flash
    驅動程序識別設備時,有以下兩種方法:本文引用地址:http://www.eepw.com.cn/article/201612/341049.htm  (1)驅動程序本身帶有設備信息,比如開始地址、中斷號等;加載驅動程序時,就可以根據這些信息來識別設備。