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