1Led硬體原理簡單介紹 Led的電路比較簡單,一般是使用三極體搭建一個控制電路。如下圖所示,是原理圖中兩個Led的控制電路。KP_COL0和VDD50_EN網路控制Led的通斷。
/**
****************************************************************************** * @author 暴走的小哥哥 * @version V1.0.0 * @date 2016-02-19 ****************************************************************************** * < Beijing university of posts and telecommunications > ******************************************************************************* ****************************************************************************** * platform exynos4412 ******************************************************************************* **/1Led硬體原理簡單介紹
Led的電路比較簡單,一般是使用三極體搭建一個控制電路。
如下圖所示,是原理圖中兩個Led的控制電路。KP_COL0和VDD50_EN網路控制Led的通斷。
如上圖所示。
當KP_COL0和VDD50_EN網路時高電平的時候,三極體L9014的BE導通,CE導通,相當於5V的VSYS電壓加到1K和Led小燈上,小燈就會亮。
當KP_COL0和VDD50_EN網路時低電平的時候,三極體L9014的BE會截止,CE截止,
相當於5V的VSYS電壓加到1K、Led小燈和一個無限大的電阻上,電流為零,小燈就會滅。
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驅動之二