Cambridge University Raspberry Pi Handbuch zur Entwicklung von Betriebssystemen Fragen

9

Ich bin ein High-Level-App-Entwickler (C #, Python) und möchte mir bei der Entwicklung von Low-Level-Embedded-Anwendungen die Hände schmutzig machen. Die Universität Cambridge hat eine Reihe von Tutorials veröffentlicht, in denen Sie lernen, wie Sie ein Betriebssystem für den Raspberry Pi namens Baking Pi erstellen. Ich habe vor, meine Frage zu diesem Tutorial hier zu posten und die Antworten im Laufe der Zeit zu aktualisieren. Vielleicht sogar einige Punkte posten, die ich selbst herausgefunden habe.

Also habe ich Lektion 1 mitverfolgt und bin schon verwirrt. Hier ist der Seitenlink .

Der erste Teil des Tutorials besagt, dass wir (ich nehme an) den GPIO-Controller einschalten müssen, indem wir den Wert 0x20200000 schreiben, um r0 zu registrieren. Ich kann solche relevanten Informationen nirgendwo im Datenblatt finden. ( Link ). Ich habe mir den GPIO-Bereich angesehen, aber keinen Hinweis auf 16 Register oder r0 gesehen. Wo sind diese Informationen?

AKTUALISIEREN

Zunächst wird im Tutorial über das Einschalten der OK-LED, der Status-LED, gesprochen. Möglicherweise fragen Sie sich, wo im Handbuch steht, dass GPIO 16 an die OK-LED angeschlossen ist. Das wird es nicht. Sie müssen sich die Himbeer-Schaltpläne ansehen und herausfinden, mit welchem ​​GPIO das status_led verbunden ist. Hier ist der Link zu den Schaltplänen. Seite 2, Block BCM2835.

Ziel ist es also, den GPIO16-Pin auszuwählen. (Weitere Updates folgen ...)

ArmenB
quelle

Antworten:

5

Hier sind die relevanten Informationen in diesem Tutorial:

Adressen in Computern sind nur Zahlen, daher ist die Nummer 0x20200000 zufällig die Adresse des GPIO-Controllers. Dies ist nur eine Designentscheidung der Hersteller, sie hätten jede andere Adresse verwenden können (vorausgesetzt, sie widersprach nichts anderem). Ich kenne diese Adresse nur, weil ich sie in einem Handbuch [3] nachgeschlagen habe. Es gibt kein bestimmtes System für die Adressen (außer dass es sich bei allen um große runde Zahlen in Hexadezimalzahl handelt).

r0ist einfach ein Speicherabschnitt auf dem Prozessor, in dem Sie beliebige Informationen speichern können. Diese werden als Allzweckregister bezeichnet. Wir schreiben den Speicherort des GPIO-Controllers an diesen Speicherort, damit wir ihn später wiederverwenden können, wie wir es normalerweise bei der Verwendung einer Variablen in der Programmierung auf hoher Ebene tun würden.

Ich denke, der Wert 0x20200000 bezieht sich tatsächlich auf den ersten Speicherplatz in der Tabelle auf Seite 90. Sie werden feststellen, dass wir ihn vor dem Schreiben in das Register um 4 erhöhen und uns Function Select 1(siehe Tabelle) das Register geben, das einige Pins steuert , einschließlich desjenigen, an den wir schreiben möchten.

Hilft das überhaupt?

Jivings
quelle
Meine Frage ist, wo im Datenblatt diese Informationen enthalten sind.
ArmenB
@ArmenB.: Abschnitt 6.1, Seite 90
Jivings
Das Dokument sagt "Der GPIO hat 41 Register." In diesem Tutorial steht 16. In diesem Abschnitt gibt es weder einen Hinweis auf das Register r0 noch die Nummer 0x20200000, um es zu aktivieren.
ArmenB
@ArmenB.: Sorry Armen, ich werde etwas näher darauf eingehen.
Jivings
3

Vielen Dank an Jivings und Emcconville für die Beantwortung der Frage.

Im Datenblatt pdf, Seite 6, Abschnitt ARM physikalische Adresse , gibt es einen Abschnitt, der besagt

Die physischen Adressen reichen von 0x20000000 bis 0x20FFFFFF für Peripheriegeräte. Die Busadressen für Peripheriegeräte sind so eingerichtet, dass sie ab 0x7E000000 auf den Adressbereich des Peripheriebusses abgebildet werden. Somit ist ein hier unter der Busadresse 0x7Ennnnnn beworbenes Peripheriegerät unter der physischen Adresse 0x20nnnnnn verfügbar.

Auf Seite 90 wird in der ersten Zeile der Tabelle Folgendes angegeben:

0x7E200000 GPFSEL0 GPIO-Funktion Wählen Sie 0 32 R / W.

Der 0x7E200000 übersetzt also in die physikalische Adresse 0x20200000, bei der es sich um das 0-Bit der GPIO-Funktionsauswahl handelt.

Für r0 gibt es im ARM 16 Allzweckregister, in denen wir Nummern speichern können. Deshalb wählt er im Tutorial r0, da es das erste freie Register ist.

ArmenB
quelle
Ich bin froh zu helfen und eine nette Selbstantwort, die die beiden anderen gut zusammenfasst.
Jivings
Nein, danke, dass Sie sich die Zeit genommen haben, um zu antworten. Ich habe dies als Community-Wiki gepostet, damit andere den Beitrag bearbeiten / reparieren / vervollständigen können.
ArmenB
1

Die Registrierung r0durch r12sind allgemeine Zwecke. Am einfachsten ist es natürlich r0. Wie Jivings hervorhob, listet das Handbuch jede Adresse auf und besagt:

Die physischen Adressen reichen von 0x20000000 bis 0x20FFFFFF für Peripheriegeräte.

Emcconville
quelle
Ich kann nicht zwei richtige Antworten wählen! Das ist langweilig. Bitte reparieren Sie diese Website ... Vielen Dank für Ihre Eingabe. Ich habe endlich die Bedeutung von RTFM verstanden.
ArmenB