PSoC 6 Peripheral Driver Library

General Description

Functions

cy_en_sysclk_status_t Cy_SysClk_EcoConfigure (uint32_t freq, uint32_t cSum, uint32_t esr, uint32_t driveLevel)
 Configures the external crystal oscillator (ECO) trim bits based on crystal characteristics. More...
 
cy_en_sysclk_status_t Cy_SysClk_EcoEnable (uint32_t timeoutus)
 Enables the external crystal oscillator (ECO). More...
 
uint32_t Cy_SysClk_EcoGetFrequency (void)
 Returns the frequency of the external crystal oscillator (ECO). More...
 
__STATIC_INLINE void Cy_SysClk_EcoDisable (void)
 Disables the external crystal oscillator (ECO). More...
 
__STATIC_INLINE uint32_t Cy_SysClk_EcoGetStatus (void)
 Reports the current status of the external crystal oscillator (ECO). More...
 

Function Documentation

◆ Cy_SysClk_EcoConfigure()

cy_en_sysclk_status_t Cy_SysClk_EcoConfigure ( uint32_t  freq,
uint32_t  cSum,
uint32_t  esr,
uint32_t  driveLevel 
)

Configures the external crystal oscillator (ECO) trim bits based on crystal characteristics.

This function should be called only when the ECO is disabled.

Parameters
freqOperating frequency of the crystal in Hz. Valid range: 16000000...35000000 (16..35 MHz).
cSumThe summary capacitance of C0 (the crystal itself shunt capacitance) and Cload (the parallel load capacitance), in pF. So cSum = C0 + Cload. Valid range: 1...100.
esrEffective series resistance of the crystal in Ohms. Valid range: 1...1000.
driveLevelCrystal drive level in uW. Valid range: 1...2000.
Returns
Error / status code:
CY_SYSCLK_SUCCESS - ECO configuration completed successfully
CY_SYSCLK_BAD_PARAM - One or more invalid parameters
CY_SYSCLK_INVALID_STATE - ECO already enabled For the PSoC 64 devices there are possible situations when function returns the PRA error status code. This is because for PSoC 64 devices the function uses the PRA driver to change the protected registers. Refer to cy_en_pra_status_t for more details.
Note
The following calculations are implemented in the 32-bit integer math:
On PSoC 64 devices the configuration on the PRA driver will be reflected after Cy_SysClk_EcoEnable call.
*   freqKhz = freq / 1000
*   maxAmpl = sqrt(drivelevel / 2 / esr) / 3.14 / freqKhz / cSum
*   ampSect = INT(5 * 4 * 3.14^2 * freqKhz^2 * cSum^2 * 4 * esr / 1000000000 / 1000000 / 9)
*
*   As a result of the above calculations, max amplitude must be >= 0.65V, and the
*   number of amplifier sections must be <= 3, otherwise this function returns with
*   a parameter error.
*
*   atrim = 15
*   agc_en = 1
*   wdtrim = 7
*   gtrim = ampSect > 1 ? ampSect : ampSect == 1 ? 0 : 1
*   rtrim = 0
*   ftrim = 3
* 
Function Usage
/* Scenario: ECO needs to be configured. The ECO pins are configured using
the gpio driver (SRSS_ECO_IN_PIN, SRSS_ECO_OUT_PIN). The ECO
crystal has the following characteristics:
Frequency: 17.2032 MHz
Parallel load crystal capacitance: 22 pF
Crystal shunt capacitance: 7 pF
Effective series resistance: 40 Ohm
Drive level: 500 uW */
/* Disable the ECO before configuring */
/* Configure the ECO with its characteristics */
if(CY_SYSCLK_SUCCESS != Cy_SysClk_EcoConfigure(17203200UL, /* 17.2032 MHz */
29UL, /* 7 pF C0 + 22 pF Cload */
40UL, /* 40 Ohms */
500UL)) /* 500 uW */
{
/* Insert error handling */
}
/* Enable the ECO with a timeout of 3000 microseconds */
{
/* Insert error handling */
}

