Gast
#861758
Bin noch neu beim AT91SAM7X und bitte die triviale Frage nach der Realisierung eines Interrupts zu entschuldigen, aber ich finde im Netz einfach keine Anleitung für Dummies. Wenn der Joystick links gedrückt wird (PA15), soll die LED (PB21) per externem Interrupt angehen (von "Hand" setzen der LED mit AT91C_BASE_PIOB->PIO_CODR=AT91C_PIO_PB21 funktioniert und den Joystick mit AT91C_BASE_PIOB->PIO_PDSR&AT91C_PIO_PA23 abfragen klappt auch). Folgender Code mit Interrupt (der nicht beim Tastendruck aufgerufen wird) funktioniert leider nicht: #include "AT91SAM7X256.h" //+********************************************************************* **************** void ex_int_handler (void) { unsigned int dummy; //status lesen um INT zu löschen dummy = AT91C_BASE_PIOA->PIO_ISR; AT91C_BASE_PIOB->PIO_CODR= AT91C_PIO_PB21; //led einschalten //printf("Interrupt occured\r\n\r"); *AT91C_AIC_EOICR = 0; /* Ende des Interrupts*/ AT91C_BASE_AIC->AIC_EOICR = 0; } //+********************************************************************* **************** int main(void) { AT91C_BASE_PIOB->PIO_OER=LED1; AT91C_BASE_PIOB->PIO_SODR = LED1; AT91C_BASE_PIOA->PIO_PDR=AT91C_PIO_PA23; AT91C_BASE_PIOA->PIO_ODR=AT91C_PIO_PA23; AT91C_BASE_PIOA->PIO_CODR=AT91C_PIO_PA23; AT91C_BASE_PIOA->PIO_PPUER=AT91C_PIO_PA23; AT91C_BASE_PIOA->PIO_ASR=AT91C_PIO_PA23; AT91C_BASE_PIOA->PIO_OWDR=AT91C_PIO_PA23; AT91C_BASE_PIOA->PIO_IER=AT91C_PIO_PA23; AT91C_BASE_AIC->AIC_SMR[AT91C_ID_PIOA]=AT91C_AIC_SRCTYPE_INT_POSITIVE_ED GE|0; AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA]=(unsigned int)ex_int_handler; AT91C_BASE_AIC->AIC_IECR=(1<<AT91C_ID_PIOA); while(1); return 0; } Wäre supertoll, wenn jemand den Code komplettieren würde (irgend etwas fehlt bestimmt) oder einen Link auf einen funktionierenden setzen könnte...