Probleme mit Interrupt AT91SAM7X

Gast #1498927
Lesenswert?

Hallo an alle

Ich arbeite mich gerade in den At91san7x ein und versuche schon seit 
drei tagen einen Interrupt auszulösen doch es will einfach nicht 
gelingen.

als IDE Benutze ich Keil MDK mit dem Debuger ULINK ME im Anhang Sind 
noch ein par Bilder mit den Registerzustände.
1
//main.c
2

3
#include <AT91SAM7X256.H>
4
#include "AT91SAM7X-EK.h"
5

6
#define INTTAST = AT91B_SW1;
7

8
void ex_int_handler (void){
9
  volatile unsigned int dummy;
10
  dummy = AT91C_BASE_PIOA->PIO_ISR;
11
  AT91C_BASE_AIC->AIC_EOICR=AT91C_BASE_TC0->TC_SR;
12
  AT91C_BASE_AIC->AIC_ICCR=(1<<AT91C_ID_TC0);
13
  *AT91C_AIC_EOICR=0;
14
  AT91C_BASE_PIOB->PIO_CODR=AT91B_LED1;// LED1 hier zum Int.-Test anmachen
15
  AT91C_BASE_AIC->AIC_EOICR = 0;
16
}
17

18
int main(void){
19
  int io_status;
20
  // Enable the Clock of the PIO
21
  AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
22
  AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOB;
23
  AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_SYS;
24

25
  // Configure the PIO Lines corresponding to LED1..LED4 as Outputs
26
  AT91C_BASE_PIOB->PIO_PER  = AT91B_LED_MASK;
27
  AT91C_BASE_PIOB->PIO_OER  = AT91B_LED_MASK;
28

29
  // Clear the LED's. On the Board we must apply a "1" to turn off LEDs
30
  AT91C_BASE_PIOB->PIO_SODR = AT91B_LED_MASK;
31

32
  //Init Interrupt
33
  AT91C_BASE_PIOA->PIO_PER=AT91B_SW1;
34
  AT91C_BASE_PIOA->PIO_ODR =AT91B_SW1;
35
  AT91C_BASE_PIOA->PIO_CODR=AT91B_SW1;
36
  AT91C_BASE_PIOA->PIO_PPUER=AT91B_SW1;
37
  AT91C_BASE_PIOA->PIO_ASR=AT91B_SW1;
38
  AT91C_BASE_PIOA->PIO_OWDR=AT91B_SW1; 
39
  AT91C_BASE_AIC->AIC_SMR[AT91C_ID_PIOA]=AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | 0; 
40
  AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA]=(unsigned int)ex_int_handler; 
41
  AT91C_BASE_PIOA->PIO_IFER=AT91B_SW1; 
42
  io_status = AT91C_BASE_PIOA->PIO_ISR; 
43
  AT91C_BASE_AIC->AIC_IECR=(1 << AT91C_ID_PIOA);
44
  AT91C_BASE_AIC->AIC_ISCR=(1 << AT91C_ID_PIOA); //Test
45
  AT91C_BASE_AIC->AIC_ICCR=0;
46
  AT91C_BASE_PIOA->PIO_IER=AT91B_SW1;
47
  
48
  for(;;){
49
    if ((AT91C_BASE_PIOA->PIO_PDSR & AT91B_SW3) == 0) {       /* Check if SW3 is pressed */
50
      AT91C_BASE_PIOB->PIO_CODR = AT91B_LED2;      /* Turn On LED2 */
51
    }
52
    if ((AT91C_BASE_PIOA->PIO_PDSR & AT91B_SW4) == 0) {             /* Check if SW4 is pressed */
53
      AT91C_BASE_PIOB->PIO_SODR = AT91B_LED2;      /* Turn Off LED2 */
54
    }  
55
  }
56
}

Danke für eure hilfe ich weis so langsam wirklich nicht mehr weiter.
Angehängte Dateien:
Gast #1499250
Lesenswert?

Hi

ich hab mal drüber geschaut konnte den Fehler aber nicht finden. :-(
Dein Code sieht etwas anders aus als in den Beispielen von Atmel.
Lade dir diese doch mal runter und lass das Beispiel
'getting-started-project-at91sam7x' auf deinen Board laufen und schau ob 
es läuft. (dort kann man auch die DEBUG Messages gut sehen)

Wenn nein dann melde dich noch mal.

mfg
Stephan

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