Hi, ich bitte (mal wieder) um eine Erleuchtung. Im Startup Code finde ich: Vectors: LDR PC, Reset_Addr LDR PC, Undef_Addr LDR PC, SWI_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr .long 0XB9205F80 /*0xB8A06F58 startup checksum */ @ /* LDR PC, IRQ_Addr*/ LDR PC, [PC, #-0xFF0] /* IRQ vec. addr. reg. */ LDR PC, FIQ_Addr .... Die Zeile LDR PC, [PC, #-0xFF0] verstehe ich nicht: Er lädt den PC mit #-0xFF = FFFFF010 = VICIntEnable Register, das ist doch wohl kaum die Addi wo er hinspringen soll? Wo ist mein Denkfehler? Danke, Fried
Wenn in einem Befehl auf den PC zugegriffen wird, liegt dessen Inhalt meistens 8 Bytes hinter dem Befehlsanfang. Der Befehl steht an 0x18. Der PC also an 0x20. Und 0x20-0xFF0 = 0xFFFFF030.
Danke, ich glaube jetzt habe ich es verstanden. Die Dokumentation der Startups ist aber auch bei allen Herstellern (Keil, Rowley, iSystem, WinArm etc.) wie ich finde recht mager, aber vielleicht muss man ja auch nur die ASM-Befehle des ARM besser verinnerlichen. Aber auch hier macht es einem die Doku nicht immer leicht! Gruß Fried
Ja, ein wenig ARM-Assembler-Wissen sollte man sich aneignen, wenn man Startup-Codes aus diversen ARM-Beispielen genau nachvollziehen bzw. anpassen will. Ist aber nicht so wild, man muss dazu nicht den gesamten Befehlssatz auswendig können, denn die Codes für Startup und Exceptions sind meiste recht ähnlich. Zur Dokumenation im konkreten Fall vgl. User Manual des verwendeten Controllers und Dokumentation des Lizenzgebers. Bei gezeigten Beispiel also das Manual von NXP und die ARM(7TDMI)-Dokumentationen von arm.com (evtl. noch das "ARM-ARM"-Buch/pdf). Im User-Manual der mit bekannten LPC2000 wird sowohl die Spunganweiung am IRQ-Vector als auch der Checksummeneintrag erläutert. Ich weiss, dass die Dokumentation der Beispiele in WinARM besser sein könnte, mir fehlt die Zeit (und manchmal einfach auch nur die Lust), zu jeder Zeile noch lange Erläuterungen zu schreiben. Nehme aber gerne Beispiele in die Sammlung auf, also auch besser dokumentierte von Dritten. (E-mail-Adresse in readme.txt bzw. readme.htm im WinARM-Packet)
Hallo, vielen Dank Euch allen für die wirklich kompetenten wertvollen Hilfestellungen. Im Anhang habe ich mal die Demo für meinen ARM LPC2138 Timer IRQ angefügt, mit eigenem modifiziertem Startup und allen .c und .h files. Ich habe mich bemüht ausführlich zu kommentieren, es ist auch nichts direkt aus lizensierten Files von Keil o.ä. übernommen. Fragen beantworte ich gerne. Mein Entwicklungssystem ist z. Zt. das iFDev von iSystems, Rowley habe ich etwas beiseite gelegt weil die Kommunikation mit meinen Olimex USB Tiny etwas hakelt. Angenehm am iSystems ist auch dass man den kleinen Dongle mit dem LPC2138 immer mitnehmen kann (keine externe Stromversorgung nötig) und der Debugger dann in realtime läuft. Die Demo ist auf diesem System getestet, den Quarz habe ich gegen einen 14,7456 Mhz gewechselt, aufgrund von Hardwareanforderungen (u.a. Einsatz des Olimex PLC2138 Boards, dieses läuft übrigens super mit dem iFDev Dongle. Weil ich ausserdem noch die Proteus VSM nutze, und dieses System nur mit der GCC Toolchain 3.3.1 läuft, habe ich diese Toolchain auch in iFDev eingebunden. Geht ohne Probleme. Gruß Fried
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.