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!