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!
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.
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)
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
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.