arduino i2c 如何写16位寄存器_树莓派3B开发Go语言(二)寄存器版本GPIO

47fd92a0d989a00dee3234334907ce31.png

作者:爪爪熊
链接:https://www.jianshu.com/p/0495c0554a63
來源:简书

之前将go语言的运行环境给搭建起来了,但是没有开始真正的试试Go 语言操作树莓派硬件的效果。

一、树莓派3B硬件介绍

树莓派3B采用了博通的BCM2837方案,而树莓派2采用的是博通的BCM2836方案,这两个方案 树莓派2采用32bit的 ARMv7指令集的 ARM Cortex-A7 内核,树莓派3B采用了 64bit的 ARMV8指令集的 AR Cortex-A53内核,看起来BCM2837似乎略胜一筹,毕竟升级到了64位处理器。一下是树莓派3B的样图:

46ef2fd55bd09966d613140b52f580c9.png

树莓派3B.png

网上查阅了一圈资料,发现BCM2837的资料都没放出来,在官网上找到了一则说明:

This is the Broadcom chip used in the Raspberry Pi 3, and in later models of the Raspberry Pi 2. The underlying architecture of the BCM2837 is identical to the BCM2836. The only significant difference is the replacement of the ARMv7 quad core cluster with a quad-core ARM Cortex A53 (ARMv8) cluster.

The ARM cores run at 1.2GHz, making the device about 50% faster than the Raspberry Pi 2. The VideocoreIV runs at 400Mhz.

Also see the Raspberry Pi 2's chip BCM2836 and the Raspberry Pi 1's chip BCM2835

看样子官网说外设没差别,就核心换了一下,那大致可以认为外设包括I2C、GPIO、SPI、timer这些基本的东西都没有怎么变化才对。不过为了保险起见,还是查阅了相关文档。以下是树莓派3B GPIO引脚图。

f90e34e395006af46f458d7f6389d363.png

树莓派3B 接口.png

对比一下树莓派2的相关引脚图:

cff267428472cf542bc639801d7a1b4e.png

树莓派2 接口.png

仔细查阅了下,这上面常用的GPIO,SPI,I2C,UART都提供了。这还算好,发现常用的PWM不见了,这可有点麻烦了,后面再继续研究PWM。

二、点亮LED灯

我们尝试下所有开发板的第一个例程,点亮LED灯。这里找寻了一会暂时觉得可以使用下 nathan-osman 大神的 go-rpigpio 库。

1

安装好了敲入以下代码:

 1

保存并编译:

1

这时候我们在 GPIO2 和 GND 之间串上一个 LED 灯 和一个 1K的电阻,发现 LED灯已经开始以飞快的频率闪烁了。

前一小节通过了调用github上某位同道中人写好的库,实现了对GPIO的操作,这里从原理上分析如何操作 树莓派3B 的寄存器,也是从最简单的例子开始,点亮第二个LED灯。

所以我们现在的任务:通过操作寄存器的方式点亮第二个LED灯(板子上的第10脚,对应BCM.GPIO15,也是之前图中的RXD)

94595f872a474effb4688d1a7ea271e7.png

BCM.GPIO15.png

三、分析下树莓派硬件寄存器

BCM2835数据手册

这里因为之前查阅了官网的说明,BCM2837 和 BCM2835 在外设这一块是没有变化的,所以我们可以直接参考 BCM2835 的数据手册。我们直接翻阅到 89 页左右,这里就是我们的目标了,GPIO 主要在第六章,这里找到下面这个表格:(图片部分截取)

d9558c4253e983090dbeb5224bf27a55.png

寄存器地址.png

可以看到在芯片地址中 GPIO 主要分布在 0x7E200000 这个地址往后走的一部分,最大的地址是 0x7E200B0。我们接着查阅芯片手册中关于每个寄存器作用。最后确认下来,如果我们要点亮那个LED灯,需要将 BCM.GPIO15设置为输出,且输出一个高电平就可以了。通过找寻寄存器对应的区域,判断到需要将下面图2中15位设置为1(BCM.GPIO15设置为输出模式)。