◆ Cy_SysClk_EcoEnable()

cy_en_sysclk_status_t Cy_SysClk_EcoEnable ( uint32_t  timeoutus)

Enables the external crystal oscillator (ECO).

This function should be called after Cy_SysClk_EcoConfigure.

Parameters
timeoutusAmount of time in microseconds to wait for the ECO to stabilize. To avoid waiting for stabilization, set this parameter to 0.
Returns
Error / status code:
CY_SYSCLK_SUCCESS - ECO locked
CY_SYSCLK_TIMEOUT - ECO timed out and did not lock
CY_SYSCLK_INVALID_STATE - ECO already enabled For the PSoC 64 devices there are possible situations when function returns the PRA error status code. This is because for PSoC 64 devices the function uses the PRA driver to change the protected registers. Refer to cy_en_pra_status_t for more details.
Note
Call SystemCoreClockUpdate after this function calling if it affects the CLK_HF0 frequency.
Function Usage
/* Scenario: ECO is successfully configured and needs to be enabled. The
ECO pins are configured using the gpio driver
(SRSS_ECO_IN_PIN, SRSS_ECO_OUT_PIN). */
uint32_t ecofreq = 0UL; /* Variable to store the ECO frequency */
/* Enable the ECO with a timeout of 1000 microseconds */
{
/* Now ecofreq contains an actual ECO frequency */
}
else
{
/* Insert error handling */
}
/* Set the path muxes and configure the downstream clocks. For example,
the ECO can source the FLL through path 0 clock or it can source the PLL
through path 1 clock. */

◆ Cy_SysClk_EcoGetFrequency()

uint32_t Cy_SysClk_EcoGetFrequency ( void  )

Returns the frequency of the external crystal oscillator (ECO).

Returns
The frequency of the ECO.
Note
If the ECO is not enabled or stable - a zero is returned.
Function Usage
/* Scenario: ECO is successfully configured and needs to be enabled. The
ECO pins are configured using the gpio driver
(SRSS_ECO_IN_PIN, SRSS_ECO_OUT_PIN). */
uint32_t ecofreq = 0UL; /* Variable to store the ECO frequency */
/* Enable the ECO with a timeout of 1000 microseconds */
{
/* Now ecofreq contains an actual ECO frequency */
}
else
{
/* Insert error handling */
}
/* Set the path muxes and configure the downstream clocks. For example,
the ECO can source the FLL through path 0 clock or it can source the PLL
through path 1 clock. */

◆ Cy_SysClk_EcoDisable()

__STATIC_INLINE void Cy_SysClk_EcoDisable ( void  )

Disables the external crystal oscillator (ECO).

This function should not be called if the ECO is sourcing clkHf[0].

Function Usage
/* Scenario: ECO sources path 2 clock, which sources HFCLK2. The ECO needs
to be disabled and replaced with the IMO for HFCLK2 */
/* Update the path 2 clock to IMO */
/* Disable the ECO */

◆ Cy_SysClk_EcoGetStatus()

__STATIC_INLINE uint32_t Cy_SysClk_EcoGetStatus ( void  )

Reports the current status of the external crystal oscillator (ECO).

Returns
CY_SYSCLK_ECOSTAT_AMPLITUDE = ECO does not have sufficient amplitude
CY_SYSCLK_ECOSTAT_INACCURATE = ECO has sufficient amplitude but may not be meeting accuracy and duty cycle specifications
CY_SYSCLK_ECOSTAT_STABLE = ECO has fully stabilized
Function Usage
/* Scenario: Query the status of the ECO */
uint32_t ecoStatus = Cy_SysClk_EcoGetStatus();
/* Perform action based on the ECO status */
switch(ecoStatus)
{
/* Amplitude is not sufficient. Try waiting longer before
attempting to reconfigure the ECO */
break;
/* Amplitude is correct but the ECO is not yet stable. Try
waiting longer before attempting to reconfigure the ECO */
break;
/* ECO is stable and ready for use */
break;
default:
/* Invalid state. Perform error handling. */
break;
}