mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7x256 RTTC-Interrupt


Autor: AndyK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
irgendwie habe ich ein (programmiertechnisches?) Problem mit dem 
RTTC-Interrupt am AT91SAM7x256.

Ausgangssituation:
Ein Sys-Interrupt, der WDT, PIT, RTTC, DBGU etc. bedient.
PIT läuft mit 10ms Periode, RTCC soll mit 1s Periode laufen (und einen 
SW-Counter hochzählen). DBGU bedient eine kleine Kommandozeilen-SHell 
via RS232.
void SYS_ISR(void)
{
  // System Timer
  WDT_ISR();
  PIT_ISR();

  // Real-Time Clock
  RTC_ISR();

  // Power Management Controller
  PMC_ISR();

  // Memory Controller
  EFC_ISR();

  // Debug Unit
  DBGU_ISR();
}
Alles inline-Funktionen.

Wenn ich den Sys-ISR als POSITIVE_EDGE triggere (wie in so ziemlich 
allen Beispielen, die ich gefunden habe), dann wird der Interrupt nach 
15-20min gar nicht mehr aufgerufen. Die Zeit läßt sich verkürzen, wenn 
ich fröhlich einen PIO-Interrupt flackern lasse, ansonsten ist sie auch 
nicht 100%if reproduierbar.

Wenn ich die Sys-ISR als HIGH_LEVEL triggere, dann funktioniert DBGU und 
PIT einwandfrei, RTCC wird allerdings 3x pro Sekunde getriggert, aber 
anscheinend immer schnell hintereinander (sehe ich am SW-Counter). Kann 
also kein Problem mit einem falschen Prescaler sein.
inline void RTC_ISR(void)
{
  // Status lesen -> IRQ zurücksetzen
  unsigned long Status = *AT91C_RTTC_RTSR;
  if(Status==0) { return; }

  // Status auswerten
  if(Status & AT91C_RTTC_RTTINC) {          // Timer inkrement
    InkrementTime();
    if(RTC_callback) { RTC_callback(); }
  }
  if(Status & AT91C_RTTC_ALMS) {            // Alarm
  }
}
Den callback habe ich schon probehalber auskommentiert, ändert nichts am 
Symptom. Habe auch schon versucht, beim Timer-Inkrement das IEN-Bit im 
Mode Register zurückzusetzen und wieder zu setzen. Hat auch nichts 
gebracht.

Hat jemand eine tolle Idee, was ich falsch mache?
AndyK

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

Bewertung
0 lesenswert
nicht lesenswert
hallo,
die interrupt source auf high level einzustellen wird von atmel 
empfohlen. ich hjtte das auch mal auf positive edge eingestellt und 
hatte damit ähnliche effekte wie du.
bei deinem rtt interrupt problem kann ich dir auch nicht weiterhelfen. 
nachdem der rtt von 32khz oszillator getaktet wird, ist das teil ohnehin 
für nichts zu gebrauchen.
hast du dir schon mal das beispiel zum rtt angesehen (siehe anhang)?

gruss
gerhard

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.