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.
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.