1b3db9fff5562b8e2efb2a0531b01edc.png

GPIOAFSR1.png

进一步设置中需要对输出寄存器相关位进行赋值,可以将 BCM.GPIO15 设置为高,也就是下图3中寄存器相关位。

b99aecfc6315a2effdda517bd72bdf23.png

GPSET0.png

当时设置了输出位为高电平可以点亮LED灯,同时也需要输出位为低电平以关闭LED灯,也就是下面图4这个寄存器。

3dd56b9e09afbc8ad265307e05561268.png

GPCLR0.png

了解清楚我们要操作的寄存器后,我们需要进一步确定这个地址到底是多少,通过手册第5页 图5 我们可以看出实际上ARM的MMU把上面的 0x7E200000 这种实际地址映射到了0x200000000x40000000 这个地址上去,但是具体地址是多少也不是很清楚,这里就去找到了文档 bcm2835 的c语言程序找寻蛛丝马迹。后来发现了可以通过读取 /proc/device-tree/soc/ranges 找到具体的外设地址和范围,按照实际的偏移进行映射就可以使用了。

32083b19ff140d808d0182a8d9f4ad8c.png

地址映射图.png

四、实战

经过了上面一圈的查资料、分析,发现思路越来越明朗了,这里就开始这几实战了。Go 语言对于指针操作会比C语言要求更为严格一点,也没有宏定义可以使用,这里就直接定义到const中。

 1

本文源码地址参见 github


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

115d38b73b6994212dd9a93f99cfbb34.png

Golang语言社区

ID:Golangweb

www.bytedancing.com

游戏服务器架构丨分布式技术丨大数据丨游戏算法学习

c6eb3ee5dfbaf95a8ac3f3b1e771637f.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android aidl在Framework的使用

为何要做这个 我要在framework的PhoneWindowManager.java里面调用LightService.java里面的函数,用来做灯光的提示之类的,为何我要在PhoneWindowManager.java里面加这个呢,这里就不做讨论了,但是直接调用哪些接口是不行的&#xf…

没有理智的欲望会走向毁灭,没有欲望的理智会永守清贫

欲望是人类的本性,哥伦布因为它片帆浮海、横渡大洋发现了美州。理性是人类的禀赋,哥白尼因为它仰望星空、冥想终生提出了日心说。在金融市场上没有理智的欲望会走向毁灭,没有欲望的理智会永守清贫。转载于:https://www.cnblogs.com/timlong/p/6509870.html

【Pytorch神经网络实战案例】25 (带数据增强)基于迁移学习识别多种鸟类(CUB-200数据集)

1 数据增强 在目前分类效果最好的EficientNet系列模型中,EfficientNet-B7版本的模型就是使用随机数据增强方法训练而成的。 RandAugment方法也是目前主流的数据增强方法,用RandAugment方法进行训练,会使模型的精度得到提升。 2 RandAugment…

Capture images using V4L2 on Linux

这文章相当好,没有理由不转载 I have always been using OpenCV’s VideoCapture API to capture images from webcam or USB cameras. OpenCV supportsV4L2 and I wanted to use something other than OpenCV’s VideoCapture API so I started digging up about …

diskgenius 数据迁移_U盘格式化后数据恢复免费方法教程

U盘里的数据一般都很重要,比如论文或者办公文件,而有时候我们会被病毒或者误操作把U盘给格式化了,这时候要怎么恢复U盘里的数据呢,只有一个办法,就是用U盘数据恢复软件,但网上此类软件虽然很多,…

结对编程1

Deadline: 2017-3-15 12:00AM,以博客发表日期为准。 评分基准: 按时交 - 有分,检查的项目包括后文的三个方面 题目要求代码提交博文规范晚交 - 0分迟交两周以上 - 倒扣本次作业分数抄袭 - 倒扣本次作业分数题目描述: 不知道大家是…

【Pytorch神经网络理论篇】 34 样本均衡+分类模型常见损失函数

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

我的2015年

