Hallo miteinander, ich habe mal ne Frage zum Interrupt beim ARM7 mit Winarm. Ich verwende ein Olimex LPC2148 Board und bin blutiger Anfänger was ARM und GNUARM betrifft (und deshalb noch nicht so richtig weiter gekommen). Also meine Frage ist folgende: ich versuche eine einfache ISR zu schreiben, sowas wie LED blinken lassen. Aber mein Verständnis ist da noch nicht ganz so weit, da ich ja unter anderem das IRQ-Bit im CPSR auf 0 setzen muss, damit dieser Interrupttyp aktiv wird. Aber wie mache ich das? Solange ich im User-mode bin, bekomme ich doch keinen Zugriff auf dieses Bit, muss ich nun in einen priviligierten Modus wechseln (wenn ja, wie) oder entsinne ich mich falsch, und ich kann das Bit jeder zeit mittels MSR und MRS lesen und schreiben.
Über Interrupts weis ich zwar auch noch sehr wenig, aber die Seite hier hat mir echt schon viel geholfen: http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index.html
@botro: Auf der Keil Homepage gibt es eine Menge Beispiele zu den LPC2000-Controllern. Ich empfehle dir, da das Beispiel "Blinky IRQ" zu downloaden. Es initialisiert einen IRQ Interrupt am VIC mit einem Timer, wobei bei Erreichen eines Timerwertes eine LED an einem Port verändert wird: http://www.keil.com/download/list/arm.htm Dort anklicken: Philips LPC2100 Blinky IRQ Example Ich hoffe, das hilft etwas. Wenn dein Programm später läuft, bist du immer im USER Mode. Man kann aus diesem Status manuell nie mehr in einen anderen Mode wechseln, außer nach Hardware- oder Watchdog-Reset oder aus einem anderen Mode heraus (SWI, IRQ, FIQ z.B.). Was willst du denn mit den Bits im CPSR? Ist dein Interrupt initialisiert, so verzweigt das Programm bei einem Ereignis z.B. in den IRQ Mode und kehrt danach in den USER Mode zurück. Mit dem CPSR oder SPSR hast du da nichts zu tun. Das ist nur für erweiterte Core-Programmierung interessant (z.B. Nested Interrupt Technik oder Spurious Interrupt Handling). Gruß Dietmar
"Wenn dein Programm später läuft, bist du immer im USER Mode" Sicher?
A.K.:
>Sicher:
Wenn du kein RTOS und System Mode oder ähnliches verwendest, sondern
nur die Keil Startup: JA!!!
Dietmar
zur als Ergaenzung: Freigabe fuer IRQ und FIQ in den Statusregistern der verschiedenen Modi erfolgt in vielen Faellen im Startupcode zusammen mit der Einstellung der verschiendenen Stackpointer. Zuallererst also im Startup-Code schauen. Im einfachsten Fall kann man dort die Interrupts auf "Core-Level" aktivieren und ist schon fertig. Alles weitere dann mittels Interrupt-Controller (nicht VIC/AIC...). Schreiben/aendern der Bits wird im User-Mode unterbunden. Folglich im Prinzip drei Moeglichkeiten (vielleicht auch mehr, aber die fallen mir auf Anhieb ein): * IBIT und FBIT schon im Startup passend einstellen. Dann ist von Anfang an freigesschaltet, egal ob User oder andere Mode (z.B. so gemacht in den meisten Beispielcodes von Keil) * Anwendung nicht im User-Mode laufen lassen. Der User-Mode bringt nicht so viel an zusaetzlichem Schutz ohne "richtiges OS" und entsprechende Speicherverwaltung in der Hardware. Schreibzugriff ist dann jederzeit moeglicher, da das Programm ohnehin in previligiertem Modus laueft. (findet man in einigen "nicht-Keil" Beispielen) * Interrrupts auf Core-Level in einer Routine de-/aktivieren, die per SWI gerufen wird. SWI-call wechselt implizit in einen previligierten Modus und ruft die Routine deren Adresse im SWI-Execption-Vector eingestellt ist. Biete somit ein "Schlupfloch" aus dem User-Mode. Man kann in der ISR dann "machen was man will" (z.B. so gemacht in einigen Beispielen von Sharp und Oki). In meinen portierten bzw. selbstgebastelten Codes der WinARM-Beispielsammlung auf den bereits genannten siwawi/arm_projecst-Seiten findet sich von allem etwas zur Inspiration. Im Moment grade halbwegs aktuelle: - Portierung des Example-Code-Bundles fuer LPC213x/4x auf GNU-Toolchain. Diese Portierung enthaelt auch einiges an von mir "verbrochenem" neuen Code und Anpassungen/Korrekturen u.a. Vorbereitung fuer SWI nebst Beispiel. http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/lpc2k_bundle_port - "gamma"-Beispiel fuer AT91SAM7, nicht vom Controllertypen abschrecken lassen, ist auch ein ARM7TDMI und Codeteile mit Bezug auf SR/IBIT/FBIT und SWI sind leicht portierbar. http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index_at91.html#at91_gamma Falls man nicht nur aus Beispielen abschauen will: Auf arm.com gibt es viele brauchtbare Dokumente. Martin Thomas
@Martin Thomas: >* IBIT und FBIT schon im Startup passend einstellen. Dann ... Ist bei Keil schon erledigt. >* Anwendung nicht im User-Mode laufen lassen. >* Interrrupts auf Core-Level in einer Routine de-/aktivieren, die per SWI gerufen wird..... Den SWI zum Zugriff auf das CPSR kann man auch aus dem USER Mode natürlich immer rufen... Kein USER Mode: Hier gibt es anscheinend neue Aspekte zum Betrieb des ARM Controllers? Bin da sehr interessiert. Natürlich, kann ich die Keil Startup so verändern, daß der Controller nicht in den USER Mode gelangt. Aber, was bringt das im Detail an positiven Errungenschaften in der End-Applikation, was ich im USER Mode nicht habe? Ich meine, der Mode hat doch eine Daseinsberechtigung, oder? Was hat man im anderen Mode denn für Vorteile? >Falls man nicht nur aus Beispielen abschauen will: Beispiele helfen aber ungemein. Ohne z.B. das FullCAN Beispiel oder Blinky IRQ, jetzt mal stellvertretend für die vielen anderen Beispiele der Hersteller, ist so mancher ARM Neuling teilweise ganz schön aufgeschmissen, um nicht zu sagen, verloren. Natürlich hat ein ernsthafter ARM User die Downloads von der ARM Homepage. Was es dort aber nicht gibt, ist das äußerst interessante und hilfreiche "ARM ARM", das ARM Architecture Reference Manual. Gibt es eine Möglichkeit, das hier ins Forum zur allgemeinen Verwendung hochzuladen (ca. 14 MB) oder einen Link zu posten? Gruß Dietmar
Erstmal schönen Dank für die reichlichen Antworten. Ich selbst konnte die letzten Tage leider nicht so richtig mitdiskutieren, da mein Inet-Zugang defekt war. Meine Frage ist aber gut beantwortet worden, das hilft mir sehr weiter. Als kleine Ergänzung, das "ARM ARM" kann man durchaus nach einigem suchem in Netzt finden. Es wird auf einer Seite bei ARM zum kostenlosen Download angeboten. Ich habe den Link aber leider nicht mehr und die Seite ist etwas versteckt. Also nicht so schnell aufgeben beim suchen. Nochmal vielen Dank an alle Antworter, botro
@botro: "ARM ARM" gibt es bei ARM eben nicht mehr, sondern nur das Buch. Wenn du einen Link direkt zu ARM gefunden hast, bitte her damit! Gruß Dietmar
@botro: Das Beispiel Blinky IRQ für den LPC2129 auf dem MCB2100 Board gab es am Anfang sogar von Keil nur für GCC, da die aus GCC ihren Compiler weiter entwickelt haben, habe es als eines der ersten Beispiele erfolgreich verwendet. Gruß Dietmar
Google: "ARM ARM" site:arm.com Da gibt's als Hit eine Page mit ner EULA für das ARM ARM, wenn man die akzeptiert bekommt man das PDF. Gruss, Dominic
@Dominic: >Da gibt's als Hit eine Page mit ner EULA für das >ARM ARM, wenn man die akzeptiert bekommt man das PDF. Das scheint jetzt neu, die haben sich anscheinend gebessert :-) Gruß Dietmar
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.