調試exynos4412—ARM嵌入式Linux—LEDS/GPIO驅動之一

 /**linux

******************************************************************************
* @author    暴走的小哥哥
* @version   V1.0.0
* @date       2016-02-19
******************************************************************************
* <  Beijing university of posts and telecommunications >
*******************************************************************************
******************************************************************************
* platform exynos4412
*******************************************************************************
**/

1Led硬件原理簡單介紹vim

Led的電路比較簡單,通常是使用三極管搭建一個控制電路。網絡

以下圖所示,是原理圖中兩個Led的控制電路。KP_COL0和VDD50_EN網絡控制Led的通斷。函數

如上圖所示。post

當KP_COL0和VDD50_EN網絡時高電平的時候,三極管L9014的BE導通,CE導通,至關於5V的VSYS電壓加到1K和Led小燈上,小燈就會亮。調試

當KP_COL0和VDD50_EN網絡時低電平的時候,三極管L9014的BE會截止,CE截止,orm

至關於5V的VSYS電壓加到1K、Led小燈和一個無限大的電阻上,電流爲零,小燈就會滅。blog

 

2Led管腳的調用、賦值以及配置開發

涉及GPIO調用、賦值以及配置的函數源碼

2.1GPIO申請和釋放函數

想用使用任何一個GPIO都必須先申請。

在頭文件「include/linux/gpio.h」中有Linux默認的GPIO申請函數,這個頭文件是屬於嵌入式Linux平臺,任何一個嵌入式Linux內核均可以這麼使用。

以下圖所示,在源碼目錄中使用命令「vim include/linux/gpio.h」打開該文件。

以下圖所示,就是本節實驗中須要用到的函數gpio_request。

如上圖所示,簡單介紹一下gpio_request函數。

首先這個函數有一個重要的「檢測」功能,就是若是其它地方申請了這個IO,那麼這裏就會返回錯誤,提示已經被佔用了,這是一個標準用法。

gpio_request函數有兩個參數

unsigned gpio,申請的那個GPIO,通常是GPIO對應的宏定義

const char *label,爲GPIO取個名字,便於閱讀

 

以下圖所示,和gpio_request函數對應的是gpio_free函數。

在調用gpio_request函數以後,向系統代表這個IO已經被佔用了,在卸載驅動的時候通常須要調用gpio_free函數將其釋放。

gpio_free函數的參數比較簡單,只有一個GPIO參數,使用GPIO對應的宏定義便可。

 

以下圖所示,還有一個賦值函數gpio_set_value。

在將GPIO配置爲輸出模式以後,還須要給GPIO賦值,通常就是高電平和低電平兩種。

兩個參數分別爲

unsigned gpio,GPIO

int value,高電平1和低電平0。

 

2.2GPIO配置參數宏定義

GPIO在Linux初始化,進行映射以後調用GPIO操做函數對GPIO宏定義進行操做就是對GPIO的操做。

這個GPIO宏定義文件都是由原廠提供,確定是已經作好的,屬於BSP板級開發包。

以下圖所示,在源碼目錄中使用命令

「vim arch/arm/mach-exynos/include/mach/gpio-exynos4.h」打開該文件。

以下圖所示,能夠看到全部的GPIO都已經定義了。

咱們在原理圖中查找KP_COL0、VDD50_EN網絡,最終鏈接到4412上的部分以下圖所示。

 

 2.3GPIO配置函數和參數

在Linux中,對GPIO的配置函數以及參數都已經集成到三星板級開發包中。

 

先來看一下配置函數,以下圖所示,在源碼目錄中使用命令

「vim arch/arm/plat-samsung/include/plat/gpio-cfg.h」打開該文件。

以下圖所示,s3c_gpio_cfgpin函數就是本節實驗須要的。

如上圖所示,函數extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to);

通常來講帶有s3cxxx的函數就是三星平臺可以通用的函數。

s3c_gpio_cfgpin管腳配置函數有兩個參數

參數unsigned int pin,管腳

參數unsigned int to,配置參數。

 

再來看一下配置參數,以下圖所示,在源碼目錄中使用命令

「vim arch/arm/plat-samsung/include/plat/gpio-cfg.h」打開該文件,配置參數和函數是在同一個函數中。

以下圖所示,對於GPIO須要將其配置爲輸出模式,對應S3C_GPIO_OUTPUT宏定義。

 

本人文字水平有限,因此就一步一步的寫和截圖,但願這種形式對你們有所幫助!

本文只對系統函數,基礎知識進行分析,若是想要得到led/GPIO操做的驅動、Makefile文件和在無界面最小Linux系統下的應用

請參考本人另外一篇原創博客:調試exynos4412—ARM嵌入式Linux—LEDS/GPIO驅動之二

相關文章
相關標籤/搜索