Hardware Abstraction Layer (HAL)

General Description

Implementation specific interface for using the Clock driver.

These items, while usable within the HAL, are not necessarily portable between devices. The diagram below shows how the clocks relate to each other. This is a superset of what is available. See the device specific Data Sheet for the exact set of clocks that are available on a specific device.

mxs40_clock_tree.png

Code snippets

Note
Error handling code has been intentionally left out of snippets to highlight API usage.

Snippet: System initialization

The following snippet shows the clock driver can be used to initialize all clocks in the system.

Note
This example is device specific.
cy_rslt_t rslt;
cyhal_clock_t clock_imo, clock_path, clock_pll, clock_hf;
cyhal_usb_dev_t usb_obj;
rslt = cyhal_clock_get(&clock_imo, &CYHAL_CLOCK_IMO);
/* Initialize the PathMux[1] to source from the IMO */
rslt = cyhal_clock_get(&clock_path, &CYHAL_CLOCK_PATHMUX[1]);
rslt = cyhal_clock_init(&clock_path);
rslt = cyhal_clock_set_source(&clock_path, &clock_imo);
rslt = cyhal_clock_set_enabled(&clock_path, true, true);
/* Initialize the PLL[0] to source from the PathMux[0], and run at 48MHz */
rslt = cyhal_clock_get(&clock_pll, &CYHAL_CLOCK_PLL[0]);
rslt = cyhal_clock_init(&clock_pll);
rslt = cyhal_clock_set_source(&clock_pll, &clock_path);
rslt = cyhal_clock_set_frequency(&clock_pll, 48000000, NULL);
rslt = cyhal_clock_set_enabled(&clock_pll, true, true);
/* Initialize the HF[3] clock to source from the PLL[0], and run at 48MHz */
rslt = cyhal_clock_get(&clock_hf, &CYHAL_CLOCK_HF[3]);
rslt = cyhal_clock_init(&clock_hf);
rslt = cyhal_clock_set_source(&clock_hf, &clock_pll);
rslt = cyhal_clock_set_divider(&clock_hf, 1);
/* Initialize the USB with the clock path that was just setup */
rslt = cyhal_usb_dev_init(&usb_obj, USBDP, USBDM, &clock_hf);

Variables

const cyhal_resource_inst_t CYHAL_CLOCK_IMO
 Internal Main Oscillator: This is a fixed-frequency clock that is commonly used as a general purpose source for clocks that do not require specific frequencies or very high accuracy. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_EXT
 External Clock: This is an off-chip clock (not an oscillator). More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_ILO
 Internal Low Speed Oscillator: This is a low accuracy fixed-frequency clock in the kilohertz range that is available in sleep, deep sleep and hibernate power modes. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_LF
 Low Frequency Clock: This clock is the source for the multi-counter watchdog timers (MCWDT), and can also be a source for the RTC. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_PUMP
 Analog Pump Clock: This clock ensures precision analog performance in low voltage applications. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_BAK
 Backup Clock: This clock is available to the backup domain. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_FAST
 Fast Clock: This clock is used for the CM4 and associated AHB-Lite bus infrastructure. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_PERI
 Peripheral Clock: This is the source clock for any divided clock in the design. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_TIMER
 Timer Clock: This clock is intended as a source for high-frequency timers, such as the Energy Profiler and CPU SysTick clock. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_SLOW
 Slow Clock: This clock is used for the CM0+ CPU, Datawire and CRYPTO components and the associated CPUSS slow infrastructure. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_ALT_SYS_TICK
 AltSysTickClk: Provides an optional external source for the CM4/CM0+ SysTick timers. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_FLL
 Frequency-Locked Loop: This is a high-frequency clock suitable for most on-chip purposes. More...
 
const cyhal_resource_inst_t CYHAL_CLOCK_HF [SRSS_NUM_HFROOT]
 High Frequency Clock: A high-frequency clock output driving specific peripherals. More...
 

Variable Documentation

◆ CYHAL_CLOCK_IMO

const cyhal_resource_inst_t CYHAL_CLOCK_IMO

Internal Main Oscillator: This is a fixed-frequency clock that is commonly used as a general purpose source for clocks that do not require specific frequencies or very high accuracy.

This clock is stopped in the deep sleep and hibernate power modes.

◆ CYHAL_CLOCK_EXT

const cyhal_resource_inst_t CYHAL_CLOCK_EXT

External Clock: This is an off-chip clock (not an oscillator).

This clock is stopped in the deep sleep and hibernate power modes.

◆ CYHAL_CLOCK_ILO

const cyhal_resource_inst_t CYHAL_CLOCK_ILO

Internal Low Speed Oscillator: This is a low accuracy fixed-frequency clock in the kilohertz range that is available in sleep, deep sleep and hibernate power modes.

◆ CYHAL_CLOCK_LF

const cyhal_resource_inst_t CYHAL_CLOCK_LF

Low Frequency Clock: This clock is the source for the multi-counter watchdog timers (MCWDT), and can also be a source for the RTC.

◆ CYHAL_CLOCK_PUMP

const cyhal_resource_inst_t CYHAL_CLOCK_PUMP

Analog Pump Clock: This clock ensures precision analog performance in low voltage applications.

◆ CYHAL_CLOCK_BAK

const cyhal_resource_inst_t CYHAL_CLOCK_BAK

Backup Clock: This clock is available to the backup domain.

Typically useful if an external WCO is not available.

◆ CYHAL_CLOCK_FAST

const cyhal_resource_inst_t CYHAL_CLOCK_FAST

Fast Clock: This clock is used for the CM4 and associated AHB-Lite bus infrastructure.

◆ CYHAL_CLOCK_PERI

const cyhal_resource_inst_t CYHAL_CLOCK_PERI

Peripheral Clock: This is the source clock for any divided clock in the design.

◆ CYHAL_CLOCK_TIMER

const cyhal_resource_inst_t CYHAL_CLOCK_TIMER

Timer Clock: This clock is intended as a source for high-frequency timers, such as the Energy Profiler and CPU SysTick clock.

This clock is stopped in the hibernate power mode.

◆ CYHAL_CLOCK_SLOW

const cyhal_resource_inst_t CYHAL_CLOCK_SLOW

Slow Clock: This clock is used for the CM0+ CPU, Datawire and CRYPTO components and the associated CPUSS slow infrastructure.

◆ CYHAL_CLOCK_ALT_SYS_TICK

const cyhal_resource_inst_t CYHAL_CLOCK_ALT_SYS_TICK

AltSysTickClk: Provides an optional external source for the CM4/CM0+ SysTick timers.

◆ CYHAL_CLOCK_FLL

const cyhal_resource_inst_t CYHAL_CLOCK_FLL

Frequency-Locked Loop: This is a high-frequency clock suitable for most on-chip purposes.

It is similar to a PLL, but starts up much faster and consumes less current. This clock is stopped in the deep sleep and hibernate power modes.

◆ CYHAL_CLOCK_HF

const cyhal_resource_inst_t CYHAL_CLOCK_HF[SRSS_NUM_HFROOT]

High Frequency Clock: A high-frequency clock output driving specific peripherals.