Hallo, ich versuche mit SAM4S die Periodendauer auf TIOA mit TC0 Kanal 0 zu messen. In dem TC0_Handler lese ich RA ein. Die Periodendauer wird auch korrekt gelesen. Wenn ich in diesem Handler aber einen Portpin toggle, sehe ich dass der Handler ständig (630 kHz) angesprungen wird, obwohl die Frequenz auf TIOA ganz niedrig ist. Im Debugger-Fenster-I/O: - TC0-TC_CMR0: External Trigger Edge Selection "Rising Edge" (0x01) - TC0-TC_CMR0: RA Loading Edge Selection "Rising Edge of TIOA" (0x01) Wenn ich eine von beiden Einstellungen auf 0x00 setze, wird der Handler gar nicht mehr angesprungen. Ich habe den Verdacht, dass der Handler den Interrupt nicht von selbst löscht. Ich habe aber in der Timerregistern keines gefunden, wo man den/das Interupt(-Flag) löschen könnte. Wo ist mein Fehler? Wo kann ich noch schauen?
Ich habe den Fehler selbst gefunden: Man muss das Statusregister TC_SR lesen, um den Interrupt zu löschen. Im DaBla habe ich nichts dazu gefunden - ??? Thema erledigt.
Alex schrieb: > Ich habe den Verdacht, dass der Handler den > Interrupt nicht von selbst löscht. Ich habe aber in der Timerregistern > keines gefunden, wo man den/das Interupt(-Flag) löschen könnte. Ich kenne diesen Processor nicht, normalerweise ist es aber so: Wenn ein Interrupt immer wieder kommt, dann liegt das daran, dass er immer wieder neu ausgelöst wird. Ein Auslösen erfolgt nur als Reaktion auf die gewählte externe oder interne Interrupt-Quelle. Mit Interrupt-Flags kann man keine Auslösung bewirken. Jedenfalls: Ohne Source (einschl. kompletter Initialisierung) und Details über die Beschaltung weiß keiner, was da überhaupt programmiert ist.
Rolf schrieb: > Wenn ein Interrupt immer wieder kommt, dann liegt das daran... Danke für deine Antwort. Du hast wahrscheinlich nicht gesehen, dass ich das Problem selbst lösen konnte. (s.o.) Hier wird der Interrupt nicht in Hardware durch anspringen des Handlers gelöscht. Man muss das Statusregister lesen um den INT zu löschen. Da ich das nicht wusste, blieb der Status auch im Handler erhalten und so wird der Handler ständig aufgerufen.
Alex schrieb: > Man muss das Statusregister TC_SR lesen, um den Interrupt zu löschen. > Im DaBla habe ich nichts dazu gefunden Das steht eigentlich schon da und sogar recht **fettgeschrieben**...
UUUPs. Tomaten sind gesund, aber vor den Augen ungeschickt ;-) Danke.
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.