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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.