Forum: Mikrocontroller und Digitale Elektronik LPC2134 Startup Code bzw. "Blink Beispiel"


von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Guten Morgen allerseits,

ich spiele grad etwas mit einem (alten) Board mit einem LPC2134 herum, 
und möchte anhand diesem mal etwas in die ARM-Welt schnuppern (ich hab 
bisher recht viel mit AVR gemacht). Ich nutze die gcc-toolchain unter 
Linux.

Das ARM-GCC-Tutorial hier war schon mal recht hilfreich, ich hab auch 
schon bissel was gebastelt, aber das funktioniert - wie zu erwarten war 
- nicht. ich kann mein hex-File zwar flashen, es passiert aber nix, bzw. 
ist die CPU offensichtlich nach Reset wieder im ISP-Modus (Senden von 
"?" liefert "Synchronized")

Ich bin mir auch ziemlich sicher, dass es daran liegt dass ich keinen 
Sartup-Code eingebunden habe. Was wiederum daran liegt dass ich nicht 
wusste dass man sowas braucht (ich bin halt verwöhnt vom AVR)

meine Recherchen werden dadurch erschwert dass a) die CPU ziemlich 
veraltet ist, und b) die irgendwie jeder anders nennt (LPC2000, LPC21xx 
und weitere Permutationen, bzw. wohl auch "ARM7TDMI" (was immer das 
wieder bedeutet)

Vermutlich werde ich in weiterer Folge noch in 42 andere Fallen tappen 
;-)

Zwei Fragen:

a) hat jemand einen (einfachen, verständlichen) Startup-Code für mich? 
(Alles was ich bisher so finde sieht unheimlich komplex aus, weil da 
wohl viel SCB/PLL-Initialisierung drinnen ist, die ich ja im main.c 
mache. Außerdem mag ich es nicht, Sachen "irgendwoher" 
zusammenzukopieren, ich mag gerne verstehen was da abgeht)

b) hat jemand ein minimalistisches "hello World" (wohl eher "Blink") für 
mich? Daraus kann ich mir dann auch Startup-Code etc. ableiten...

Herzlichsten Dank!

von Johannes S. (Gast)


Lesenswert?

hier hatte ich doch schon mal einen Link zu Beispielen gepostet:
https://www.nxp.com/downloads/en/snippets-boot-code-headers-monitors/LPC213x_Family.zip
Mit dem Timer Beispiel hast du doch ein Blinky incl. Startup code. Den 
muss man allerdings mal durchsehen und kontrollieren ob das zur 
vorhandenen Hardware passt, die Beispiele werden für irgendein Keil 
Evalboard sein.
Und die Demo von Keil uVision sollte trotz 32k Limit reichen erstmal ein 
funktionierendes Blinky zu flashen, wenn das klappt kann man immer noch 
auf gcc portieren.

Als Gegenstück zum WinAVR gab es früher noch WinARM von M. Thomas, in 
dem Paket waren auch Beispiele drin.
ARM7TDMI ist die Prozessorarchitektur, die Cortex-M sind die deutlich 
besseren und einfacher zu programmierenden Nachfolger.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

ja, das zeug hab ich eh rumliegen, danke nochmal.

ich fang damit aber wenig an, ich find da nichtmal ein makefile. 
Vermutlich weil das auf "uVision" abgestimmt ist (was ich nicht habe, 
sondern die "normale" gcc-toolchain)

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

