www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XMega Timer Interrupt via Compare


Autor: Ronny H. (ron_h)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Vielleicht könntest du dich von deinem Tunnelblick auf dein Projekt 
lösen, und mal erzählen, worum es geht.

MfG Spess

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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. :-)

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So sollten die Interruptvectoren auf alle Fälle funktionieren!
.cseg      ;Beginn eines Code-Segmentes

;******************** START INTERRUPT VECTOREN ************************
.org 0                 rjmp   MCU_RESTART  ; Reset                    *
.org TCC1_OVF_vect     rjmp   Tim1C_OVF    ;                          *
.org TCC1_CCA_vect     rjmp   Tim1C_CCA    ;                          *
.org TCC1_CCB_vect     rjmp   Tim1C_CCB    ;                          *
.org TCC1_CCC_vect     rjmp   Tim1C_CCC    ;                          *
.org TCC1_CCD_vect     rjmp   Tim1C_CCD    ;                          *
;********************* ENDE INTERRUPT VECTOREN ************************

.org  INT_VECTORS_SIZE

MCU_RESTART:
; programmcode begins here

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.