From 0e000d2f0c75cada69f2f285c2918d756149c397 Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Thu, 14 Apr 2022 19:14:34 +0200 Subject: [PATCH] TMU timers reconfiguration only --- src/clock.c | 65 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/clock.c b/src/clock.c index 0944de5..79224a1 100644 --- a/src/clock.c +++ b/src/clock.c @@ -46,17 +46,18 @@ #include +#include /* Arrays of standard and extra timers */ static tmu_t *TMU = SH7305_TMU.TMU; static etmu_t *ETMU = SH7305_ETMU; /* TSTR register for standard timers */ static volatile uint8_t *TSTR = &SH7305_TMU.TSTR; -bool runningTimers[9]; // 9 timers : 3 TMUs + 6 ETMUs -uint32_t initTimersTCNT[9]; -uint32_t initTimersTCOR[9]; -uint32_t newTimersTCNT[9]; -uint32_t newTimersTCOR[9]; +bool runningTimers[3]; // 9 timers : 3 TMUs + 6 ETMUs +uint32_t initTimersTCNT[3]; +uint32_t initTimersTCOR[3]; +uint32_t newTimersTCNT[3]; +uint32_t newTimersTCOR[3]; int initPphi; int newPphi; @@ -88,18 +89,18 @@ static int getPphi_sh7305(void) //We list all running timers and store this in a table (true/false) void listTimerStatus( void ) { - for(int k=0;k<9; k++) + for(int k=0;k<3; k++) { if(k < 3) { tmu_t *T = &TMU[k]; runningTimers[k]= (!T->TCR.UNIE && !(*TSTR & (1 << k))); } - else - { - etmu_t *T = &ETMU[k-3]; - runningTimers[k]= (!T->TCR.UNIE && !T->TSTR); - } +// else +// { +// etmu_t *T = &ETMU[k-3]; +// runningTimers[k]= (!T->TCR.UNIE && !T->TSTR); +// } } } @@ -107,7 +108,7 @@ void listTimerStatus( void ) // And store these value into the void getInitialTimersParameters( void ) { - for(int k=0;k<9; k++) + for(int k=0;k<3; k++) { if (runningTimers[k]==true) { @@ -117,35 +118,43 @@ void getInitialTimersParameters( void ) initTimersTCNT[k]= T->TCNT; initTimersTCOR[k]= T->TCOR; } - else - { - etmu_t *T = &ETMU[k-3]; - initTimersTCNT[k]= T->TCNT; - initTimersTCOR[k]= T->TCOR; - } +// else +// { +// etmu_t *T = &ETMU[k-3]; +// initTimersTCNT[k]= T->TCNT; +// initTimersTCOR[k]= T->TCOR; +// } } } } +static int callback(void) +{ + return TIMER_CONTINUE; +} + + //We update the timers with the new TCNT and new TCOR void updateNewTimersParameters( void ) { - for(int k=0;k<9; k++) + for(int k=0;k<3; k++) { if (runningTimers[k]==true) { + timer_stop( k ); if(k < 3) { tmu_t *T = &TMU[k]; T->TCNT = newTimersTCNT[k]; T->TCOR = newTimersTCOR[k]; } - else - { - etmu_t *T = &ETMU[k-3]; - T->TCNT = newTimersTCNT[k]; - T->TCOR = newTimersTCOR[k]; - } +// else +// { +// etmu_t *T = &ETMU[k-3]; +// T->TCNT = newTimersTCNT[k]; +// T->TCOR = newTimersTCOR[k]; +// } + timer_start(k); } } } @@ -153,12 +162,12 @@ void updateNewTimersParameters( void ) //We compute the new TCNT and new TCOR void computeNewTimersParameters( int initPphi_f, int newPphi_f ) { - for(int k=0;k<9; k++) + for(int k=0;k<3; k++) { if (runningTimers[k]==true) { - newTimersTCNT[k] = initTimersTCNT[k] * newPphi_f / initPphi_f; - newTimersTCOR[k] = initTimersTCOR[k] * newPphi_f / initPphi_f; + newTimersTCNT[k] = (uint32_t) ((uint64_t) initTimersTCNT[k] * (uint64_t) newPphi_f / (uint64_t) initPphi_f); + newTimersTCOR[k] = (uint32_t) ((uint64_t) initTimersTCOR[k] * (uint64_t) newPphi_f / (uint64_t) initPphi_f); } } }