Forum: Mikrocontroller und Digitale Elektronik XMC 4500 Timer


von Sandy (Gast)


Lesenswert?

Liebe Kollegen!

Ich versuche die Zeit zwischen zwei Ereignissen zu messen.
Dazu würde ich gerne den Timer starten, stoppen und den Wert auslesen.
Leider kann ich in der xmc_ccu4 keinen Timer Wert lesen. Sobald ich ihn 
stoppe ist der Wert weg. Auslesen funtktioniert anscheinen nich wenn der 
Timer noch läuft.

Als einfaches Beispiel starte ich den Timer und gebe die Werte am DAC 
aus. Dann sollte sich eine Rampe oder Dreieck zeigen. Leider tut sich 
dort nichts.
1
XMC_CCU4_SLICE_COMPARE_CONFIG_t SLICE0_config =
2
  {
3
   .timer_mode = (uint32_t) XMC_CCU4_SLICE_TIMER_COUNT_MODE_EA,
4
   .monoshot = (uint32_t) false,
5
   .shadow_xfer_clear = (uint32_t) 0,
6
   .dither_timer_period = (uint32_t) 0,
7
   .dither_duty_cycle = (uint32_t) 0,
8
   .prescaler_mode = (uint32_t) XMC_CCU4_SLICE_PRESCALER_MODE_NORMAL,
9
   .mcm_enable = (uint32_t) 0,
10
   .prescaler_initval = (uint32_t) 0,
11
   .float_limit = (uint32_t) 0,
12
   .dither_limit = (uint32_t) 0,
13
   .passive_level = (uint32_t) XMC_CCU4_SLICE_OUTPUT_PASSIVE_LEVEL_LOW,
14
   .timer_concatenation = (uint32_t) 0
15
  };
16
17
18
19
  XMC_CCU4_Init(MODULE_PTR, XMC_CCU4_SLICE_MCMS_ACTION_TRANSFER_PR_CR);
20
  XMC_CCU4_StartPrescaler(MODULE_PTR);
21
  XMC_CCU4_SetModuleClock(MODULE_PTR, XMC_CCU4_CLOCK_SCU);
22
  XMC_CCU4_EnableClock(MODULE_PTR, SLICE0_NUMBER);
23
  XMC_CCU4_SLICE_CompareInit(SLICE0_PTR, &SLICE0_config);
24
25
  XMC_CCU4_SLICE_SetTimerValue(SLICE0_PTR, 0x3FF);
26
  XMC_CCU4_SLICE_StartTimer(SLICE0_PTR);
27
  while(1)
28
  {
29
    XMC_DAC_CH_Write(XMC_DAC0, DAC_CH_NR_0, MC_CCU4_SLICE_GetTimerValue(SLICE0_PTR));
30
}

Wenn ich den Timer nicht starte bekomme ich einen konstanten Wert von 
0x3FF am Oszi.

Wie kann ich den aktuellen Timer Wert lesen?

(Capture ist für meine Anwendung nicht möglich da ich mit dem ADC nicht 
immer genau den gesuchten Wert treffe).

Board: Infineon XMC4500 Relax Light Kit.

DANKE
Bussi
Sandy

von Sandy (Gast)


Lesenswert?

Help

von Christopher J. (christopher_j23)


Lesenswert?

Sandy schrieb:
> Wenn ich den Timer nicht starte bekomme ich einen konstanten Wert von
> 0x3FF am Oszi.

Und was bekommst du am Oszi wenn du ihn startest? Zufällig konstant 0? 
Kann es sein das der Timer gar nicht richtig konfiguriert ist (als "free 
running timer")?

Sandy schrieb:
> Wie kann ich den aktuellen Timer Wert lesen?

Im Zweifelsfall mal direkt das Register auslesen. Das sollte definitiv 
auch gehen während der Timer läuft. Die passende Adresse findest du im 
Reference Manual.

Sandy schrieb:
> Sobald ich ihn stoppe ist der Wert weg.

Auch das lässt sich beheben indem du mal ins Handbuch schaust. Wenn die 
Stop-Funktion mit Reset implementiert ist heißt das nicht, dass man den 
Timer nicht stoppen kann ohne ihn zu resetten. Das geht garantiert und 
unterscheidet sich vermutlich nur durch ein einziges Bit von der 
derzeitigen Implementierung.

von Dennis K. (scarfaceno1)


Lesenswert?

Mal ne kleine Zwischenfrage:

Welche/n IDE / Compiler benutzt du?

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.