Forum: Mikrocontroller und Digitale Elektronik Fragen zu ARMs


von ARMdran:D (Gast)


Lesenswert?

Hallo,

ich hätte ein paar (vielleicht doofe) Fragen zu ARMs.

Ich habe mir ein paar Beispiele angeschaut (z.B. 
http://www.mikrocontroller.net/articles/ARM-elf-GCC-Tutorial). Diese 
bezogen sich ja auf die LCP Reihe von NXP. Gekauft habe ich mir ein 
LPC1769 Board von LPCXpresso mit Entwicklungsentgebung von Code Red. Ich 
dachte für ARM Prozessoren gibt es nur einen Compiler. Wärend im 
Tutorial z.B.
GPIO0_IODIR |= ( 1<<25 ); // Pin 25 auf Ausgang
GPIO0_IOSET  = ( 1<<25 ); // Pin 25 auf HIGH schalten
verwendet wird sieht es in den mitgelieferten Beispielen so aus...
LPC_GPIO0 -> FIODIR |= ( 1<<25 );
Warum?
Wo kann ich diese ganzen Befehle nachschlagen??? Im Manual vom LPC1769 
stehen nur Begriffe z.B. FIODIR etc drin. Z.b. hatte ich mir aus dem 
Datenblatt PINSELx rausgesucht. Durch die Beispiele habe ich gefunden, 
dass ich das Register durch BITCON->PINSELx ändern kann. Doch wo steht 
das geschrieben? Oder gibt es "nur" die Beispiele + zusammenreihmen?
Danke.
Grüße

von Frank K. (fchk)


Lesenswert?

Jeder ARM ist anders!

Gemein ist allen nur der von ARM lizensierte Kern. Alles andere macht 
jeder wie er will.

Bei NXP gibt es zwei Möglichkeiten, die GPIOs anzusteuern: eine langsame 
(kompatibel zu den allerersten LPCs) und eine neue über einen 
schnelleren Datenpfad. Nach einem Reset ist zunächst die alte, langsame 
Anbindung aktiv. Die schnellere Verbindung wird erst nach einer 
Umschaltung aktiv.

Beide Datenpfade haben unterschiedliche Register. Das steht alles in der 
Dokumentation zu dem jeweiligen Prozessor drin.

fchk

von Michael G. (let)


Lesenswert?

Die LPC21xx aus dem Tutorial unterscheiden sich ein wenig von den 
LPC17xx. Unterschiedlich ist zunächst schonmal der Kern. Die 21er haben 
einen ARM7 (die ich nach wie vor sehr schätze), während die 17er einen 
Cortex M3 haben.
Dann ist auch die Peripherie doch etwas verschieden.

Dein Compiler kann mit beiden Chips umgehen aber das bedeutet nicht das 
Software die für den LPC2124 gedacht ist auch auf einem 1769 läuft. Das 
liegt zunächst einmal daran das die Header Dateien anders aufgebaut 
sind. Früher war es bei den LPC üblich das die Register direkt über 
Makros angesprochen wurden. Inzwischen geht das über Strukturen. Könnte 
man auch anders machen, die fertigen Header sind jetzt aber nunmal so.

Ich würde sagen das du das Tutorial hier für dein Board vergessen 
kannst. Die Unterschiede sind letztlich einfach zu groß, auch wenn es 
alles irgendwie ähnlich aussieht. Halte dich an den Beispielen die bei 
der CodeRed IDE dabei sind.

> Wo kann ich diese ganzen Befehle nachschlagen???
Deine "Befehle" sind einfache Zuweisungen. Du mußt das Datenblatt mit 
dem Headerfile (LPC17xx.h) abgleichen. Dort findest du die beschriebenen 
Register wieder, nur halt in Strukturen verpackt. Aber wie man darauf 
zugreift hast du ja an den Beispielen schon gesehen.

Es gibt noch eine Alternative zu den Registerzugriffen. Die sogenannte 
CMSIS Bibliothek bietet Funktionen für die gängigsten Zugriffe. 
Zumindest in einigen Beispielen müßte die verwendet werden. Anstelle 
einer Zuweisung an FIODIR wird dann z. B. GPIO_SetDir() aufgerufen. Das 
Datenblatt mußt du aber trotzdem lesen.
CodeRed verwendet anscheinend eine abgespeckte Version dieser 
Bibliothek. Bei NXP gibt es eine vollständige Version (mit Beispielen) 
zum Download. Suche dort nach CMSIS. Es gibt mehrere! Du brauchst die 
für die LPC17xx Reihe. Darin enthalten ist auch eine .chm Datei (Windows 
helpfile) mit der Dokumentation.

Frank K. schrieb:
> Bei NXP gibt es zwei Möglichkeiten, die GPIOs anzusteuern:

Nur bei den ARM7 Controllern. Die LPC17xx kennen nur noch fast-io. Bei 
den 11xx/12xx/13xx geht das nochmal anders.

von ARMdran:D (Gast)


Lesenswert?

Hallo zusammen,

danke für die ausführlichen Erklärungen!
Hat mir sehr geholfen!
Nochmals vielen Dank!
Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.