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

2020-11-26 電子產品世界

本文引用地址:http://www.eepw.com.cn/article/257110.htm

11.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設備驅動開發之:實驗內容——test驅動
    本文引用地址:http://www.eepw.com.cn/article/257106.htm1.實驗目的該實驗是編寫最簡單的字符驅動程序,這裡的設備也就是一段內存,實現簡單的讀寫功能,並列出常用格式的Makefile以及驅動的加載和卸載腳本。讀者可以熟悉字符設備驅動的整個編寫流程。
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    /linux/fs 中找到。文件系統層之下是緩衝區緩存,它為文件系統層提供了一個通用函數集(與具體文件系統無關)。這個緩存層通過將數據保留一段時間(或者隨即預先讀取數據以便在需要是就可用)優化了對物理設備的訪問。緩衝區緩存之下是設備驅動程序,它實現了特定物理設備的接口。好了。相信讀者已經對linuxkernel 有了一個概觀。下面我們繼續分析這個路徑背後代表的模型結構。
  • 「正點原子Linux連載」第四十二章新字符設備驅動實驗
    經過前兩章實驗的實戰操作,我們已經掌握了Linux字符設備驅動開發的基本步驟,字符設備驅動開發重點是使用register_chrdev函數註冊字符設備,當不再使用設備的時候就使用unregister_chrdev函數註銷字符設備,驅動模塊加載成功以後還需要手動使用mknod命令創建設備節點。
  • Linux下I2C總線EEPROM驅動程序設計方法
    i2c-core是I2C總線驅動程序體系結構的核心,在這個模塊中,除了為總線設備驅動提供了一些統一的調用接口來訪問具體的總線驅動程序功能,以進行讀寫或設置操作外,還提供了將各種支持的總線設備驅動和總線驅動添加到這個體系中的方法,以及當不再使用這些驅動時將其從體系中刪除的方法。i2c-core將總線驅動程序體系一分為二,相互獨立。
  • 嵌入式Linux開發環境的搭建之:嵌入式開發環境的搭建
    本文引用地址:http://www.eepw.com.cn/article/257141.htm5.1嵌入式開發環境的搭建5.1.1嵌入式交叉編譯環境的搭建linux作業系統文章專題:linux作業系統詳解(linux不再難懂)交叉編譯的概念在第4章中已經詳細講述過,搭建交叉編譯環境是嵌入式開發的第一步,也是必備的一步。
  • 數字溫度傳感器DS1621在Linux下的IIC接口驅動設計
    而Linux作為一個原始碼公開、易於裁剪的作業系統,非常適合於嵌入式系統的應用。Linux作業系統下的嵌入式設備驅動,通過IIC總線,實現ARM與外圍模塊間的協同工作,有著廣泛的應用。3 驅動程序設計在Linux下的驅動程序將所有設備看作文件,
  • 程式設計師及嵌入式的一些學習建議
    做任何事情都有一個循序漸進的過程,學習嵌入式linux也一樣。在有了一定的嵌入式開發基礎後,學習嵌入式linux開發比較適合的切入點是從嵌入式linux應用程式開發開始,即暫時先不去關心嵌入式硬體平臺,不去關心linux的底層驅動,先把精力集中在現有的嵌入式linux平臺上進行嵌入式linux應用程式設計開發。
  • USB 接口驅動程序開發
    2) 處理流程  因為I /O 管理器把每一個設備對用戶程序都抽象成文件,所以用戶程序通過調用文件操作API 函數就可以實現與驅動程序中某個設備的通信。  用戶程序發送的請求由I /O 管理器轉換為具有不同主功能代碼的IRP ( I /O 請求包) 發送給功能驅動程序。
  • 【連載】嵌入式Linux開發教程:Linux內核
    Linus當時提交到Minix新聞組的原名並不是Linux,而是Freax,取自「Free」和「Unix」兩個單詞,為「免費的Unix」之意。但當時的管理員並不喜歡「Freax」這個名稱,並以「Linus’s Minix」之意,將Freax放到了一個名為「Linux」的目錄下,之後便一直用Linux這個名稱。
  • 嵌入式Win CE中CAN總線控制器的驅動設計與實現
    嵌入式作業系統(Real-time Embedded OperatingSystem,RTOS或EOS)作為一種實時的、支持嵌入式系統應用的作業系統軟體,成為嵌入式系統(包括硬、軟體系統)極為重要的組成部分,通常包括與硬體相關的底層驅動軟體、系統內核、設備驅動接口、通信協議、圖形界面、標準化瀏覽器Browser等。
  • WinCE5.0的USB Camera流接口驅動開發
    但是由於嵌入式硬體環境的多樣性以及WinCE5.0對USB設備驅動開發只提供了一些底層支持,攝像頭廠商尚未提供WinCE5.0下USB攝像頭的驅動,因此開發出WinCE5.0下USB攝像頭驅動具有實際的意義和價值。本文正是針對這一情況,對WinCE5.0下USB設備驅動開發進行研究,並設計出基於流接口驅動模型的USB攝像頭驅動程序。
  • 基於嵌入式WinCE的CAN總線控制器驅動設計
    嵌入式作業系統(:Real-time Embedded OperatingSystem,RTOs或EOs)作為一種實時的、支持嵌入式系統應用的作業系統軟體,成為嵌入式系統(包括硬、軟體系統)極為重要的組成部分,通常包括與硬體相關的底層驅動軟體、系統內核、設備驅動接口、通信協議、圖形界面、標準化瀏覽器Browser等。
  • 如何在MIPS平臺上使用Yocto設備定製的嵌入式系統Linux
    Yocto Project簡介 為描述Yocto Project,我們可以引述網站上的 「Yocto Project提供了一個開源的、高質量的基礎設備和工具,以幫助開發人員創建自己的定製Linux發行版,用於任何硬體架構及跨多個細分市場。Yocto Project旨在為開發人員提供一個良好的開端。
  • 嵌入式開發:STM32 FSMC接口驅動TFT-LCD設計
    本文提出了一種能直接驅動數字液晶屏的設計方案,方案先介紹了TFT數字彩屏的工作原理,利用STM32處理器的FSMC接口設計的硬體電路和軟體程序均能對顯示控制晶片進行有效的控制。在實際應用中顯示清晰流暢,並且CPU有足夠的時間來處理用戶程序。該方案能成功應用在電腦橫機的人機界面顯示中,且其硬體電路結構簡單、控制方式靈活、對於其他型號的接口晶片也能提供參考。
  • 基於嵌入式Linux的語音識別系統硬軟體設計
    採用嵌入式語音識別技術使得設備具有功耗低、使用簡便、靈活等優點,擺脫了複雜按鍵和按鈕的困擾,在服務機器人、智能家居及消費電子等領域發揮著重要作用。  2.系統構成與原理  語音識別主要包括兩個階段:訓練階段和識別階段。在訓練或識別過程中,都必須對輸入語音進行預處理和特徵提取。
  • 嵌入式系統中USB主機控制器的設計
    過去USB僅應用於個人計算機,而在嵌入式系統領域的巨大潛力還沒有開發出來,USB在嵌入式系統中的應用包括 主機控制器是集成主板晶片組的一部分,USB堆棧則包含主板晶片及通用主機控制器接口(UCHI)和開放主機控制器接口(OHCI)驅動程序以及USB驅動程序(usbd.sys),在PC上實現USB需要上述領域的專門技術。 在嵌入式USB系統中,其主要組成部分與PC系統類似,如嵌入式主機控制器晶片、帶OHCI堆棧的實時作業系統(RTOS)以及專用驅動程序。
  • 從RTOS到Linux的應用移植
    大多數 RTOS還全部運行在特權模式,雖然表面上看來是增強了性能,但全部的RTOS應用和系統代碼都能夠訪問整個地址空間、內存映射過的設備以及其他I/O操作。這樣,即使存在差別,也很難把RTOS應用程式代碼同驅動程序代碼區分開來。  對於當前包含MMU的處理器而言,Linux系統提供了複雜的存儲管理系統,使得進程所能訪問的虛擬內存達到4 GB。
  • 實現了多鍵齊按和重複按鍵的嵌入式系統鍵盤驅動設計
    實現了多鍵齊按和重複按鍵的嵌入式系統鍵盤驅動設計 工程師黃明星 發表於 2018-06-26 10:39:00 1 鍵盤驅動程序的設計 隨著電子信息技術飛速發展,嵌入式系統構成的各種設備得到了廣泛的應用, 嵌入式
  • 實戰經驗吐血推薦:怎樣在Linux環境下輕鬆實現基於I2C總線的EEPROM...
    筆者在開發基於MPC8250的嵌入式Linux系統的過程中發現I2C總線在嵌入式系統中應用廣泛,I2C總線控制器的類型比較多,對系統提供的操作接口差別也很大。與I2C總線相連的從設備主要有微控制器、EEPROM、實時時鐘、A/D轉換器等。MPC8250處理器正是通過內部的I2C總線控制器來和這些連接在I2C總線上的設備進行數據交換的。
  • PCBA與嵌入式開發
    基於PCBA板的嵌入式系統的開發嵌入式系統的開發分為嵌入式軟體開發和嵌入式硬體開發,PCBA正是嵌入式硬體開發的基礎。什麼是嵌入式系統(1) 嵌入式系統的基本介紹嵌入式系統應定義為:嵌入到對象體系中的專用計算機系統。嵌入性、專用性與計算機系統是嵌入式系統的三個基本要素。嵌入式開發就是指在嵌入式作業系統下進行開發,一般常用的系統有ucos,linux,android等。