Hallo zusammen Ich habe im AtXmega16A4U den Timer D 0 im Normal Mode am laufen Also er zählt von 0 bis 65535 hoch. Dannach erzeugt er einen OVF und beginnt wieder bei 0. Nun möchte ich zwischendurch jedoch noch einen compare interrupt auslösen. Meine fragen, wie konfiguriere ich den Timer? Hier mein bisheriger code:
1 | EVSYS.CH0MUX = EVSYS_CHMUX_TCD0_OVF_gc; //Event Chanell 0 auf Overflow von TCD0 |
2 | |
3 | //Timer D0 & D1 als 32Bit Counter zur Messung des Nulldurchganges und der Phasenverschiebung
|
4 | TCD1.PER = 0xFFFF; //Maximale TOP-Werte für beide Counter |
5 | TCD0.PER = 0xFFFF; |
6 | TCD1.CTRLA = TC_CLKSEL_EVCH0_gc; //Clocksource von TCD1 ist Event CH0 |
7 | TCD0.CTRLA = TC_CLKSEL_DIV1_gc; //Clocksource von TCD0 ist Sysclock mit 32MHz |
8 | |
9 | |
10 | TCD0.CCA = 50000; |
11 | |
12 | //TCD1.INTFLAGS |= TC1_CCAIF_bm;
|
13 | TCD0.INTCTRLB |= (TC0_CCAINTLVL1_bm | TC0_CCAINTLVL0_bm); //Interrupt aktivieren |
14 | |
15 | |
16 | PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; //Alle Interruptlevel aktivieren |
Funktioniert leider nicht. Der Interrupt wird nicht aktiv!
1 | ISR(TCD0_CCA_vect) |
2 | {
|
3 | PORTE.OUT = ~(PORTE.OUT & 0x02); //LED Toggle |
4 | }
|