Hallo Zusammen, ich möchte gern mit dem Timer0 3 verschiedene Interrupts auslösen und 3 verschiedene ISR starten. Die Zeitpunkte wann die ISR starten, werden über die Compare / Capture Register festgelegt. Timer0 Periode 250 CCA 50 CCB 100 CCC 150 Die Zeitpunkte werden richtig erkannt und auch die entsprechenden Interruptflags gesetzt. Das Problem hierbei ist, dass der Programmzähler grundsätzlich nur in den Interruptvector 0x0028 (Overflow Timer 0) springt und nicht etwa in: .org 0x0032 rjmp timer0_ccpa .org 0x0034 rjmp timer0_ccpb .org 0x0036 rjmp timer0_ccpc .org 0x0038 rjmp timer0_ccpd Vielleicht findet jemand den Fehler und kann mir helfen. Im Anhang befindet sich die Konfiguration für den Timer.
Gast
#2065195
Hi Vielleicht könntest du dich von deinem Tunnelblick auf dein Projekt lösen, und mal erzählen, worum es geht. MfG Spess
Gast
#2065656
Wieso nutzt du nicht die Namen für die Timerflags, so wie sie im define des XMegas stehen? Dann wird sowas viel übersichtlicher. Ich weiß nur, dass man den Overflow Interrupt des benutzten Timers auch mit dem jeweiligen Level (high,med,low) freigeben muss. Hast du das auch gemacht? Tip: jeder Timer hat laut include define des Controller Types auch folgende Bezeichnung zum Beispiel: TCC0base und dann die ganzen offset Register wie zb. CNTRLA-Register TC0_CNTRLAoffset
Gast
#2065685
Ach ja, was mir gerade auffällt: Dein Timer läuft ja nur bis 200 (Register PER). Dein Comparewert für CCD ist aber 250. Da kommt dein Timer nie hin. Denn er zählt ja immer nur bis 200 und setzt sich dann selber wieder auf 0 zurück.
Gast
#2065694
Und dann wird der Interrupt Compare für CCD gar nicht erst frei gegeben. Denn, deie freigegebenen Interrups: Overflow, CCA, CCB, CCC (alle mit hi-priority) Mal sehen was ich noch alles finde. :-)
Gast
#2065717
So sollten die Interruptvectoren auf alle Fälle funktionieren!
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.