Gast
#2198015
Hallo @ all,
ich verwende eine Atmel XMEGA 128A3. Dort möchte ich den RTC benutzen.
Den RTC habe ich bereits konfiguriert und er funktioniert auch bis auf
eine Kleingkeit sehr gut. Nun möchte ich die Kleinigkeit auch noch
elemenieren.
Ich habe eine Funktion geschrieben, die den CNT wieder zurücksetzen
soll. Der Name der Funktion lautet restart_rtc. In der Funktion wird
zuerst der RTC prescaler ausgeschaltet danach schauen ich nach dem Sync
Flag, anschließend setze ich den Counter auf 0x0000. Danach schalte ich
den RTC wieder an indem ich den prescaler auf 1 setze.
Ich habe die Ausführungszeit der Funktion nachgemessen. Diese beträgt
zwischen 1,5ms und 2,5ms. Dies ist sehr lang und schwankt zudem sehr
stark. Ich habe dann die Deaktivierung des Prescalers entfernt und nun
benötigt die Funktion nur noch 1,4µs und das konstant. Demnach dauert es
sehr lange bis der RTC deaktiviert wird.
Nun zu meinem Problem. Kann ich den CNT trotzdem zurücksetzen, obwohl
der RTC läuft. Atmel schreibt selber das man nur das Sync Flag beachten
muss.
Hier mein Quellcode:
void restart_rtc(void)
{
// Make sure that the RTC is stopped before initializing it
// der RTC wird angehalten, indem der Prescaler ausgeschaltet wird,
dadurch erhält der RTC keinen CLK mehr
RTC.CTRL=(RTC.CTRL & (~RTC_PRESCALER_gm)) | RTC_PRESCALER_OFF_gc;
// Wait until the RTC is not busy
while (RTC.STATUS & RTC_SYNCBUSY_bm);
// Set the RTC count register
RTC.CNT=0x0000;
// Set the clock prescaler: RTC Clock/1 --> CLK = 1024Hz
// and start the RTC
// der RTC wird gestartet und läuft mit 1024Hz
RTC.CTRL=(RTC.CTRL & (~RTC_PRESCALER_gm)) | RTC_PRESCALER_DIV1_gc;
}
Jedoch bin ich mir nicht ganz sicher das ich trotzdem ein
Syncronisationsproblem zwischen dem RTC und dem µC bekomme.