Forum: Mikrocontroller und Digitale Elektronik SAM4S Problem Timer-Status rücksetzen


von Alexxx (Gast)


Lesenswert?

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);
}

von Andreas M. (amesser)


Lesenswert?

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.

von Alexxx (Gast)


Lesenswert?

@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?

von Beo Bachta (Gast)


Lesenswert?

Alexxx schrieb:
> Ist das bei diesem SAM Standard?

Das ist eine Frage (der Einstellung) des Debuggers, nicht
des Controllers.

von Alexxx (Gast)


Lesenswert?

@Beo Bachta
Danke Für die Antwort.
Wo kann man das beim Debugger (Atmel-ICE) einstellen?

von Andreas M. (amesser)


Lesenswert?

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
Noch kein Account? Hier anmelden.