娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年12月03日(星期二)

正在發生

2021年12月03日 | 迅為4412開發板Linux驅動教程之GPIO的初始化

發布者:石頭12345 來源: eefocus關鍵字:Linux驅動  GPIO  初始化 手機看文章 掃描二維碼
隨時隨地手機看文章

視頻下載地址:http://pan.baidu.com/s/1c06oiti

 

GPIO的初始化

? 在內核源碼目錄下使用命令“ls drivers/gpio/*.o”,可以看到“gpio-exynos4”被編譯進了內核

– 生成.o文件代表最終被編譯進了內核

– 除了menuconfig配置文件,還可以通過.o文件來判定該文件是否編譯進了

內核

 

? 在“gpio-exynos4.c”文件最下面一行

– core_initcall(exynos4_gpiolib_init);

– core_initcall代表在linux初始化過程中會調用

– 初始化函數是在源碼目錄下“include/linux/init.h”文件中定義的,該頭文件

中定義了一系列的初始化函數,在linux啟動的過程中會按等級

 

結構體exynos4_gpio_common_4bit

? 以有帶有label= "GPL2"的結構體為例

 

? .base = (S5P_VA_GPIO2 + 0x100)

– 表示偏移地址和虛擬地址相加

? .eint_offset = 0x20

– 表示中斷部分,介紹中斷的時候再講(IO口可以配置為中斷模式)

? .group = 22

– 給GPIO分組

? chip.base = EXYNOS4_GPL2(0),

– 宏定義EXYNOS4_GPL2(0)賦值給初始化函數

? chip.ngpio = EXYNOS4_GPIO_L2_NR

– 表示這一小組中有幾個GPIO

? chip.label = "GPL2",

– 程序員需要關心的標志

 

? 宏定義EXYNOS4_GPL2(0)分析

– EXYNOS4_GPL2(_nr) (EXYNOS4_GPIO_L2_START + (_nr))

– 枚舉GPIO

– EXYNOS4_GPIO_L2_START= EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_L1)

– EXYNOS4_GPIO_NEXT宏定義

– #define EXYNOS4_GPIO_NEXT(__gpio)  ((__gpio##_START) + (__gpio##_NR) 

+ CONFIG_S3C_GPIO_SPACE + 1)

? GPIO的數量EXYNOS4_GPIO_L2_NR

– 可以通過手冊查到

 

? S5P_VA_GPIO2

– 虛擬地址

? 查找S5P_VA_GPIO2宏定義,可以看到所有的GPIO被分為4個bank,這

個和datasheet上面是一致的。

– S5P_VA_GPIO1

– S5P_VA_GPIO2 S3C_ADDR(0x02240000)

– S5P_VA_GPIO3

– S5P_VA_GPIO4

? 查找到S3C_ADDR宏定義

– #define S3C_ADDR(x) (S3C_ADDR_BASE + (x))

? 查找到S3C_ADDR_BASE宏定義,這是一個虛擬地址,可以看出,地址

范圍超出了1G或者2G內存的范圍

– #define S3C_ADDR_BASE 0xF6000000

 

物理地址和虛擬地址的映射關系

 

? 虛擬地址和物理地址映射

– 虛擬地址一般很好查找,一般在平臺相關gpio的文件中就可以找到宏定義

? 在source insight中搜索關鍵字“S5P_VA_GPIO2”,看看那里用到了這個

宏定義。搜索時間會比較長,1-5分鐘吧。

? 搜索出來之后,可以看到除了gpio-exynos4.c文件中使用,cpu-exynos

中也使用了,這是一個平臺文件

 

? 映射數組如下圖所示

 

 

? 結構體解釋

– .virtual = (unsigned long)S5P_VA_GPIO2,表示虛擬地址

– .pfn = __phys_to_pfn(EXYNOS4_PA_GPIO2),表示物理地址

– .length = SZ_4K,表示映射的寬度

– .type = MT_DEVICE,

? 查找到宏定義EXYNOS4_PA_GPIO2

– #define EXYNOS4_PA_GPIO2 0x11000000

– 這個物理地址0x11000000就是

 

GPIO的初始化流程

? 初始化過程簡單描述

– 平臺文件分別定義好物理地址和虛擬地址

– 物理地址和虛擬地址之間映射

? 在初始化中,引入了程序員需要使用的GPIO宏定義,并將宏定義裝入

chip結構體中

 

GPIO的調用函數

? 例如頭文件gpio-cfg.h中s3c_gpio_cfgpin函數。這個函數是給GPIO做配

置,第一個參數是宏EXYNOS4_GPL2(0),第二個是配置的狀態參數

– 配置頭文件在arm/arm/plat-samsung/include/plat/gpio-cfg.h

? 查找該函數,可以看到進入函數就會調用chip結構體

– s3c_gpiolib_getchip,這個函數通過pin調用之后,會返回s3c_gpios[chip] 的

參數

– exynos4_gpio_common_4bit[]和s3c_gpios都是結構體s3c_gpio_chip類型的

數據

– 然后計算偏移地址等等一系列操作,這一部分是linux內核以及三星平臺完

成的,具體細節不用管。

? 也就是我們控制GPIO的時候,可以通過GPIO的一些處理函數加上類似

EXYNOS4_GPL2(0)的宏定義,就可以操作GPIO

? 后面再具體介紹GPIO操作中,常用函數的使用

 

常見問題

? 不是說好的分頁大小要一樣,怎么GPIO經過mmu處理的時候,又有

SZ_256又有SZ_4K?

– 實際上CPU查找地址的時候,仍舊是通過內存。mmu本身不保存具體的數

據,主要是提供一個虛擬地址和物理地址的表格,表格中還有字段的長

度。這個分頁和mmu沒什么關系,是CPU內存以及物理地址之間通信使用

的概念。這個只是一個抽象的概念,理解mmu只是一個表格,CPU對GPIO

的操作就很好理解了。

 

? 內部寄存器不是很快么,CPU為什么不直接讀取?

– 內部寄存器是很快,但是相對于CPU還是非常慢。CPU處理數據是將內存

中一大段一大段處理,如果單個的讀取內部寄存器的值,對CPU是極大的

浪費。把內部寄存器也看成“特殊的物理地址”即可。

? 只講了虛擬地址和物理地址對應數組,怎么沒介紹哪里調用了?

– 大家可以看一下函數ioremap,linux會調用這個函數來實現gpio的映射關

– 今天講的已經夠多夠深入了,大家只要能夠理解這么一層意思就可以了

,這個東西對我們實際寫驅動的幫助其實不是那么大!

 

? 如果我還是理解不了“對宏定義EXYNOS4_GPL2(0)的操作就是對4412芯

片管腳AC21寄存器的操作”,怎么辦?

– 記住這個結論,能夠將宏變量EXYNOS4_GPL2(0)和GPL這一組GPIO的第0位

寄存器聯想起來。

– 后面跟著我依葫蘆畫瓢,不影響大家實際寫程序,有興趣再回過頭理解

關鍵字:Linux驅動  GPIO  初始化 引用地址:迅為4412開發板Linux驅動教程之GPIO的初始化

上一篇:第一頁
下一篇:購買開發板后在iTOP4412開發板上移植SDIO接口WIFI方法

推薦閱讀

橫河宣布將于11月30日發布AQ6150B 和AQ6151B光波長計。這兩款產品是橫河久負盛名的光波長計AQ6150及AQ6151的升級版,新產品在上一代波長計的高性能基礎之上,大幅提升了測量速度,功能也得到進一步擴展。 開發背景隨著通信干線、城域網及數據中心網的不斷擴建,市場對高速光收發模塊及光傳輸系統的需求量日益增加,這就要求能夠快速高效地對光波長進行準...
   也就說我們所操作的就是別名區的位
  近年以來,隨著我市多條高速公路建成運營,為解決高速公路上新能源汽車充電難的問題,市交發集團自籌資金籌建新能源充電站。12月1日,溫州繞西南高速公路陶山服務區,甬莞高速公路瑞安服務區、鰲江停車區、樂清停車區四對服務區(停車區)新能源充電樁同時開通。   溫州繞城高速公路陶山服務區,甬莞高速公路瑞安服務區、鰲江停車區、樂清停車區...
前言MCS-51單片機的編程語言可以是匯編語言也可以是高級語言(如C語言)。高級語言編程快捷,但程序長,占用存儲空間大,執行慢;匯編語言產生的目標程序簡短,占用存儲空間小,執行快,能充分發揮計算機的硬件功能。無論是高級語言還是匯編語言,源程序都要轉換成目標程序(機器語言)單片機才能執行。目前很多公司將編輯器、匯編器、編譯器、連接/定位器...

史海拾趣

問答坊 | AI 解惑

懸賞女友一名,你將得到一個男友作為回報!

補充資料懸賞女友一名。二手亦可,要求九成新以上,無附加產品。產地不限,山寨亦可.需性能穩定,運行可靠.維護簡單,節省耗材.慣用麥當勞,啃得基等洋耗材者謝絕.出廠日期為1975年以后。各零部件齊全。預裝中文操作系統,兼容英文或俄文操作系統更佳。 ...…

查看全部問答∨

安裝protel99出錯了,恨透了

在迅雷下的protel99se ,別人都能用,唯我的電腦不行, setup 后進了3格后就卡在那里不動了, 等了好長時間后出現服務器運行失敗, 查了網上別人的經驗也沒弄好, 煩死了,都兩天了 類似于http://wenwen.soso.com/z/q147578750.htm 那位大神救 ...…

查看全部問答∨

無線Mesh網絡關鍵技術

摘要:無線Mesh網絡(WMN)是一種特殊的Ad hoc網絡,具有分層的網絡結構,其傳輸骨干網具有多跳、拓撲穩定、無供電約束、業務流量相對匯聚等特性。提高WMN頻譜空間復用度是增加網絡容量有效的方法,而其設計的關鍵是有效控制無線鏈路間的干擾范圍?;?...…

查看全部問答∨

wince 6.0 電源管理驅動

wince 6.0 下電源管理的驅動部分在什么地方。 初始化在什么地方。 找了半天也沒有找到…

查看全部問答∨

寄存器地址自我配置問題

小弟學習stm32不久,最近遇到了不少的問題,雖然問題很簡單,有些是1+1==?的問題,但是對于初學者的我來說,確實苦澀不堪~幸好有各方同仁的幫助,使我越戰越勇,但是路漫漫其修遠兮,靠我一人之力,有些問題不是很容易解決。 今又至一難題, ...…

查看全部問答∨

求助哪位高手可以教我看PLC的程序

求助哪位高手可以教我如何看PLC的程序 我是個門外漢......希望高手們指點下有什么資料也可以發給我..............謝謝?。?! wj2008hf@163.com QQ:215127089  …

查看全部問答∨

sim卡讀寫問題?

哪位大俠做過sim卡的讀寫驅動?麻煩給個例子,多謝.另外有個問題請教:當發送select 命令給sim卡時,發送如下數據0xA0, 0xA4, 0x00, 0x00, 0x02 (Select command)0x10, 0x7F (File ID, DF)返回 ...…

查看全部問答∨

易電源心得體會

起初我對電源電路只是有一點了解,只用過幾個降壓升壓的芯片,以為電源也就這么簡單,后來才發現不是這么簡單,還有很多因素需要考慮,而且發現了電源在整個電路板中的重要地位,讓我越發的喜歡易電源的課程,對電源電路有了一定的認識,對以后的應 ...…

查看全部問答∨

用機頂盒制作自動調校電子鐘程序(代碼)

用機頂盒制作自動調校電子鐘程序(代碼) 看看對你們有何啟發呢~~ …

查看全部問答∨

關于HELPER2416開發板變磚

現在很多用戶在學習HELPER2416的時候,都有變磚的經歷,我想告訴大家的是,放心使用,可勁兒折騰,不要怕變磚,多變磚幾次,您就成專家了!只要沒有放到地上踩,不拿錘子一樣的手機敲,我們都提供絕對安全的技術保障! …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 门头沟区| 武陟县| 伊宁市| 东台市| 嫩江县| 什邡市| 虹口区| 黄梅县| 汕头市| 瓮安县| 会东县| 囊谦县| 阿瓦提县| 新巴尔虎右旗| 托克托县| 鲁甸县| 栖霞市| 萍乡市| 子长县| 拉萨市| 舒城县| 北宁市| 长子县| 方山县| 承德县| 麦盖提县| 登封市| 大庆市| 凉山| 沙坪坝区| 开封市| 共和县| 万年县| 清徐县| 乃东县| 济宁市| 荔波县| 育儿| 垫江县| 乳源| 长沙县|