www.mikrocontroller.net

Forum: Compiler & IDEs ARM Startup Code, IRQ


Autor: Fried Vissel (tich)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fried Vissel (tich)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Fried Vissel (tich)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.