rp2040/driver/inc/clock.h

153 lines
4.8 KiB
C
Raw Normal View History

2024-03-24 20:52:55 +08:00
#ifndef __HARDWARE_CLOCK_H__
#define __HARDWARE_CLOCK_H__
#include "reg.h"
#include "clock_reg.h"
#define CLOCK_ROSC_FREQ_RANGE_LOW (0)
#define CLOCK_ROSC_FREQ_RANGE_MEDIUM (1)
#define CLOCK_ROSC_FREQ_RANGE_HIGH (2)
#define CLOCK_ROSC_FREQ_RANGE_TOOHIGH (3)
#define CLOCK_ROSC_FREQ_RANGE_INVALID (4)
#define CLOCK_ROSC_STATUS_ENABLED (12)
#define CLOCK_ROSC_STATUS_DIV_RUNNING (16)
#define CLOCK_ROSC_STATUS_BADWRITE (24)
#define CLOCK_ROSC_STATUS_STABLE (31)
#define CLOCK_XOSC_STATUS_ENABLED (12)
#define CLOCK_XOSC_STATUS_BADWRITE (24)
#define CLOCK_XOSC_STATUS_STABLE (31)
/* clock instance */
#define CLOCK_GPOUT0 (0)
#define CLOCK_GPOUT1 (1)
#define CLOCK_GPOUT2 (2)
#define CLOCK_GPOUT3 (3)
#define CLOCK_REF (4)
#define CLOCK_SYS (5)
#define CLOCK_PERI (6)
#define CLOCK_USB (7)
#define CLOCK_ADC (8)
#define CLOCK_RTC (9)
/* clock source */
2025-05-11 22:30:39 +08:00
#define CLOCK_GPOUT_SRC_SYSPLL (0)
#define CLOCK_GPOUT_SRC_GPIN0 (1)
#define CLOCK_GPOUT_SRC_GPIN1 (2)
#define CLOCK_GPOUT_SRC_USBPLL (3)
#define CLOCK_GPOUT_SRC_ROSC (4)
#define CLOCK_GPOUT_SRC_XOSC (5)
#define CLOCK_GPOUT_SRC_SYS (6)
#define CLOCK_GPOUT_SRC_USB (7)
#define CLOCK_GPOUT_SRC_ADC (8)
#define CLOCK_GPOUT_SRC_RTC (9)
#define CLOCK_GPOUT_SRC_REF (10)
2024-03-24 20:52:55 +08:00
#define CLOCK_REF_SRC_USBPLL (0)
#define CLOCK_REF_SRC_GPIN0 (1)
#define CLOCK_REF_SRC_GPIN1 (2)
#define CLOCK_REF_SRC_ROSC_PH_GLITCHLESS (3)
#define CLOCK_REF_SRC_XOSC_GLITCHLESS (4)
#define CLOCK_SYS_SRC_SYSPLL (0)
#define CLOCK_SYS_SRC_USBPLL (1)
#define CLOCK_SYS_SRC_ROSC (2)
#define CLOCK_SYS_SRC_XOSC (3)
#define CLOCK_SYS_SRC_GPIN0 (4)
#define CLOCK_SYS_SRC_GPIN1 (5)
#define CLOCK_SYS_SRC_REF_GLITCHLESS (6)
#define CLOCK_PERI_SRC_SYS (0)
#define CLOCK_PERI_SRC_SYSPLL (1)
#define CLOCK_PERI_SRC_USBPLL (2)
#define CLOCK_PERI_SRC_ROSC_PH (3)
#define CLOCK_PERI_SRC_XOSC (4)
#define CLOCK_PERI_SRC_GPIN0 (5)
#define CLOCK_PERI_SRC_GPIN1 (6)
#define CLOCK_USB_SRC_USBPLL (0)
#define CLOCK_USB_SRC_SYSPLL (1)
#define CLOCK_USB_SRC_ROSC_PH (2)
#define CLOCK_USB_SRC_XOSC (3)
#define CLOCK_USB_SRC_GPIN0 (4)
#define CLOCK_USB_SRC_GPIN1 (5)
#define CLOCK_ADC_SRC_USBPLL (0)
#define CLOCK_ADC_SRC_SYSPLL (1)
#define CLOCK_ADC_SRC_ROSC_PH (2)
#define CLOCK_ADC_SRC_XOSC (3)
#define CLOCK_ADC_SRC_GPIN0 (4)
#define CLOCK_ADC_SRC_GPIN1 (5)
#define CLOCK_RTC_SRC_USBPLL (0)
#define CLOCK_RTC_SRC_SYSPLL (1)
#define CLOCK_RTC_SRC_ROSC_PH (2)
#define CLOCK_RTC_SRC_XOSC (3)
#define CLOCK_RTC_SRC_GPIN0 (4)
#define CLOCK_RTC_SRC_GPIN1 (5)
#ifdef __cplusplus
extern "C" {
#endif
/* ROSC function */
void clock_rosc_enable(void);
void clock_rosc_disable(void);
void clock_rosc_set_freq_range(uint8_t freq_range);
uint8_t clock_rosc_get_freq_range(void);
void clock_rosc_set_strength(uint8_t stage, uint8_t strength);
uint8_t clock_rosc_get_strength(uint8_t stage);
void clock_rosc_dormant(void);
void clock_rosc_wake(void);
void clock_rosc_set_div(uint8_t div);
uint8_t clock_rosc_get_div(void);
uint8_t clock_rosc_get_status(uint8_t item);
void clock_rosc_clr_badwrite_status(void);
uint8_t clock_rosc_get_randombit(void);
void clock_rosc_set_count(uint8_t count);
uint8_t clock_rosc_get_count(void);
/* XOSC function */
void clock_xosc_enable(void);
void clock_xosc_disable(void);
uint8_t clock_xosc_get_status(uint8_t item);
void clock_xosc_clr_badwrite_status(void);
void clock_xosc_dormant(void);
void clock_xosc_wake(void);
void clock_xosc_set_startup_delay(uint32_t cycle);
void clock_xosc_set_count(uint8_t count);
uint8_t clock_xosc_get_count(void);
2025-05-11 22:30:39 +08:00
/* pll function */
void clock_syspll_init(uint8_t refdiv, uint16_t feedback, uint8_t postdiv1, uint8_t postdiv2);
void clock_usbpll_init(uint8_t refdiv, uint16_t feedback, uint8_t postdiv1, uint8_t postdiv2);
void clock_syspll_deinit(void);
void clock_usbpll_deinit(void);
2025-05-18 22:09:57 +08:00
/* clock set function */
2025-05-11 22:30:39 +08:00
void clock_gpout_set(uint8_t id, uint8_t enable, uint8_t src, uint32_t div); /* div is 1~16777215 */
void clock_ref_set(uint8_t src, uint32_t div); /* div is 1~3 */
void clock_sys_set(uint8_t src, uint32_t div); /* div is 1~16777215 */
2024-03-24 20:52:55 +08:00
void clock_peri_set(uint8_t enable, uint8_t src);
2025-05-11 22:30:39 +08:00
void clock_usb_set(uint8_t enable, uint8_t src, uint32_t div); /* div is 1~3 */
void clock_adc_set(uint8_t enable, uint8_t src, uint32_t div); /* div is 1~3 */
void clock_rtc_set(uint8_t enable, uint8_t src, uint32_t div); /* div is 1~16777215 */
2024-03-24 20:52:55 +08:00
2025-05-18 22:09:57 +08:00
/* clock get frequency function */
uint32_t clock_syspll_get_freq(void);
uint32_t clock_usbpll_get_freq(void);
uint32_t clock_gpout_get_freq(uint8_t id);
uint32_t clock_ref_get_freq(void);
uint32_t clock_sys_get_freq(void);
uint32_t clock_peri_get_freq(void);
uint32_t clock_usb_get_freq(void);
uint32_t clock_adc_get_freq(void);
uint32_t clock_rtc_get_freq(void);
2024-03-24 20:52:55 +08:00
#ifdef __cplusplus
}
#endif
#endif /* __HARDWARE_CLOCK_H__ */