GPIO核心之旅

2021-07-10 11:53:29 字數 1267 閱讀 8873

linux核心中gpio

是最簡單

,最常用的資源

(和 interrupt ,dma,timer一樣)驅動程式,應用程式都能夠通過相應的介面使用gpio,

gpio使用0~max_int之間的整數標識,不能使用負數,gpio與

硬體體系密切相關的

,不過linux

有乙個框架

處理gpio,

能夠使用統一的介面來操作gpio.在講gpio核心(gpiolib.c)之前先來看看gpio是怎麼使用的

1 測試

gpio埠是否合法 int gpio_is_valid(int number); 有效返回1,無效返回零。

eg:   if(!gpio_is_valid(led->en_gpio))

2 申請某個

gpio埠

當然在申請之前需要

顯示的配置該gpio埠的

pinmux

int gpio_request(unsigned gpio, const char *label)

3 標記gpio的使用方向包括輸入還是輸出

/*成功返回零失敗返回負的錯誤值*/ 

int gpio_direction_input(unsigned gpio); 

int gpio_direction_output(unsigned gpio, int value); 

4 獲得gpio引腳的值和設定gpio引腳的值(對於輸出)

int gpio_get_value(unsigned gpio);

void gpio_set_value(unsigned gpio, int value); 

5 gpio當作中斷口使用

int gpio_to_irq(unsigned gpio); 

返回的值即中斷編號可以傳給request_irq()和free_irq()

核心通過呼叫該函式將gpio埠轉換為中斷,在使用者空間也有類似方法

6 匯出gpio埠到使用者空間

int gpio_export(unsigned gpio, bool direction_may_change); 

核心可以對已經被gpio_request()申請的gpio埠的匯出進行明確的管理,

引數direction_may_change表示使用者程式是否允許修改gpio的方向,假如可以

則引數direction_may_change為真

/* 撤銷gpio的匯出 */ 

void gpio_unexport(); 

linux 核心之旅

我不認為我是 linux 之上的高手,因為我的shell 沒有達到c語言的 拿來即用的水平,而且我的核心開發主要集中於裝置驅動的開發。但我確信我現在已經是乙個入門者,可以再遇到問題的時候,迅速定位,然後給出正確的指導和答案。linux核心難嗎?接觸之初,和現在完全是兩種答案。在學習linux之前,我...

Android Framework核心之旅

android framework核心之旅 6.1 framework框架 framework定義了客戶端元件和服務端元件功能及介面。以下闡述中,應用程式 一般是指 apk 程式。框架中包含三個主要部分,分別為服務端 客戶端和linux驅動。6.1.1服務端 服務端主要包含兩個重要類,分別是wind...

LPC1754學習之旅 GPIO

lpc1754的所有gpio口在復位後預設為上拉輸入狀態。gpio可以以位元組 半字 字進行操作。gpio有以下4種暫存器,其各自的功能描述如下 power 一直使能。pins 通過設定暫存器,管腳可以作為普通的 gpio,或者是他的復用功能 共有3種復用功能 wake up gpio0和gpio2...