Button - Interrupt

Gast #2786103
Lesenswert?

Grüße euch,

Ich hab den Phytec LPC2294 HD 200 Evaluationsboard. Da ist ein 
Push-Button "S3" drauf, der am Pin0.20 angeschlossen ist. Ich hab es als 
externe Interruptquelle konfiguriert, doch der Button löst kein externes 
Interrupt aus. Der Quellcode:

#include <LPC22XX.H>



void fiqint (void) __fiq
{
  int var1 = 3;

  EXTINT = 0x00100000; // Clear the peripheral interrupt flag

  while(1) {
    var1 = 2;
  }
}


int main(void) {
  int var1 = 0;

  IODIR0 = 0x00100000;     // Push-Button als Eingang konfigurieren
  PINSEL0 = VICIntEnable = 0x00100000;  // Push-Button als externe
                                        // Interruptquelle konfigurieren
  VICIntSelect = 0x00100000; // Push-Button-Interrupt führt zum 
FIQ-Modus

  while(1) {
   var1 = 2;
  }

  return 0;
}

Kann mir da mal bitte jemand weiterhelfen?
Gast #2786109
Lesenswert?

Sry der Code ist folgender:

#include <LPC22XX.H>                        /* LPC22XX Peripheral 
Registers */


void fiqint (void) __fiq
{
  int var1 = 3;

  EXTINT = 0x00100000; // Clear the peripheral interrupt flag

  while(1) {
    var1 = 2;
  }
}


int main(void) {
  int var1 = 0;

  IODIR0 = 0x00100000;  // Push-Button als Eingang konfigurieren
  PINSEL0 = 0x00000180;
  VICIntEnable = 0x00100000; // Push-Button als externe Interruptquelle
                             // konfigurieren
  VICIntSelect = 0x00100000; // Push-Button-Interrupt führt zum 
FIQ-Modus

  while(1) {
    var1 = 2;
  }

  return 0;
}
Gast #2786211
Lesenswert?

Wie ich das feststelle. Ich steppe das gesamte Programm im Debugger 
durch. Kannst du bitte etwas genauer erklären wo das Problem liegt ? 
(Ich weiß : IODIR0 muss der Pin auf 0 gesetzt werden)

gruß
Gast #2786268
Lesenswert?

Ich hab den Code aktualisiert. Aber der Button löst noch immer kein 
Interrupt aus. Bin verzweifelt. Kann mir mal jemand bitte helfen?:

void FIQ_Handler (void) __fiq
{
  EXTINT = 0x00100000; // Clear the peripheral interrupt flag

  IOCLR0 = 0x00000100;
}


int main(void) {
  int var1 = 0;

  IODIR0 = 0x00000100;                  // Push-Button als Eingang
                                        // konfigurieren und D3 als 
Ausgang
  PINSEL0 = 0x00000300;      // Push-Button als EINT3 einstellen
  EXTMODE = 0x00000008;            // Push-Button :edgesensitive-
                                        // Modus(Flankenmodus)
  EXTPOLAR = 0x0000008;      // Push-Button : Interrupt beim
                                        // Loslassen des Buttons 
(Wechsel
                                        // zum Hochpegel)
  VICIntEnable = 0x00100000;    // Push-Button als externe
                                        // Interruptquelle konfigurieren
  VICIntSelect = 0x00100000;     // Push-Button-Interrupt führt zum
                                        // FIQ-Modus

  while(1) {
     IOCLR0 = 0x00000100;
  }

  return 0;
}
#2786605
Lesenswert?

Niemand hat Lust, erst Datenblätter wälzen zu müssen, was Deine ganzen 
kryptischen Hexwerte bedeuten.
Irgendein Wert wird wohl falsch sein, z.B. ein falscher Pin.

Es gibt bestimmt vordefinierte Macros, die einen sprechenden Namen 
haben, benutze diese.
Dann siehst Du besser durch und ein Leser auch.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren