剑桥大学Raspberry Pi操作系统开发指南问题


9

我是一名高级应用程序开发人员(C#,python),我想着手进行低级嵌入式应用程序开发。剑桥大学发布了一系列教程,教您如何为Raspberry Pi创建名为Baking Pi的操作系统。我打算在此处发布有关本教程的问题,并在进行过程中更新答案。甚至发布一些我自己想出的观点。

所以我一直跟着第一课,我已经很困惑了。这是页面链接

本教程的第一部分说我们需要(我假设)通过将值0x20200000写入寄存器r0来打开GPIO控制器。我在数据表的任何地方都找不到此类相关信息。(链接)。我看过GPIO部分,但没有看到16个寄存器或r0的任何指示。这些信息在哪里?

更新

首先,本教程讨论有关打开OK LED(即状态LED)的问题。您可能想知道手册中的哪个地方说GPIO 16已连接到OK LED。不会的 您需要查看Raspberry Schematics,并找到与status_led连接的GPIO。这是原理图的链接。第2页,块BCM2835。

因此,目标是选择GPIO16引脚。(更多更新即将发布...)

Answers:


5

这是该教程中的相关信息:

计算机中的地址只是数字,因此数字0x20200000恰好是GPIO控制器的地址。这只是制造商的设计决定,他们可以使用任何其他地址(前提是它与其他任何地址都不冲突)。我知道这个地址仅是因为我在手册[3]中进行了查询,但地址没有特定的系统(除了它们都是十六进制的大整数)。

r0只是处理器上的一部分内存,您可以在其中存储所需的任何信息;这些被称为通用寄存器。我们将GPIO控制器的位置写入该位置,以便以后可以重用它,就像在高级编程中通常使用变量一样。

我认为值0x20200000实际上是指第90页上的表中的第一个内存位置。您会注意到,在写入寄存器之前,我们将其递增4,从而为我们Function Select 1(见表)提供了控制几个引脚的寄存器,包括我们要写入的内容。

这些帮助有用?


我的问题是此信息在数据表中的什么地方?
ArmenB 2012年

@ArmenB .:第6.1节,第90页
Jivings,2012年

该文件说:“ GPIO有41个寄存器。” 教程中说的是16。在该部分中没有寄存器r0的指示,也没有数字0x20200000来启用它。
ArmenB 2012年

@ArmenB .:对不起,Armen,我会介绍更多细节。
吉文斯2012年

3

感谢Jivings和emcconville回答了这个问题。

在数据手册pdf中,第6页的ARM物理地址部分,有一个部分说

外设的物理地址范围从0x20000000到0x20FFFFFF。外设的总线地址设置为映射到从0x7E000000开始的外设总线地址范围。因此,此处在总线地址0x7Ennnnnn上公告的外围设备在物理地址0x20nnnnnn上可用。

转到第90页,该表的第一行指出:

0x7E200000 GPFSEL0 GPIO功能选择0 32 R / W

因此0x7E200000转换为物理地址0x20200000,这是GPIO功能选择0位。

至于r0,ARM中有16个通用寄存器,我们可以使用它们存储数字,这就是为什么在本教程中他选择r0的原因,因为它是第一个可用寄存器。


很高兴提供帮助,并提供良好的自我解答,这很好地总结了其他两个方面。
吉文斯,2012年

不,谢谢您花时间回答。我将此发布为社区Wiki,以便其他人可以编辑/修复/完成该帖子。
ArmenB 2012年

1

寄存器r0通过r12是通用的。自然地,最简单的开始是r0。正如Jivings所指出的,该手册列出了每个地址,并指出:

外设的物理地址范围从0x20000000到0x20FFFFFF。


我不能选择两个正确的答案!这真是la子。请修复此网站...谢谢您的输入。我终于了解了RTFM的含义。
ArmenB 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.