历史上的今天
返回首页

历史上的今天

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

正在发生

2021年12月03日 | 迅为4412开发板Linux驱动教程之GPIO的初始化

2021-12-03 来源:eefocus

视频下载地址: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位

寄存器联想起来。

– 后面跟着我依葫芦画瓢,不影响大家实际写程序,有兴趣再回过头理解

推荐阅读

史海拾趣

Gaomi Xinghe Electronics公司的发展小趣事

背景:在电子产品市场竞争日益激烈的背景下,Galaxy深知技术创新和品质提升的重要性。为了进一步提升产品性能,公司决定寻求与行业顶尖厂商的合作。

行动:Galaxy与瑞士著名散热器厂商“Arctic Cooling”建立了战略合作伙伴关系,共同推出了备受瞩目的影驰GeForce6系列产品。这款产品在散热性能上实现了重大突破,为用户带来了更加稳定、高效的使用体验。

成果:凭借出色的性能和口碑,影驰GeForce6系列产品迅速在市场上走红,不仅巩固了Galaxy在显卡市场的领先地位,还极大地提升了公司在行业内的影响力。

璟德(ACX)公司的发展小趣事

随着公司的发展,璟德(ACX)在LTCC技术的研发上取得了重大突破。这些突破不仅提升了产品的性能和质量,也为公司赢得了多项国内外专利。这些专利的获取进一步巩固了璟德(ACX)在无线通信领域的领先地位,也为其后续的市场拓展提供了有力支持。

C.K Magma公司的发展小趣事

C.K Magma公司最初由一群热衷于电子技术的工程师创立。他们通过深入研究,成功开发出一种新型半导体材料,这种材料在性能和稳定性上均优于当时市场上的同类产品。这一技术突破为公司赢得了业界的关注,并吸引了第一批投资。随着资金的注入,C.K Magma公司得以扩大研发团队,进一步巩固了其在半导体领域的技术领先地位。

Crystek公司的发展小趣事

随着科技的快速发展和市场的不断变化,Crystek公司意识到只有不断创新才能保持竞争优势。因此,公司加大了研发投入,积极引进先进技术,推出了一系列具有创新性和竞争力的新产品。其中,温度补偿晶体振荡器(TCXO)和压控晶体振荡器(VCXO)等产品的推出,不仅提升了Crystek公司的技术实力,也进一步巩固了其在行业中的领先地位。同时,公司还不断优化生产工艺和质量控制体系,确保产品的高性能和可靠性。

Green Solution Technology Co Ltd公司的发展小趣事

为了进一步扩大市场份额和提升品牌影响力,Crystek公司积极拓展国际市场,与全球多家知名企业建立了合作关系。通过与这些企业的深入合作,Crystek公司的产品得以广泛应用于无线、微波无线电、电信、工业、企业、航空航天和政府部门等各个领域。同时,公司还积极参加国际电子展览和技术交流会议,与全球同行交流学习,不断提升自身的技术水平和市场竞争力。

Great American Electronics公司的发展小趣事

尽管Crystek公司在发展过程中取得了显著的成就,但也面临着一些挑战和困难。例如,随着行业竞争的加剧和市场需求的不断变化,公司需要不断调整战略方向和产品结构以适应市场的变化。同时,公司还需要加强人才培养和团队建设,提升员工的技能水平和创新能力。然而,Crystek公司始终保持着积极进取的态度和勇于面对挑战的精神,相信在未来的发展中,公司将继续保持领先地位并创造更加辉煌的业绩。

这五个故事展示了Crystek公司在电子行业中的发展历程和取得的成就。从创业起步到技术创新、市场拓展、部门专业化以及应对挑战和未来发展,Crystek公司始终保持着积极进取的精神和不断创新的态度,为电子行业的发展做出了重要贡献。

问答坊 | AI 解惑

一本关于Intel80C51 以及广大的51系列单片机的书

看到有不少人在咱坛子里,发布和询问51的问题, 相信有不少51 的人在这里呢,呵呵 我这里有个可以当工具书的东东,拿出来给大家分享…

查看全部问答>

淘宝那个700多的WIFI收音机的简单评测!

来源:http://www.hi-pda.com/forum/viewthread.php?tid=539752&extra=page%3D1 序:     这几天连续看到几篇关于网络收音机、卧室音响和网络播放器的讨论帖,本来已经想好入罗技的Squeezbox的,但淘宝的报价普遍较高。后来突然看见 ...…

查看全部问答>

protel 99se 绘图封装问题

在绘图时遇到一个TP,在板子上是一个孔,但又不是过孔,那怎么确定封装啊?…

查看全部问答>

阿牛哥要推ADI 系列产品了!

      十二月份阿牛哥一直在考察学习ADI 产品线应用和客户群情况,无论是附近现货供应商朋友的还是联系拜访过的安防监控,仪器仪表,智能电表客户,ADI 产品线很有优势的。阿牛哥和一些专业推ADI 产品方案的授权代理商, ...…

查看全部问答>

2007年E题 开关稳压电源程序 PCB 电路图

本帖最后由 paulhyde 于 2014-9-15 03:29 编辑 2007年E题 开关稳压电源程序 PCB 电路图    …

查看全部问答>

测频率

本帖最后由 paulhyde 于 2014-9-15 02:59 编辑 一个很详细的单片机测频率程序!!  …

查看全部问答>

小弟新学AD数据处理有问题求助

部分程序如下:(10ad) void Get_ad_result(void) {                 unsigned char i;         unsigned int a_ad=0,ad_sum=0;         unsigned long ...…

查看全部问答>

求帮忙把schdoc转成99se能打开的格式 在线等

求帮忙把schdoc转成99se能打开的格式 在线等…

查看全部问答>

arm-linux多端口数据转发器实现

在一块上了linux的arm板上,有两块网卡,暂且称为左网卡和又网卡。现在需要利用这个平台实现双向的数据转发,左右两边都要使用多个端口和外部收发数据,并且连接方式不做统一,主动和被动连接方式并存。左右两边的端口存在特定映射关系,即从左边端 ...…

查看全部问答>

去图书馆 借了 《msp430单片机自学笔记》看了,好书,但别买

去图书馆 借了 《msp430单片机自学笔记》看了,好书,但别买, msp430f169  f1xxx 系列的 不是针对 目前的板子的, 非常好的 内容: 特别是 读写时序与编程 特别是 有个状态图 编程 很好…

查看全部问答>