Forum: Mikrocontroller und Digitale Elektronik ARM-Anfänger


von Kroko (Gast)


Lesenswert?

Hallo!

Ich habe mir einen LPC2106 besorgt und habe Crossworks als IDE.
Habe keine Ahnung mit welche Befehle ich Pins auf 1 und wieder auf 0
setze oder wie ich sonstige Funktionen des ARMs programmiere.
Das Problem ist ja, dass es so viele verschiedene Header-Files gibt.
Kann mir jemand helfen oder ist in diesem Forum schon so ein Beitrag.
Tut mir leid, dass ich mit so einfachen Sachen störe, aber jeder muss
mal anfangen.

Mfg Kroko

von ... (Gast)


Lesenswert?

Hm,

prinzipiell mußt Du erstmal gar kein Header File verwenden um einen
Port zu togglen.

Es gibt lt. Usermanual S. 81 für die GPIO 4 Register mit denen Du
Arbeiten kannst. Ablaufen tut das nach folgenden Schema:

- Solls n Ausgang oder n Eingang sein ? Register: IODIR

- Für den Ausgang kannst Du dann mit Register IOCLR und IOSET den Port
Pin setzen oder net.

Das Headerfile dient nur um dir das Leben einfacher zu Machen. Das
Register IODIR liegt an Addresse: 0xE0028008

Du darfst natürlich mit
(*((DWORD *)0xE0028008)) = 0x12345678;
auf das Register zugreifen - Im Allgemeinen schauts mit
IODIR = 0x12345678;
besser aus.

Was das Ding sonst noch kann steht im Datenblatt bzw. Usermanual drin.
Ohne das gibts kein weiterkommen.

cu

von Dietmar (Gast)


Lesenswert?

@ ... cu:

Selbstverständlich braucht man ein Headerfile für die
Registerdefinitionen, und zwar hier das LPC210x.h.

@Kroko:

Ansonsten sind das User Manual und das Data Sheet stets sehr nützlich:

Philips LPC2106-Seite:

http://www.semiconductors.philips.com/pip/LPC2106.html

User Manual:

http://www.semiconductors.philips.com/acrobat/usermanuals/UM_LPC2106_2105_2104_1.pdf

Data Sheet:

http://www.semiconductors.philips.com/acrobat/datasheet/LPC2104_2105_2106-05.pdf

Und wenn mal was nicht wie erwartet geht:

Errata Sheet:

http://www.semiconductors.philips.com/acrobat/erratasheets/2106.pdf

Bei Keil findet man ein paar schöne Beispielprogramme für die Philips
LPC2000 Serien:

http://www.keil.com/download/list/arm.htm

