
Application Note
16 of 80
002-26071 Rev. *B
2021-09-07
Clock configuration setup in TRAVEO™ T2G family CYT4D series MCUs
Configuration of the clock resources
Code Listing 3
Cy_SysClk_EcoEnable() function
cy_en_sysclk_status_t Cy_SysClk_EcoEnable(uint32_t timeoutus)
{
cy_en_sysclk_status_t rtnval;
/* invalid state error if ECO is already enabled */
if (SRSS->unCLK_ECO_CONFIG.stcField.u1ECO_EN != 0ul)
/* 1 = enabled */
{
return CY_SYSCLK_INVALID_STATE;
}
/* first set ECO enable */
SRSS->unCLK_ECO_CONFIG.stcField.u1ECO_EN = 1ul;
/* 1 = enable */
/* now do the timeout wait for ECO_STATUS, bit ECO_OK */
for (;
(SRSS->unCLK_ECO_STATUS.stcField.u1ECO_OK == 0ul) &&(timeoutus != 0ul);
timeoutus--)
{
Cy_SysLib_DelayUs(1u);
}
rtnval = ((timeoutus == 0ul) ? CY_SYSCLK_TIMEOUT : CY_SYSCLK_SUCCESS);
return rtnval;
}
Code Listing 4
Cy_SysClk_EcoConfigureWithMinRneg() function
cy_en_sysclk_status_t Cy_SysClk_EcoConfigureWithMinRneg(uint32_t freq, uint32_t cSum, uint32_t esr, uint32_t
driveLevel, uint32_t minRneg)
{
/* Check if ECO is disabled */
if(SRSS->unCLK_ECO_CONFIG.stcField.u1ECO_EN == 1ul)
{
return(CY_SYSCLK_INVALID_STATE);
}
/* calculate intermediate values */
float32_t freqMHz = (float32_t)freq / 1000000.0f;
float32_t maxAmplitude = (1000.0f * ((float32_t)sqrt((float64_t)((float32_t)driveLevel / (2.0f *
(float32_t)esr))))) /
(M_PI * freqMHz * (float32_t)cSum);
float32_t gm_min = (157.91367042f /*4 * M_PI * M_PI * 4*/ * minRneg * freqMHz * freqMHz * (float32_t)cSum *
(float32_t)cSum) /
1000000000.0f;
/* Get trim values according to caluculated values */
uint32_t atrim, agcen, wdtrim, gtrim, rtrim, ftrim;
atrim = Cy_SysClk_SelectEcoAtrim(maxAmplitude);
if(atrim == CY_SYSCLK_INVALID_TRIM_VALUE)
{
return(CY_SYSCLK_BAD_PARAM);
}
agcen = Cy_SysClk_SelectEcoAGCEN(maxAmplitude);
if(agcen == CY_SYSCLK_INVALID_TRIM_VALUE)
{
return(CY_SYSCLK_BAD_PARAM);
}
wdtrim = Cy_SysClk_SelectEcoWDtrim(maxAmplitude);
if(wdtrim == CY_SYSCLK_INVALID_TRIM_VALUE)
{
return(CY_SYSCLK_BAD_PARAM);
}
(2) Check if ECO_OK is already enabled.
(3) Write “1” to the ECO_EN bit, and
make ECO available.
(4) Check the state of ECO_OK
and the state of TIMEOUT.
(5) Subtract the TIMEOUT value.
Wait for 1 us.
(6) Check whether processing exited the
loop at TIMEOUT.
Trim calculation by software
Get the Atrim value. See
Get the AGC enable setting. See
Get the Wdtrim value. See