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...