/**linux
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驅動之二