TMU timers reconfiguration only

This commit is contained in:
Sylvain PILLOT 2022-04-14 19:14:34 +02:00
parent e20cbc67ca
commit 0e000d2f0c
1 changed files with 37 additions and 28 deletions

View File

@ -46,17 +46,18 @@
#include <gint/mpu/tmu.h>
#include <gint/timer.h>
/* 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);
}
}
}