国产精品免费无遮挡无码永久视频-国产高潮视频在线观看-精品久久国产字幕高潮-国产精品99精品无码视亚

迅為4412開發板-實驗LEDS驅動一

發布時間:2021-1-5 11:12    發布者:就是塔塔
14.1 本章導讀
本節實驗介紹一個完整的 GPIO 驅動,以后在 Linux 中需要處理 GPIO 驅動都可以仿照或
者移植這個驅動。
14.1.1 工具
14.1.1.1 硬件工具
1)iTOP4412 開發板
2)U 盤或者 TF 卡
3)PC 機
4)串口
14.1.1.2 軟件工具
1)虛擬機 Vmware
2)Ubuntu12.04.2
3)超級終端(串口助手)
4)源碼文件夾“leds”
14.1.2 預備課程
實驗 12_物理地址虛擬地址
實驗 13_GPIO 初始化
14.1.3 視頻資源
本節配套視頻為“視頻 14 LEDS 驅動一”
14.2 學習目標
本章需要學習以下內容:
Led 硬件原理簡單介紹
Led 管腳的調用、賦值以及配置
編寫簡單應用調用 LED 管腳,并測試
14.3 Led 硬件原理簡單介紹
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 小燈和一個無限大的電阻上,電流為零,小燈就會滅。
14.4 Led 管腳的調用、賦值以及配置
本節給大家介紹一部分涉及 GPIO 調用、賦值以及配置的函數。
14.4.1 GPIO 申請和釋放函數
想用使用任何一個 GPIO 都必須先申請。
在頭文件“include/linux/gpio.h”中有 Linux 默認的 GPIO 申請函數,這個頭文件是屬于嵌入式 Linux 平臺,任何一個嵌入式 Linux 內核都可以這么使用。
如下圖所示,在源碼目錄中使用命令“vim include/linux/gpio.h”打開該文件。

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

如上圖所示,簡單介紹一下 gpio_request 函數。
首先這個函數有一個重要的“檢測”功能,就是如果其它地方申請了這個 IO,那么這里就會返回錯誤,提示已經被占用了,這是 Linux 中的一個標準用法。
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。
14.4.2 GPIO 配置參數宏定義
GPIO 在 Linux 初始化,進行映射之后調用 GPIO 操作函數對 GPIO 宏定義進行操作就是對 GPIO 的操作。
這個 GPIO 宏定義文件都是由原廠提供,肯定是已經做好的,屬于 BSP 板級開發包。
如下圖所示,在源碼目錄中使用命令
“vim arch/arm/mach-exynos/include/mach/gpio-exynos4.h”打開該文件。

如下圖所示,可以看到所有的 GPIO 都已經定義了。

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

如上圖所示,則兩個 Led 的宏定義為 EXYNOS4_GPL2(0),EXYNOS4_GPK1(1)。
14.4.3 GPIO 配置函數和參數
在 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 宏定義。

14.5 編寫簡單應用調用 LED 管腳,并測試
在前面的 devicenode_linux_module.c 文件上添加代碼,首先將文件名devicenode_linux_module.c 改為 leds.c。
先處理一下編譯文件 Makefile,如下圖所示,將 devicenode_linux_module 改為leds。

接著修改 leds.c 文件。
首先添加需要的頭文件,如下圖所示,分別是申請 GPIO、配置函數、配置參數、GPIO宏定義等的頭文件。然后將設備節點名稱由 hello_ctl123 修改為 hello_ctl

然后需要修改的就是 probe 函數,一般說來 GPIO 的初始化都是在 probe 中。如下圖所示,調用配置函數以及配置函數。

然后就是修改一下 ioctl 函數,在 Linux 中對 GPIO 的控制一般是使用 ioctl,雖然 write函數也可以實現類似的功能,但是 ioctl 函數的效率高一些。如下圖所示,根據應用傳入的參數給 GPIO 賦值。

如上圖所示,先對于參數做一個簡單的判斷,然后給 led 賦值。
接著再來看一下應用,如下圖所示,應用比較簡單,調用延時函數,首先將 Led 點亮三秒,然后再滅掉三秒,再點亮。

在 Ubuntu 系統下新建 leds 文件夾,將寫好的 leds 和編譯腳本拷貝到 leds 文件夾下,使用 Makefile 命令編譯驅動,使用
“arm-none-linux-gnueabi-gcc -o invoke_leds invoke_leds.c -static”命令編譯應用。如下圖所示

將上圖中的文件 invoke_leds 和 leds.ko 拷貝到 U 盤。
啟動開發板,將 U 盤插入開發板,使用命令“ mount /dev/sda1 /mnt/udisk/”加載 U盤符,
使用命令“ insmod /mnt/udisk/leds.ko ”加載驅動 leds.ko,
使用命令“./mnt/udisk/invoke_leds”運行小應用 invoke_leds,如下圖所示。

經過上面的操作可觀察到 led 小燈會一亮一滅一亮,中間大概間隔三秒鐘。



本文地址:http://www.4huy16.com/thread-753127-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Microchip第22屆中國技術精英年會——采訪篇
  • Microchip第22屆中國技術精英年會上海首站開幕
  • “芯”光璀璨,鵬城共賞——2025 Microchip中國技術精英年會深圳站回顧
  • 電動兩輪車設計生態系統
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表