LPC2129 (ARM) EINT Problem

OP #271794
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
OP #271796
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

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.