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


 /**

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM