STM32F334 HR Timer Reset event from other Timer

#3979985
Lesenswert?

Hallo,

mein Ziel es ist mit dem HRTimer 4 Signale zu generieren. Dies möchte 
ich aber mit voller Auflösung alle 1 kHz machen.

Meine Idee war den HRTimer im one shot mode, non retriggerable laufen zu 
lassen und per TIM2 über die external Events das Update von TIM2 als 
reset für den HRTIM zu verwenden.

Die Erzeugung der Signale in der HRTIM funktioniert. Auch der one shot 
mode funktioniert (getriggert per Software über Timer Reset Flag).

Jetzt habe den Reset über External Event Channel 2, Source 3 
konfiguriert welches dem TIM2_TRGO Signal entspricht. TIM2 initialisiere 
ich im Master Mode und MMS=010, sodass ein update event das TRGO Signal 
generiert.

Funktioniert leider nicht. Auch wenn ich den Trigger per Software 
auslöse (TIM2->EGR |= TIM_EGR_TG) erzeugt der HRTIM keine Signale.
1
    __TIM2_CLK_ENABLE();
2

3
    // generate TRGO on update
4
    TIM2->CR2 = TIM_CR2_MMS_1;
5
    TIM2->PSC = 1;
6
    TIM2->ARR = 72000;    
7
    TIM2->EGR = TIM_EGR_UG;
8
    
9
    // enable Timer2
10
    TIM2->CR1 |= TIM_CR1_CEN;
11
    
12
            
13
    HRTIM_Minimal_Config();
14
    
15
    // enbale TimerA in one shot non retriggerable mode with preload enable
16
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].TIMxCR = HRTIM_TIMCR_PREEN;
17
    
18
    // reset on external event channel 2, source 3 -> TIM2_TRGO
19
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].RSTxR = HRTIM_RSTR_EXTEVNT2;    
20
    HRTIM1->sCommonRegs.EECR1 = HRTIM_EECR1_EE2SRC_1;
21
    
22
    // set period and compare registers
23
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].PERxR = 0xF000;
24
    
25
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP1xR = 0x0001;    
26
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP2xR = 0x5000;    
27
    
28
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP1xR = 0x4000;    
29
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP2xR = 0x8000;
30

31
    // set set and reset conditions
32
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].SETx1R = HRTIM_SET1R_CMP1;
33
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].RSTx1R = HRTIM_RST1R_CMP2;
34

35
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].SETx2R = HRTIM_SET1R_CMP3;
36
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].RSTx2R = HRTIM_RST1R_CMP4;
37
    
38
    /* Enable TA1 and TA2 outputs */
39
    HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TA1OEN + HRTIM_OENR_TA2OEN;     
40
  
41
    // start master timer and timer A
42
    HRTIM1->sMasterRegs.MCR |= HRTIM_MCR_MCEN + HRTIM_MCR_TACEN;
43
    
44
    GPIO_HRTIM_outputs_Config();

Ich muss gestehen ich bin noch recht neu in der Welt der ARM und bin mir 
sicher irgendwo was vergessen zu haben, leider finde ich nicht wo...

Vielen Dank für eure Hilfe!

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