Forum: Mikrocontroller und Digitale Elektronik xMega 32bit Timer/Counter


von McDonald J. (mcdonald_j)


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

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
Noch kein Account? Hier anmelden.