Forum: Mikrocontroller und Digitale Elektronik INTERRUPT LPC2378


von Mueller B. (frankyfarell)


Lesenswert?

Hallo alle seite,

Kann mir bitte jemanden helfen?
Ich möchre über Interrupt erst ein Taste abfragen und dann auf pin 
einlesen. so habe ich die Interrupt initialisier

PINSEL4    |= (1<<20)|(1<<23);    // set EINT0 and EINT1:>
VICVectAddr14 = (unsigned long)EINT0_ISR; // interrupt an Taste
VICVectAddr15 = (unsigned long)EINT1_ISR; // interrupt an Pin
VICVectPriority14 |= (1 << 0) ;     // priority levels for EINT0
VICVectPriority15 |= (1 << 1);      // priority levels for EINT1
VICIntEnable      |= (1 <<14)|(1 << 15); // enable EINT0 and EINT1
EXTMODE = 0x00000001;    /* EINT0 edge trigger ,
EXTPOLAR = 0x00000000;    /* EINT0 is falling-edge*/



und di Routine sieht so aus

/*************************  EINT 0 **********************/
void EINT0_ISR (void) __irq
{
   switch(state)
   {

     case 0 :
          state = 1;
          Motor_Forward(4);
    break;

     case 1 :
          state = 0;
          Motor_Backward(4);
    break;
          default: state=1; break;
  }
  EXTINT      = 0x00000001;
  VICVectAddr     = 0;/* Acknowledge Interrupt */
}
/*************************  EINT 1 **********************/
//Impulse Count
void EINT1_ISR (void) __irq
{
    NumImp++;
    while((FIO2PIN & (1<<12))){}
    if(NumImp == IMP_NUMBER) // After 5 Impuls Stop
    {
       NumImp = 0;
       //running = 0;
       PWM_Stop(4) ;

    }
  EXTINT      = 0x00000002;
  VICVectAddr = 0;                                 /* Acknowledge 
Interrupt */
}



Ziel ist Motor über Lichtschranke zu steuern.

PS: Der INT über die Taste funktionier aber ich habe keine ahnung warum 
der Pin nicht eingelesen wird.

von Mario P. (mariopieschel)


Lesenswert?

hallo,
der Pin wird nicht eingelesen, weil du den entsprechenden Eingang nicht 
wieder als solchen schaltest.

/*************************  EINT 1 **********************/
//Impulse Count
void EINT1_ISR (void) __irq
{
    NumImp++;

    PINSEL4    &= ~(1L<<23);    // EINT1 wieder als GPIO
    while((FIO2PIN & (1<<12))){}
    PINSEL4    |= (1<<23);    // set EINT1, das Ganze wieder rückgängig

    if(NumImp == IMP_NUMBER) // After 5 Impuls Stop
    {
       NumImp = 0;
       //running = 0;
       PWM_Stop(4) ;

    }
  EXTINT      = 0x00000002;
  VICVectAddr = 0;                                 /* Acknowledge
Interrupt */
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.