grad gesehen dass ich offensichtlich auch noch ein "Linker Skript" 
brauche... und das sieht ja fast noch komplizierter aus als der 
Startup-Code :-(

ich glaub das wars dann mit meinen ARM-Versuchen, ich werde reumütig zu 
meinen ATmegas zurückkehren

von Darth Moan (Gast)


Lesenswert?

Moin,

ich hab grad mal den Gockel befragt, das LPC2134 soll ja tatsaechlich
einen ARM7TDMI Core haben. Das hatte ich mal vor 18Jahren als Plattform.
Mit ARM und Thumb Code. Wobei alle ISRs im ARM Code anfangen muessen
und lauter so schmarn. Ich wuerde echt einen Cortex M0/M3/M4/M7 
empfehlen.
Komplette Boards Mit Debug-HW gibts da schon ab 10-20Teuronen.
Und komplette Beispielprojekte kriegt man auch fuer fast alle Boards.

von W.S. (Gast)


Lesenswert?

Michael R. schrieb:
> grad gesehen dass ich offensichtlich auch noch ein "Linker Skript"
> brauche... und das sieht ja fast noch komplizierter aus als der
> Startup-Code :-(
>
> ich glaub das wars dann mit meinen ARM-Versuchen, ich werde reumütig zu
> meinen ATmegas zurückkehren

Ach was. Guck dir hier im Forum mal die Lernbetty an, die war auch ein 
ARM7TDMI und der Startupcode für all diese ARM7TDMI's ist näherungsweise 
gleich. Bei deinem LPC2134 hast du ja 128 K internen Flash im Gegensatz 
zur Lernbetty, die nur externen Flash hatte (und deswegen auch etwas 
schwieriger zu 'brennen' war).

Und die Mär vom Linkerscript kannst du auch ignorieren. Das ist nur 
aufgesetztes Gesülze von Leuten, die sich besonders wichtig machen 
wollen. Bei der Lernbetty hatte ich zwar hauptsächlich mit dem Keil 
gearbeitet, aber ich hatte dann das Ganze auch noch mit dem GCC 
(Yagarto, Version hab ich vergessen) durchgezogen. Ein Linkerscript war 
dazu überhaupt nicht nötig.

Guck dir einfach die "cccgcc.bat" an, dazu die zwei "compile_gcc.xcl" 
und "link_gcc.xcl".

Sicherlich wirst du den Startupcode der BettyBase editieren müssen, aber 
das betrifft eben nur den ganzen Kram, der wegen des externen 
Busanschlusses nötig war. Das Editieren wird also auf Löschen von Zeilen 
hinauslaufen.

Und wenn du dir was Gutes tun willst, dann benutze zuerst den Keil und 
nicht den GCC. Beim Keil hast du zwar ne Codebegrenzung bei 32K, aber 
für's Erste reicht das völlig aus (mach erstmal was so großes, daß die 
32K nicht reichen!) und zweitens ist der Keil deutlich besser als der 
doch recht zerrige GCC, der es nicht fertigbringt, sinnvolle Pragmas 
(arm und thumb) innerhalb eines C-Files zu kapieren, SVC's kann er auch 
nicht und die Assembler-Notation des GCC ist gräßlich im Vergleich zum 
Keil. Und obendrein ist der Code des GCC selbst bei heftigster 
Optimierung noch immer um 10..20% größer als der vom Keil.

W.S.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

W.S. schrieb:
> Guck dir hier im Forum mal die Lernbetty an

Die schau ich doch schon seit einer Woche an ;-)

Danke für deine Antwort, ich werd nochmal drüber schlafen.

W.S. schrieb:
> benutze zuerst den Keil und nicht den GCC
Ich bin "Linux-sozialisiert", und arbeite seit 25? Jahren mit gcc, make 
usw. Von daher mag ich erstmal einen Bogen um keil machen

von Jim M. (turboj)


Lesenswert?

Michael R. schrieb:
> Ich bin "Linux-sozialisiert", und arbeite seit 25? Jahren mit gcc, make
> usw. Von daher mag ich erstmal einen Bogen um keil machen

Dann sollte ein LD Skript aber kein Showstopper für Dich sein.

Lieder wird man nicht viel auf Seiten wie Github finden, denn bei der 
Eröffnung von Github war die Karawane IIRC schon bei Cortex-M3 
angekommen.

LPCXpresso gibt es auch als Linux Version. Dort sollte man sich Linker 
Skripte und Header raus nehmen können.

Michael R. schrieb:
> die irgendwie jeder anders nennt (LPC2000, LPC21xx
> und weitere Permutationen, bzw. wohl auch "ARM7TDMI" (was immer das
> wieder bedeutet)

LPC2000 = Große Familie von NXP µCs
LPC21xx = Ein Teil dieser Familie
ARM7TDMI = Ein für µCs verwendeter Core von ARM. Vorgänger der 
Cortex-Ms, kennt ARM und Thumb Instruktionen. Den haben viele Hersteller 
lizensiert, gilt als veraltet. Ich habe seit etlichen Jahren keine neuen 
Chips mit ARM7TDMI Core gesehen.

von W.S. (Gast)


Lesenswert?

Michael R. schrieb:
> Die schau ich doch schon seit einer Woche an ;-)

Hä? Die war aber (wenn ich mich recht erinnere) ein LPC2220 und kein 
LPC2134.

Aber wenn du bereits seit 25 Jahren mit Linux tatsächlich arbeitest, 
dann sollte es dir kein Problem sein, die genannte cccgcc.bat in ein 
gewöhnliches Shellscript umzuschreiben. Wie gesagt, ich hab damals auch 
kein Linkerscript gebraucht, weil der GCC-Linker sowas bereits default 
eingebaut hat.

Ich denke mal, außer dem Überprüfen der jeweiligen VIC-Interruptnummern 
bleibt nicht viel an Umarbeiten, um mit den lowlevel-Treibern der 
Lernbetty auch auf deinem LPC2134 flott zu kommen. Und wenn erstmal ne 
Serielle für's Kommandoprogramm in Gang gekommen ist, dann hast du die 
Sache in der Tasche.

W.S.

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.