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.
Hi Vielleicht könntest du dich von deinem Tunnelblick auf dein Projekt lösen, und mal erzählen, worum es geht. MfG Spess
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
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.
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. :-)
So sollten die Interruptvectoren auf alle Fälle funktionieren!
1 | .cseg ;Beginn eines Code-Segmentes |
2 | |
3 | ;******************** START INTERRUPT VECTOREN ************************ |
4 | .org 0 rjmp MCU_RESTART ; Reset * |
5 | .org TCC1_OVF_vect rjmp Tim1C_OVF ; * |
6 | .org TCC1_CCA_vect rjmp Tim1C_CCA ; * |
7 | .org TCC1_CCB_vect rjmp Tim1C_CCB ; * |
8 | .org TCC1_CCC_vect rjmp Tim1C_CCC ; * |
9 | .org TCC1_CCD_vect rjmp Tim1C_CCD ; * |
10 | ;********************* ENDE INTERRUPT VECTOREN ************************ |
11 | |
12 | .org INT_VECTORS_SIZE |
13 | |
14 | MCU_RESTART: |
15 | ; programmcode begins here |
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.