Da ist auch was mit Pin-Ansteuerung dabei (Blinky, Blinky-IRQ,
Konfiguration der I/O. In denen sieht man auch gut, wo welche
Headerfiles eingebunden sind.

Eventuell muß die Software an den LPC-Typ (Auswahl Headerfile mit
Registerdefinitionen) und die Konfiguration an die andere IDE
(Crossworks anstatt Keil µVision3) angepaßt werden.

Gruß

Dietmar

von Frank (Gast)


Lesenswert?

>Selbstverständlich braucht man ein Headerfile für die
>Registerdefinitionen, und zwar hier das LPC210x.h.

So ein Schmarrn. Niemand zwingt einen, ein Headerfile zu verwenden.

*((unsigned int *) 0x12345678) = 12345;

funktioniert doch genauso. Im Header steht zwar nichts anderes drin,
aber gerade am Anfang kann es schonmal nützlich sein, das alles selbst
zu machen, um es besser zu verstehen.

von Dietmar (Gast)


Lesenswert?

Dann machen Philips und Keil also umsonst Headerfiles mit
hardwareabhängigen Registerdefinitionen :-(

Gruß

Dietmar

von Karl (Gast)


Lesenswert?

Nicht umsonst, aber kostenlos.

Nur BRAUCHT man eben keinen Header, nicht zwingend. Und da Kroko wohl
grundsätzliche Probleme hat, kann man das zu Lernzwecken auch mal
weglassen.

von Dietmar (Gast)


Lesenswert?

@Karl:

Man muß sich das Leben aber auch nicht unnötig erschweren:

Bindet man das Definitions-H-File ein, kann man die Peripherals unter
dem Namen exakt wie im Datenblatt ansprechen. Das ist doch besser als:

*((unsigned int *) 0x12345678) = 12345;

Oder???

Sowas macht nur den Code unleserlich.

Wie Kroko, so habe ich vor gut 2 Jahren auch mit C angefangen,
unmittelbar danach kam der ARM-Controller.

Um die Register-Definitionen, habe ich mich nie gekümmert, sondern sie
sofort eingebunden.

Wem das zu schwer ist, für den ist aber auch der ARM-Controller eine
Nummer zu hoch, oder?

Haben wir heute Vollmond, oder was?
Und gegen Polen haben wir doch auch gewonnen.

Gruß

Dietmar

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Argumentation von Karl ist schon nachvollziehbar. Wenn man sowas
noch nie "von Hand" gemacht hat, ist man eine Abstraktionsebene
weiter von der Hardware entfernt, und so auch eine Ebene weiter davon,
zu verstehen, was da eigentlich vor sich geht.
Daß das ein echtes Problem sein kann, sieht man in Anbetracht mancher
Anfängerfragen.

Es ist auch durchaus sinnvoll und lehrreich, das Compilat solcher
einfach(st)en Programme auf Assemblerebene anzusehen, um
nachzuvollziehen, was der Compiler da anstellt. Das setzt eine gewisse
Grundkenntnis in Assembler voraus, aber die sind bei der Beschäftigung
mit Microcontrollern sowieso ratsam. Zugegeben, ARM-Assembler ist schon
ziemlich ... heftig, damit sollte man vielleicht nicht gerade anfangen.

Natürlich ist es sinnvoll, im täglichen Einsatz alle Hilfsmittel zu
verwenden, die einem das Leben einfacher machen, aber es ist eben  auch
sehr wichtig, zu verstehen, was das Hilfsmittel macht, das einem das
Leben einfacher macht.

Ganz plumpes Beispiel: Erst wer mit Hammer und Meißel einen Schlitz in
die Wand gestemmt hat, weiß die Errungenschaft der Schlitzfräse richtig
zu schätzen :)

Und nur mit diesem Wissen hat man dann auch die Chance, sich mal eben
so eine Headerdatei an einen neuen bislang nicht vom Compilerhersteller
mit einer Headerdatei gewürdigten Controller zu erstellen.

von Dietmar (Gast)


Lesenswert?

@Rufus T. Firefly:

Schwülstige Wortlaute, ohne Ende:

Mit einem ARM7 aus dem Nichts anzufangen, ist mir ehrlich gesagt sehr
suspekt.

Ein 8080, und mit Assembler anfangen, wäre da eher geeignet.

Gruß

Dietmar

von Sebastian B. (sebbel)


Lesenswert?

ist es nicht egal mit welchem Prozessor man anfängt. Am Ende ist es doch
immer nur Bit-Geschupse in den Registern, ob nun 8051, AVR, ARM, PIC,
...

Das einzige was bei den Prozessoren unterschiedlich schwer ist, ist die
Beschaltung, aber die scheint er ja schon fertig zu haben, denn sonst
würde er ja nicht schon programmieren wollen, oder?

Also ich kann mich den konstruktiven Beiträgen nur anschließen und Dir
empfehlen mal wenigstens ein Programm entweder in ASM zu schreiben oder
halt in C ohne Header-File.
Danach kannst es Dir ja einfacher machen und die Header-Files
einbinden.

Gruss

Sebastian

von Kroko (Gast)


Lesenswert?

Danke für die vielen Antworten!
Mein Entwicklungs-Board ist schon länger fertig.
Werde das, wasw ihr mir geraten habt, mal ausprobiern.

Mfg Kroko

von Dietmar (Gast)


Lesenswert?

@Kroko:

Dann kopier dir wenigstens ein paar #defines aus dem
Register-Headerfile in das Main-C-File. Und wenn es nur die sind, die
die I/O-Ports betreffen.

Ein Bit mit: IOSET1 = (0x01 << 7); zu setzen, ist doch eleganter und
übersichtlicher als *((unsigned int *) 0x12345678) = 12345;

Oder?

Gruß :-)

Dietmar

von Dietmar (Gast)


Lesenswert?

@Kroko:

Um welches Demoboard handelt es sich?

@Sebastian:

Ein ARM7 wie die LPC2000 ist schon ein anderes Kaliber als ein 8051.
Irgendwann muß man sich da auch mal mit solchen Dingen wie der
Startup.s (Stack-Initialisierung für alle Betriebsmodi, usw.)
beschäftigen, den Betriebsmodi, dem Interrupt-Controller, und eventuell
auch mit Pipelining-Effekten und einigen anderen Feinheiten, die ein
8051 so nicht hat.

Natürlich, so ein modernes ARM Demoboard kann man am Schreibtisch
betreiben und braucht (zunächst) keine Laborausstattung, das ist schon
eine feine Sache.

Ich hatte ja ursprünglich auch gemeint, einzig und alleine nur das
Register-H-File einzubinden, und weiter nichts. Das haben sogar die
einfachen Beispiele wie "Hello World".

Gruß

Dietmar

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.