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
-
freq | Operating frequency of the crystal in Hz. Valid range: 16000000...35000000 (16..35 MHz). |
cSum | The 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. |
- Note
- For CAT1B Devices: cSum stands for crystal load capacitance in pF.
- Parameters
-
esr | Effective series resistance of the crystal in Ohms. Valid range: 1...1000. |
driveLevel | Crystal 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
- Note
- Behavior of this API is IP dependent.
On CAT1A device:
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. 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
*
- Note
- On CAT1C Device:
* No TRIM registers configuration required for CAT1B devices, For legacy API is emptied
* The following calculations are implemented, generally in floating point:
* freqMHz = freq / 1000000
* max amplitude Vpp = 1000 * sqrt(drivelevel / 2 / esr) / 3.14 / freqMHz / cLoad
* gm_min mA/V = 5 * 4 * 3.14 * 3.14 * freqMhz^2 * cLoad^2 * 4 * esr / 1000000000
* Number of amplifier sections = INT(gm_min / 4.5)
*
* As a result of the above calculations, max amplitude must be >= 0.5, and the
* number of amplifier sections must be <= 3, otherwise this function returns with
* a parameter error.
*
* atrim = if (max amplitude < 0.5) then error
* else 2 * the following:
* max amplitude < 0.6: 0
* max amplitude < 0.7: 1
* max amplitude < 0.8: 2
* max amplitude < 0.9: 3
* max amplitude < 1.15: 5
* max amplitude < 1.275: 6
* max amplitude >= 1.275: 7
* wdtrim = if (max amplitude < 0.5) then error
* else 2 * the following:
* max amplitude < 1.2: INT(5 * max amplitude) - 2
* max amplitude >= 1.2: 3
* gtrim = if (number of amplifier sections > 3) then error
* else the following:
* number of amplifier sections > 1: number of amplifier sections
* number of amplifier sections = 1: 0
* number of amplifier sections < 1: 1
* rtrim = if (gtrim = error) then error
* else the following:
* freqMHz > 26.8: 0
* freqMHz > 23.33: 1
* freqMHz > 16.5: 2
* freqMHz <= 16.5: 3
* ftrim = if (atrim = error) then error
* else INT(atrim / 2)
*
-
This API is available for CAT1A, CAT1C and CAT1D devices.
- Function Usage
29UL,
40UL,
500UL))
{
}
{
}