mikrocontroller.net

Forum: Compiler & IDEs Fast Interrupt Request(LPC2138)


Autor: Mark .. (mork)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche gerade, einen FIQ zu nutzen, was aber nicht funktioniert. 
Der Controller resettet kurz nach dem Aktivieren von fast interrupts 
oder macht irgendwelchen Unsinn. Die entsprechende ISR wird ausgeführt, 
aber das Hauptprogramm läuft nicht richtig. Wenn ich den Interrupt als 
normelen IRQ benutze ist das Poroblem weg. Es sollte aber ein FIQ sein. 
Hier der relevante Teil des Codes:
void __attribute__ ((interrupt("IRQ"))) cam_hsync()
{
  ...
  EXTINT=(1<<3);//Flag löschen
  //VICVectAddr = 0; // Interrupt im VIC bestätigen
}

...

int main()
{
  ...initialisierung und aktivierung von (fast)interrupts...
  EXTMODE=(1<<3)|(1<<0);//extInt0 und extint3 edge-sensitive
  EXTPOLAR=(1<<3)|(1<<0);//rising edge
  VICVectAddr3=(unsigned long)cam_vsync;//für cam vsync, klappt problemlos
  VICVectCntl3=(1<<5)|14;//VIC[3]für extint0
  //VICVectAddr4=(unsigned long)cam_hsync;
  //VICVectCntl4=(1<<5)|17;

  VICIntSelect=(1<<17);//int3 als FIQ

  PINSEL1|=(3<<8)|(1<<0);//pin0.20 als extint3 und pin0.16 als extint0
  EXTINT=(1<<3)|(1<<0);//lösche flags
  VICIntEnable|=(1<<17)|(1<<14);//aktiviere extint0 und exint3
  ...
}

Was hab ich da nicht beachtet?

MfG Mark

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

Bewertung
0 lesenswert
nicht lesenswert
1) interrupt("IRQ") != interrupt("FIQ")

2) Bei FIQs reicht der VIC nur das Signal weiter, nicht die 
Handler-Adresse. Für die ist der übliche ARM-Vektor zuständig. Wie sich 
das real umsetzt, weiss nur deine Laufzeitumgebung (startup code).

Autor: Mark .. (mork)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die Antwort.

1.Hab ich probiert. Geht aber nur dann, wenn das Hauptprogramm ncihts 
macht, also while(1); Sobald es was macht, macht der Controller nur 
mist.

2.das ist mir schon klar. In dem Spartup-Code hab ich auch die Funktion 
als Vektor eingetragen. Diese wird auch angesprungen, allerdings nur ein 
einziges mal. Was dannach kommt ist undefiniert.

MfG Mark

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.