树莓派(六)IO口驱动初级入门

一、三个 "地址"

1.总线地址

总线地址,也被称为地址总线或位址总线(Address Bus),是一种计算机总线。它由CPU或者具有DMA能力的单元使用,用于沟通这些单元想要访问(读取/写入)计算机内存组件/地方的物理地址。

通俗讲就是CPU能够访问内存的范围。

比如32位的系统,CPU最多能访问到2^32bit,也就是4Gb。

2^32 = 4294967296 bit = 4194304 Kb = 4096 Mb = 4 Gb

而64位系统则是能访问到8Gb。  

树莓派装载32位操作系统,寻址自然是4G。

树莓派查看内存指令。

cat /proc/meninfo

 内存大概为926Mb。

 

2.物理地址

在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址(Physical Address),又叫实际地址或绝对地址。

3.虚拟地址

如何解释虚拟地址呢?

以树莓派为例,树莓派是32位系统,内存可以访问到4G,但是物理地址只有1G,假如运行的程序是超过1G的,那么把程序全部加载到内存是不可行的。

解决方法就是利用虚拟地址。

首先要说明一点,我们在实际程序中操作的其实都是虚拟地址。

虚拟地址其实就是基于算法上的逻辑地址,是软件层面的,是假的。虚拟地址可以比1G大,树莓派本身是能够访问到4G的,当物理地址1G不能满足程序运行空间需要时,那就可以把1G的物理地址映射成4G的虚拟地址。

二、芯片手册导读

查看芯片手册的目的性很强:做哪一块的开发,就只看那一块,现在要开发的是GPIO,熟悉控制IO口的寄存器最为重要。

如果看完这部分的文档,你对于以下几个问题(后面有解析)有清晰的答案,说明你真正读懂了这一部分的开发。

①操作逻辑:简言之就是怎么进行配置相关寄存器,这些配置步骤和思想其实都很类似。
②需要重点掌握的寄存器有哪些?

例如输入 / 输出控制寄存器

输出 0 / 1控制寄存器

清除状态寄存器

训练如何捕捉信息 。

在新的平台也要学会捕捉类似的关键信息:选择输入还是输出,0/1,怎么清除,上升沿下降沿等。

从这里可以看出,所有IO口被分成0~5,共6个分组。每组的访问都被设置为32位。

引脚功能选择

其中pin0~pin9是位于第0分组。目标pin4对应14-12位,FSEL9有配置示例,由此可知,将14-12位配置为001,即可让pin4成为输出引脚。

GPFSEL0是pin0 ~ pin9的配置j寄存器,GPFSEL1是pin10 ~ pin19的配置寄存器,以此类推,GPFSEL5就是pin50~pin53的配置寄存器。

 配置引脚输出状态

输出集寄存器用于设置GPIO管脚。SET{n}字段定义,分别对GPIO引脚进行设置,将“0”写入字段没有作用。如果GPIO管脚为在输入(默认情况下)中使用,那么SET{n}字段中的值将被忽略。然而,如果引脚随后被定义为输出,那么位将被设置根据上次的设置/清除操作。分离集和明确功能取消对读-修改-写操作的需要。GPSETn寄存器为了使IO口设置为1,set4位设置第四个引脚,也就是寄存器的第四位。

第0~31位归寄存器0管理,若设置为0,则

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值