Hallo, ich möchte einen Timerkanal als Timeout-Timer verwenden, indem ich in Register C die Timeoutzeit setze und CPCTRG= 1. Dann wird das CPCS-Flag im Statusregister beim Timeout gesetzt. Der Timer läuft, CPCS (und COVFS (??))ist nach der TM-Zeit gesetzt. Soweit so gut. Das Statusregister soll durch Lesen zurück gesetzt werden, wird im Debugger angezeigt. Wenn ich das Statusregister lese und im Debugger schaue, passiert dabei aber nix!? Weis jemand, wie man den kompletten Status wirklich zurücksetzen kann? Hier mein Programm: ... init_timeout_timer(ID_TC4, TC1, 1, 20 * 40); //Details sind doch nicht nötig? tc_start(TC1, 1); // ASF-Funktion, Timer läuft korrekt... while(!check_timeout(TC1, 1)); ... bool check_timeout(Tc *p_tc, uint32_t ul_Channel) { volatile uint32_t dummy; if(p_tc->TC_CHANNEL[ul_Channel].TC_SR & TC_SR_CPCS){ p_tc->TC_CHANNEL[ul_Channel].TC_CCR= TC_CCR_SWTRG | TC_CCR_CLKEN;//TC-Restart dummy= p_tc->TC_CHANNEL[ul_Channel].TC_SR; //!! CPC-Flag wird NICHT gelöscht dummy= TC1->TC_CHANNEL[1].TC_SR; //!! CPC-Flag wird NICHT gelöscht return(true); } else return(false); }
Alexxx schrieb: > Hallo, > > ich möchte einen Timerkanal als Timeout-Timer verwenden, > indem ich in Register C die Timeoutzeit setze und CPCTRG= 1. > Dann wird das CPCS-Flag im Statusregister beim Timeout gesetzt. > Der Timer läuft, CPCS (und COVFS (??))ist nach der TM-Zeit gesetzt. > Soweit so gut. > Das Statusregister soll durch Lesen zurück gesetzt werden, wird im > Debugger angezeigt. Wenn ich das Statusregister lese und im Debugger > schaue, passiert dabei aber nix!? > Weis jemand, wie man den kompletten Status wirklich zurücksetzen kann? Der Timer läuft im Hintergrund doch weiter, niemand hält den an. Das Bit wird so schnell wieder gesetzt, das kannst Du im Debugger nicht sehen. Dein Bit wird übrigens schon bei der if abfrage gelöscht :-) Den Clock-Enable brauchst Du nicht nochmal setzten. Edit: Den Software Trigger brauchst du auch nicht. Der Sinn von CPCTRG=1 ist ja gerade, dass der Timer sich selbst bei Compare Match zurücksetzt und neu startet.
@Andreas M.
>> Der Timer läuft im Hintergrund doch weiter...
Ist das bei diesem SAM Standard? Läuft alle Peripherie während eines
Debug-Breaks weiter?
Alexxx schrieb: > Ist das bei diesem SAM Standard? Das ist eine Frage (der Einstellung) des Debuggers, nicht des Controllers.
@Beo Bachta Danke Für die Antwort. Wo kann man das beim Debugger (Atmel-ICE) einstellen?
Beo Bachta schrieb: > Alexxx schrieb: >> Ist das bei diesem SAM Standard? > > Das ist eine Frage (der Einstellung) des Debuggers, nicht > des Controllers. Das hat nichts mit dem Debugger zu tun, sondern damit ob die Hardware das kann oder nicht. Bei den meisten STM32 Peripherien kann man das Aktivieren oder Deaktivieren (nennt sich Debug mode) Bei den Atmels ist mir nicht bekannt, dass die das können.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.