www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Interrupt AT91SAM7X


Autor: Frederic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

//main.c

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

#define INTTAST = AT91B_SW1;

void ex_int_handler (void){
  volatile unsigned int dummy;
  dummy = AT91C_BASE_PIOA->PIO_ISR;
  AT91C_BASE_AIC->AIC_EOICR=AT91C_BASE_TC0->TC_SR;
  AT91C_BASE_AIC->AIC_ICCR=(1<<AT91C_ID_TC0);
  *AT91C_AIC_EOICR=0;
  AT91C_BASE_PIOB->PIO_CODR=AT91B_LED1;// LED1 hier zum Int.-Test anmachen
  AT91C_BASE_AIC->AIC_EOICR = 0;
}

int main(void){
  int io_status;
  // Enable the Clock of the PIO
  AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
  AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOB;
  AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_SYS;

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

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

  //Init Interrupt
  AT91C_BASE_PIOA->PIO_PER=AT91B_SW1;
  AT91C_BASE_PIOA->PIO_ODR =AT91B_SW1;
  AT91C_BASE_PIOA->PIO_CODR=AT91B_SW1;
  AT91C_BASE_PIOA->PIO_PPUER=AT91B_SW1;
  AT91C_BASE_PIOA->PIO_ASR=AT91B_SW1;
  AT91C_BASE_PIOA->PIO_OWDR=AT91B_SW1; 
  AT91C_BASE_AIC->AIC_SMR[AT91C_ID_PIOA]=AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | 0; 
  AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA]=(unsigned int)ex_int_handler; 
  AT91C_BASE_PIOA->PIO_IFER=AT91B_SW1; 
  io_status = AT91C_BASE_PIOA->PIO_ISR; 
  AT91C_BASE_AIC->AIC_IECR=(1 << AT91C_ID_PIOA);
  AT91C_BASE_AIC->AIC_ISCR=(1 << AT91C_ID_PIOA); //Test
  AT91C_BASE_AIC->AIC_ICCR=0;
  AT91C_BASE_PIOA->PIO_IER=AT91B_SW1;
  
  for(;;){
    if ((AT91C_BASE_PIOA->PIO_PDSR & AT91B_SW3) == 0) {       /* Check if SW3 is pressed */
      AT91C_BASE_PIOB->PIO_CODR = AT91B_LED2;      /* Turn On LED2 */
    }
    if ((AT91C_BASE_PIOA->PIO_PDSR & AT91B_SW4) == 0) {             /* Check if SW4 is pressed */
      AT91C_BASE_PIOB->PIO_SODR = AT91B_LED2;      /* Turn Off LED2 */
    }  
  }
}

Danke für eure hilfe ich weis so langsam wirklich nicht mehr weiter.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kristof Koschnick (Firma: HS Bochum) (kosh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frederic schrieb:

>   AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA]=(unsigned int)ex_int_handler;

hier fehlen die Klammern beim Handler

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.