aboutsummaryrefslogtreecommitdiff
path: root/lib/sec_library/include/sys_clk.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sec_library/include/sys_clk.h')
-rw-r--r--lib/sec_library/include/sys_clk.h211
1 files changed, 211 insertions, 0 deletions
diff --git a/lib/sec_library/include/sys_clk.h b/lib/sec_library/include/sys_clk.h
new file mode 100644
index 00000000..c04c26e8
--- /dev/null
+++ b/lib/sec_library/include/sys_clk.h
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2017-2020 Alibaba Group Holding Limited
+ */
+
+/******************************************************************************
+ * @file sys_clk.h
+ * @brief header file for setting system frequency.
+ * @version V1.0
+ * @date 9. April 2020
+ ******************************************************************************/
+#ifndef _SYS_CLK_H_
+#define _SYS_CLK_H_
+
+#include <stdint.h>
+#ifdef SEC_LIB_VERSION
+#include "drv/common.h"
+#else
+#include "common.h"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ IHS_CLK = 0U, /* internal high speed clock */
+ EHS_CLK, /* external high speed clock */
+ ILS_CLK, /* internal low speed clock */
+ ELS_CLK, /* external low speed clock */
+ PLL_CLK /* PLL clock */
+} clk_src_t;
+
+typedef enum {
+ CPU_300MHZ = 300000000U,
+ CPU_288MHZ = 288000000U,
+ CPU_276MHZ = 276000000U,
+ CPU_270MHZ = 270000000U,
+ CPU_264MHZ = 264000000U,
+ CPU_252MHZ = 252000000U,
+ CPU_245_76MHZ = 245760000U,
+ CPU_240MHZ = 240000000U,
+ CPU_228MHZ = 228000000U,
+ CPU_216MHZ = 216000000U,
+ CPU_204MHZ = 204000000U,
+ CPU_192MHZ = 192000000U,
+ CPU_180MHZ = 180000000U,
+ CPU_168MHZ = 168000000U,
+ CPU_156MHZ = 156000000U,
+ CPU_144MHZ = 144000000U,
+ CPU_135MHZ = 135000000U,
+ CPU_132MHZ = 132000000U,
+ CPU_120MHZ = 120000000U,
+ CPU_108MHZ = 108000000U,
+ CPU_96MHZ = 96000000U,
+ CPU_84MHZ = 84000000U,
+ CPU_72MHZ = 72000000U,
+ CPU_60MHZ = 60000000U,
+ CPU_48MHZ = 48000000U,
+ CPU_36MHZ = 36000000U,
+ CPU_30MHZ = 30000000U,
+ CPU_24MHZ = 24000000U,
+ CPU_20MHZ = 20000000U,
+ CPU_10MHZ = 10000000U,
+} sys_freq_t;
+
+
+/* pllclkout : ( pllclkin / 2)*( FN + Frac/4096 ) */
+typedef struct {
+
+ uint32_t pll_is_used; /* pll is used */
+
+ uint32_t pll_source; /* select pll input source clock */
+
+ uint32_t pll_src_clk_divider; /* ratio between pll_srcclk clock and pll_clkin clock */
+
+ uint32_t fn; /* integer value of frequency division */
+
+ uint32_t frac; /* decimal value of frequency division */
+
+} pll_config_t;
+
+
+typedef struct {
+ uint32_t system_clk; /* system clock */
+
+ // pll_config_t pll_config; /* pll config struct */
+
+ uint32_t sys_clk_source; /* select sysclk source clock */
+
+ uint32_t rtc_clk_source; /* select rtcclk source clock */
+
+ uint32_t cpu_clk_divider; /* ratio between fs_mclk clock and mclk clock */
+
+ uint32_t sys_clk_divider; /* ratio between fs_mclk clock and mclk clock */
+
+ uint32_t ahb_clk_divider; /* ratio between mclk clock and ahb clock */
+
+ uint32_t apb_clk_divider; /* ratio between mclk clock and apb clock */
+
+ uint32_t uart_clk_divider; /* ratio between mclk clock and uart clock */
+
+ uint32_t audio_clk_divider; /* ratio between mclk clock and audio clock */
+
+ uint32_t vad_clk_divider; /* ratio between mclk clock and vad clock */
+
+} system_clk_config_t;
+
+typedef enum {
+ CLK_DIV1 = 0U,
+ CLK_DIV2,
+ CLK_DIV3,
+ CLK_DIV4,
+ CLK_DIV5,
+ CLK_DIV6,
+ CLK_DIV7,
+ CLK_DIV8,
+ CLK_DIV9,
+ CLK_DIV10,
+ CLK_DIV11,
+ CLK_DIV12,
+ CLK_DIV13,
+ CLK_DIV14,
+ CLK_DIV15,
+ CLK_DIV16
+} apb_div_t;
+
+typedef enum {
+ PLL_FN_18 = 0U,
+ PLL_FN_19,
+ PLL_FN_20,
+ PLL_FN_21,
+ PLL_FN_22,
+ PLL_FN_23,
+ PLL_FN_24,
+ PLL_FN_25,
+ PLL_FN_26,
+ PLL_FN_27,
+ PLL_FN_28,
+ PLL_FN_29,
+ PLL_FN_30,
+ PLL_FN_31,
+ PLL_FN_32,
+ PLL_FN_33,
+ PLL_FN_34,
+ PLL_FN_35,
+ PLL_FN_36,
+ PLL_FN_37,
+ PLL_FN_38,
+ PLL_FN_39,
+ PLL_FN_40,
+ PLL_FN_41,
+ PLL_FN_42,
+ PLL_FN_43,
+ PLL_FN_44,
+ PLL_FN_45,
+ PLL_FN_46,
+ PLL_FN_47,
+ PLL_FN_48,
+ PLL_FN_49
+} pll_fn_t;
+
+typedef enum {
+ TIM0_CLK = 0U,
+ TIM1_CLK,
+ RTC0_CLK,
+ WDT_CLK,
+ SPI0_CLK,
+ UART0_CLK,
+ IIC0_CLK,
+ PWM_CLK,
+ QSPI0_CLK,
+ PWMR_CLK,
+ EFUSE_CLK,
+ I2S0_CLK,
+ I2S1_CLK,
+ GPIO0_CLK,
+
+ TIM2_CLK = 32U,
+ TIM3_CLK,
+ SPI1_CLK,
+ UART1_CLK,
+ I2S567_CLK,
+ ADC_CLK,
+ ETB_CLK,
+ I2S2_CLK,
+ I2S3_CLK,
+ IOC_CLK,
+ CODEC_CLK
+} clk_module_t;
+
+
+/**
+ \brief Set the system clock according to the parameter
+ \param[in] config system clock config.
+ \return error code
+*/
+csi_error_t soc_sysclk_config(system_clk_config_t *config);
+
+/**
+ \brief Set iic reset
+ \param[in] idx iic idx.
+ \return Null
+*/
+void soc_reset_iic(uint32_t idx);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SYS_CLK_H_ */
+