mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM: Absturz zur Laufzeit


Autor: Simon S. (mrsimon)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo miteinand,

ich arbeite mich gerade ein wenig in OpenOCD/armgcc ein.

Gerade versuche ich mich an den Interrupts - das Ergebnis soll eine 
blinkende LED sein. Allerdings schmiert der Controler anscheinend ab 
sobald ich im CPSR das Interruptsystem freigebe (openOCD regiert einfach 
nicht mehr)

Die gdb ausgabe:
34    myInit();  
(gdb) s
myInit () at main.c:152
152    SCS = 0x1;
(gdb) s
154    FIO0DIR |= 0x7;  // pin P0.26 is an output, everything else is input after reset
(gdb) s

157    mytimer->CTCR = 0x00; //switch to timer mode
(gdb) 
158    mytimer->PR = 0; // if a prescaler is needed - here it is
(gdb) 
159    mytimer->MR0 = 14745600; //Match register;
(gdb) 
160    mytimer->MCR = 0x3; // reset the timer and generate interrupt when matched MR0
(gdb) 
161    mytimer->TCR = 0x01; //enable timer  
(gdb) 
164    VICVectAddr0 = (unsigned long)myInterrupt;   // set interrupt vector in 0
(gdb) 
165    VICVectCntl0 = 4 | (1 << 5); // use it for Timer 0 Interrupt:
(gdb) 
166    VICIntEnable = (1<<4);    // Enable Timer0 Interrupt
(gdb) 
169    asm volatile ("msr   CPSR_c, #0x10|0x80 ");
(gdb) 
170  }
(gdb) 



Meine Konfiguration:
Debugger: Olimex ARM-USB-TINY 
(http://www.olimex.com/dev/arm-usb-tiny.html)
Board: Olimex LPC-H2103 (http://www.olimex.com/dev/lpc-h2103.html)

Kann durchaus sein dass da noch Leichtsinnsfehler drin stecken.

Sourceode ist im Anhang.

Hoffe jemand hat ne Idee woran das liegen könnte - danke!

Autor: Simon S. (mrsimon)
Datum:
Angehängte Dateien:
  • crt.s (4,36 KB, 116 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
die startup datei.

Autor: Simon S. (mrsimon)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
und die header datei.

Autor: let (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abgesehen davon das die I- und F-Bits gelöscht werden müssen
um Interrupts zu erlauben, halte ich es für keine gute Idee
alle anderen Bits im CPSR zu löschen.

Am einfachsten wäre es die beiden Bits in der crt.s für den
System-Mode gar nicht erst zu setzten (der Kommentar sagt
fälschlicherweise etwas über User-Mode).

Das I-Bit des Timers wird in der ISR nicht zurückgesetzt. Das führt
dazu das die ISR ständig aufgerufen wird.

Die Stack Größen scheinen mir nicht zu stimmen. Für den verwendeten
System-Mode sowie den IRQ-Mode werden anscheinend nur jeweils
vier Bytes reserviert. Das ist etwas knapp.

Das Programm wird vermutlich nicht funktionieren wenn es
für den Thumb-Befehlssatzt übersetzt wird (GCC-Bug im ISR Preamble).
Ich bin da nicht auf dem neuesten Stand aber wenn Thumb-Code
verwendet werden soll müssen die ISRs in ein separates Modul das
für den ARM-Mode übersetzt wird oder es gibt einen "Wrapper" in
der CRT. Im letztern Fall muß (und darf) der Compiler gar nicht wissen
das eine bestimmte Funktion eine ISR ist.

Autor: Simon S. (mrsimon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank let! Jetzt habe ich zumindest mal einen Ansatzpunkt. Der 
ganze Unterbau kommt vom Olimex LED-Blink-Beispiel - kann also gut sein 
dass die das nur soweit hingetrickst haben dass grad LED blinken funzt - 
aber mit irgendwas muss man ja anfangen.

Mal schauen ob ich das hinbekomme.

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.