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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

安卓 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…

【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…

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

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

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

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

【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…

Android Camera调用流程

一个流程图画的非常好的文章 http://blog.csdn.net/lushengchu_luis/article/details/11033095 1、Packages/apps/到framework 打开Camera ./packages/apps/Camera/src/com/android/camera/Camera.java 进来第一个肯定是onCreate(Bundle icicle) { 这里是开始了一个Camera…

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

1 GaitSet_DataLoader.py import numpy as np # 引入基础库 import os import torch.utils.data as tordata from PIL import Image from tqdm import tqdm import random# 1.1定义函数,加载文件夹的文件名称# load_data函数, 分为3个步骤:…

linq from 多个sum_快手重拳打击劣质电商 7月以来封禁700多个团伙账号

何为劣质电商?炒作演戏?PK售卖劣质商品?私下交易?夸大其词?……在快手电商的定义里,有上述不良行为的,都可以定义为劣质电商。快手电商站内官方号“快手卖货助手”日前发布第 11 期“自售或PK销…

win10怎么更改账户名称_Win10邮件功能如何查看邮件

win10的用户当中,一方面有说系统臃肿的,另外一方面有说功能多了不少,好用。不管是出于前者还是后者,win10功能确实多了不少,尤其是一些比较常用的功能,比如说邮箱功能,一般用户可能会选择登录网…

AttributeError: ‘set‘ object has no attribute ‘items‘

AttributeError: ‘set’ object has no attribute ‘items’ 出现这个问题,原因可能是定义的header有问题 正确如下: header{“key”:“value”} 如果是直接在请求数据中复制,很有可能会忽略键和值的冒号。

使用eclipse以及Juint进行测试

打开eclipse后,点击左上角的File,新建一个project,命名为testJunit,然后在src目录下新建两个包,分别命名为TestScore和Test(这是文件夹里没有文件所以是白色)。 在TestScore中新建一个class,命名为Score.ja…

excel单元格下拉选项怎么设置_单元格下拉效果怎么实现?

单元格右边的下拉菜单怎么做的?感觉逼格略有提升啊上视频单元格下来效果https://www.zhihu.com/video/1249633577441800192

电脑如何测网速_物联网卡的网速到底怎么样呢

最近不少朋友发私信问我,物联网卡网速到底怎么样,和手机卡的网速有没有什么区别?其实关于网速这个问题,我已经重复解释了很多遍。只要是走公网的流量卡,在不限速的情况下,基本是和你手机卡网速是一致的&…