AT91SAM7x256 RTTC-Interrupt

Gast #1365859
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.
1
void SYS_ISR(void)
2
{
3
  // System Timer
4
  WDT_ISR();
5
  PIT_ISR();
6

7
  // Real-Time Clock
8
  RTC_ISR();
9

10
  // Power Management Controller
11
  PMC_ISR();
12

13
  // Memory Controller
14
  EFC_ISR();
15

16
  // Debug Unit
17
  DBGU_ISR();
18
}
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.
1
inline void RTC_ISR(void)
2
{
3
  // Status lesen -> IRQ zurücksetzen
4
  unsigned long Status = *AT91C_RTTC_RTSR;
5
  if(Status==0) { return; }
6

7
  // Status auswerten
8
  if(Status & AT91C_RTTC_RTTINC) {          // Timer inkrement
9
    InkrementTime();
10
    if(RTC_callback) { RTC_callback(); }
11
  }
12
  if(Status & AT91C_RTTC_ALMS) {            // Alarm
13
  }
14
}
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
Gast #1367604
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
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.