xMega 32bit Timer/Counter

OP #3920248
Lesenswert?

Hallo erst mal

Ich möchte mit dem ATxMega128A3U einen 32 Bit counter initialisieren. 
Ich verwende TCE0 als untere 16bit, über Eventchannel 0 tackte ich TCE1. 
Der Code sieht wie folgt aus. Funktioniert aus irgend einem Grund aber 
noch nicht.
1
//#################################### Timer
2
#define IMPULSE_TIMER0 TCE0
3
#define IMPULSE_TIMER1 TCE1
4

5
//####################################################### Int Timer
6
ISR(TCE1_CCA_vect)                        // Top 16 Bit Capture
7
{
8
  put_Nr(0,pageBreak(),0,0,BLACK,IMPULSE_TIMER1.CNT,HEX);
9
  IMPULSE_TIMER1.CTRLA = 0x00;                // Turnoff Timer 1
10
  IMPULSE_TIMER1.CNT = 0;
11
  IMPULSE_TIMER1.INTCTRLB = 0x00;
12
  IMPULSE_TIMER0.PER = (uint16_t)((CommandPtr->Time)*4);
13
  IMPULSE_TIMER0.CNT = 0;                    // Reset Timer
14
  IMPULSE_TIMER0.INTCTRLA = TC_OVFINTLVL_HI_gc;        // Interrupt when low 16 bit Value is reached. 
15
}
16

17
ISR(TCE0_OVF_vect)
18
{
19
  IMPULSE_TIMER0.CTRLA = 0x00;                // Turnoff Timer 0
20
  IMPULSE_TIMER0.CNT = 0;
21
  IMPULSE_TIMER0.INTCTRLA = 0x00;  
22
  SWITCH_HW_PORT.OUT ^= CommandPtr->SwitchNr;          // Invert Output
23
    ExternalClick();
24
}
25

26
void startTimer(TC0_t * Timer0, TC1_t * Timer1, uint32_t Compare)
27
{ 
28
  Timer0->CTRLA = TC_CLKSEL_DIV8_gc;
29
  Compare *= 4;
30
  if (Compare > 0xFFFF)
31
  {
32
    EVSYS.CH0MUX = EVSYS_CHMUX_TCE0_OVF_gc;
33
    Timer1->CTRLA = TC_CLKSEL_EVCH0_gc;
34
    Timer1->CTRLB = TC1_CCAEN_bm;
35
    Timer1->CCA = (uint16_t)(Compare>>16);
36
    Timer0->CNT = 0;                  // Reset Timer
37
    Timer1->CNT = 0;
38
    Timer1->INTCTRLB = TC_CCAINTLVL_HI_gc;        // IntLVL HIGH
39
  }
40
  else
41
  {
42
    Timer0->CTRLB = 0;
43
    Timer0->PER = (uint16_t)Compare;
44
    Timer0->CNT = 0;                  // Reset Timer
45
    Timer0->INTCTRLA = TC_OVFINTLVL_HI_gc;        // IntLVL HIGH
46
  }
47
}

Vielleicht kann mir ja einer helfen.

Schon mal danke im Voraus.
Jérôme

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren