TMU timers reconfiguration only
This commit is contained in:
parent
e20cbc67ca
commit
0e000d2f0c
65
src/clock.c
65
src/clock.c
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue