mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LPC2129 (ARM) EINT Problem


Autor: Jürgen Eckert (sid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich bins mal wieder G,

für mein aktuelles Projekt brauche ich u.a. einen RC5 Empfänger. Um
diesen zu realisieren zu können muss ich externe Interrupts verwenden,
damit wenn ein Signal kommt er es sofort verarbeiten kann. Dazu habe
ich den IR Empfänger an den Pin P0.30 (EINT3) gehängt und würde nun
gerne auf eine negative flanke triggern. Was ich folgendermassen
gemacht habe:

  EXTMODE = (1<<3);
  EXTPOLAR = ~(1<<3);  //falling edge
  VICIntSelect &= ~( 1 << VIC_EINT3 );
  VICIntEnable = ( 1 << VIC_EINT3 );
  VICVectCntl2 = 0x20 | VIC_EINT3;
  VICVectAddr2 = (unsigned)eint3ISR;
  PINSEL1|=(1<<29);      //P0.30 als EINT3
  PINSEL1&=~(1<<28);

(Zusätzlich läuft momentan noch ein TIMER und ein UART IRQ, des
weiteren sind beide SPIs und der UART0 aktiv und noch ein paar
unwichtigere sachen.)

So weit so gut, doch oben geschriebene Code funktioniert nicht, weil er
ständig bei den ersten 2 Zeilen abkackt. Wenn ich die raus nehme
(EXTMODE EXTPOLAR), also activ low level, dann geht alles wunderbar.
Gut in meinem Fall momentan reicht es wenn ich auf ein activ low level
triggere, aber ich würde doch gerne wissen was da faul ist. Im MAN
heißt es dazu nur das das dazugehörige Bit im VICIntEnable Register
nicht gesetzt sein darf bevor man in die EXT... Register schreibt. Aber
das berücksichtige ich ja... ich hab sogar schon mal alle Interrupts
vorher löschen. Und die globalen Interrupts werden eh erst viel später
aktiviert.

Wie dem auch sei habe ich schon alle  möglichen Zeilen vertauscht und
eine Nacht dran rum probiert, immer mit dem gleichen Ergebnis: ersten 2
Zeilen auskommentieren => es geht, sonst nicht. Und das ist mist!

Kann mir wer helfen?
Jürgen

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lies mal die Release Notes vom LPC2129 (aka Bugliste)!

Autor: Jürgen Eckert (sid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bing *brett vom kopf nehm*
I forgot: buggy µCs G

Danke für die schnelle Antwort.

Also hier der aktuelle funktionierende Code (falls es wen
interessiert):

  VPBDIV=0;
  EXTMODE = (1<<3);
  VPBDIV=VPBDIV_VAL;
  VPBDIV=0;
  EXTPOLAR = ~(1<<3);  //falling edge
  VPBDIV=VPBDIV_VAL;
  VICIntSelect &= ~( 1 << VIC_EINT3 );
  VICIntEnable = ( 1 << VIC_EINT3 );
  VICVectCntl2 = 0x20 | VIC_EINT3;
  VICVectAddr2 = (unsigned)eint3ISR;
  INT_EN;


VPBDIV muss(!!) man auf 0 gesetz werden bevor man ein(!) Register
beschreiben kann.

THX
Jürgen

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.