INTERRUPT LPC2378

OP #1100641
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.
#1100827
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 */
}

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