Forum: Compiler & IDEs ARM Startup Code, IRQ


von Fried V. (tich)


Lesenswert?

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

von Andreas K. (a-k)


Lesenswert?

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.

von Fried V. (tich)


Lesenswert?

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

von Martin Thomas (Gast)


Lesenswert?

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)

von Fried V. (tich)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.