2015年的收获 1、结婚了,这是很开心的一件事情,从刚开始的吵吵闹闹,到现在的结婚成家,自己的责任也增加了许多。 2、老婆怀了宝宝,这件事跟结婚的喜悦是一样的,从开始到现在,很多人都在问我&a…

安卓 camera 调用流程_安卓如何做出微信那样的界面仿微信“我”的界面1/5

本系列目标通过安卓编程仿写微信“我”的界面,让大家也能做出类似微信界面.效果图如下:本文目标做出页面顶部的相机部分(其他部分在后续文章中逐步分享).效果图如下:实现方案通过截图工具或者下载一张照相机照片,放到工程的src/main/res/drawable目录下,命名为camera.png添加一…

【Pytorch神经网络实战案例】26 MaskR-CNN内置模型实现目标检测

1 Pytorch中的目标检测内置模型 在torchvision库下的modelsldetecton目录中,找到__int__.py文件。该文件中存放着可以导出的PyTorch内置的目标检测模型。 2 MaskR-CNN内置模型实现目标检测 2.1 代码逻辑简述 将COCO2017数据集上的预训练模型maskrcnm_resnet50_fp…

MTK平台Android4.4 拍照默认图片格式修改

因为摄像头效果要调试,需要把摄像头拍照的照片格式修改了 晚上看了一下资料,这个链接,这个链接比较有用 http://www.cnblogs.com/peterzd/archive/2012/10/11/2695640.html 里面有一段话这样写: ** Environment.getExternalS…

法与时应,度与情合

不能制定脱离实际的法度,否则就是恶法,不可操作,事与愿违。转载于:https://www.cnblogs.com/jcode/p/6514698.html

【Pytorch神经网络实战案例】27 MaskR-CNN内置模型实现语义分割

1 PyTorch中语义分割的内置模型 在torchvision库下的models\segmentation目录中,找到segmentation.Py文件。该文件中存放着PyTorch内置的语义分割模型。 2 MaskR-CNN内置模型实现语义分割 2.1 代码逻辑简述 将COCO 2017数据集上的预训练模型dceplabv3_resnet101…

怎么查看电脑内存和配置_电脑内存不足处理方法,电脑卡死处理方法。

超过10万人正在关注赶快来关注吧,这里有你想找的热点资讯,这里有你想要的各种资料,还有海量的资源,还在等什么。快来关注,大佬带你开车。电脑系统经常奔溃,软件经常运行不了,开不了机&#xff0…

前端开源项目周报0307

由OpenDigg 出品的前端开源项目周报第十一期来啦。我们的前端开源周报集合了OpenDigg一周来新收录的优质的前端开源项目,方便前端开发人员便捷的找到自己需要的项目工具等。 react-trend 简单优雅的光线 react-progressive-web-app 优化ProgressiveWeb应用开发 pull…

ubuntu下面挂载mtp设备的目录位置

/run/user/1000/gvfs/mtp:host%5Busb%3A003%2C029%5D/内部存储设备/ 我的手机是没有SD卡的,每次都找不到,记录一下这个位置

【Pytorch神经网络理论篇】 35 GaitSet模型:步态识别思路+水平金字塔池化+三元损失

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

win7分区软件_神奇的工作室win7旗舰版重装系统连不上网怎么解决

深度技术win7系统下载有的时刻我们的电脑安装、重装了win10操作系统之后有的小伙伴们就发现了自己的电脑连不上网了。对于这种问题小编以为可能是我们的电脑在安装系统的过程中泛起了一些内部组件的冲突或者是由于网卡驱动没有安装好导致的,可以通过重新安装、重装驱…

290. Word Pattern

题目: Given a pattern and a string str, find if str follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str. Examples: pattern "abba", str "…

【Pytorch神经网络实战案例】28 GitSet模型进行步态与身份识别(CASIA-B数据集)

1 CASIA-B数据集 本例使用的是预处理后的CASIA-B数据集, 数据集下载网址如下。 http://www.cbsr.ia.ac.cn/china/Gait%20Databases%20cH.asp 该数据集是一个大规模的、多视角的步态库。其中包括124个人,每个人有11个视角(0,18&am…