XMC 4500 Timer

Gast #5028587
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
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.