nt9856x/code/hdal/drivers/k_driver/include/rtos_na51089/pll.h
2023-03-28 15:07:53 +08:00

329 lines
12 KiB
C
Executable File

/**
PLL Configuration module header
PLL Configuration module header file.
@file pll.h
@ingroup mIDrvSys_CG
@note Nothing
Copyright Novatek Microelectronics Corp. 2018. All rights reserved.
*/
#ifndef _PLL_H
#define _PLL_H
#include <kwrap/nvt_type.h>
/**
@addtogroup mIHALSysCG
*/
//@{
/**
Clock Enable ID
This is for pll_enable_clock() and pll_disable_clock().
*/
typedef enum {
DMA_CLK = 1, ///< DMA(SDRAM) clock
SIE_MCLK, ///< SIE MCLK
SIE_MCLK2, ///< SIE MCLK2
SIE_CLK, ///< SIE clock
SIE2_CLK, ///< SIE2 Clock
TGE_CLK, ///< TGE clock
IPE_CLK, ///< IPE clock
DIS_CLK, ///< DIS clock
IME_CLK, ///< IME clock
SIE_MCLK3, ///< SIE MCLK3
ISE_CLK, ///< ISE clock
SP_CLK, ///< special clock
IFE_CLK, ///< IFE clock
DCE_CLK, ///< DCE clock
IDE1_CLK = 16, ///< IDE clock
SIE3_CLK, ///< SIE3 clock
CRYPTO_CLK = 23, ///< Crypto clock
VENC_CLK = 24, ///< VENC clock
AFFINE_CLK = 25, ///< AFFINE clock
JPG_CLK = 26, ///< JPEG clock
GRAPH_CLK, ///< Graphic clock
GRAPH2_CLK, ///< Graphic2 clock
DAI_CLK, ///< DAI clock
EAC_A_ADC_CLK, ///< EAC analog AD clock
EAC_A_DAC_CLK, ///< EAC analog DA clock
NAND_CLK = 32, ///< NAND clock
SDIO_CLK = 34, ///< SDIO clock
SDIO2_CLK, ///< SDIO2 clock
I2C_CLK = 36, ///< I2C clock
I2C2_CLK = 37, ///< I2C2 clock
SPI_CLK, ///< SPI clock
SPI2_CLK, ///< SPI2 clock
SPI3_CLK, ///< SPI3 clock
SIF_CLK, ///< SIF clock
UART_CLK, ///< UART clock
UART2_CLK, ///< UART2 clock
REMOTE_CLK, ///< Remote clock
ADC_CLK, ///< ADC clock
SDIO3_CLK, ///< SDIO3 clock
WDT_CLK = 49, ///< WDT clock
TMR_CLK, ///< Timer clock
EAC_D_CLKEN = 52, ///< EAC digital clock
UVCP_CLKEN = 53, ///< UVCP clock
UART3_CLK = 54, ///< UART3 clock
EFUSE_CLK = 60, ///< EFUSE clock
ETH_CLK, ///< ETH clock
SP2_CLK, ///< SP2 clock
I2C3_CLK = 63, ///< I2C3 clock
MIPI_LVDS_CLK = 65, ///< MIPI/LVDS clock
MIPI_LVDS2_CLK, ///< MIPI/LVDS2 clock
MIPI_DSI_CLK, ///< MIPI DSI clock
SIE_PXCLK, ///< SIE PX clock
SIE2_PXCLK, ///< SIE2 PX clock
SIE3_PXCLK, ///< SIE3 PX clock
PWM_CCNT_CLK = 72, ///< PWM CCNT clock
PWM_CCNT0_CLK = 72, ///< PWM CCNT0 clock
PWM_CCNT1_CLK, ///< PWM CCNT1 clock
PWM_CCNT2_CLK, ///< PWM CCNT2 clock
TSE_CLK = 77, ///< TSE clock
DRTC_CLK = 86, ///< DRTC clock
ETHPHY_CLK = 88, ///< ETH PHY clock
TRNG_CLK, ///< TRNG clock
RSA_CLK, ///< RSA clock
HASH_CLK, ///< HASH clock
TRNG_RO_CLK, ///< TRNG clock
MIPI_LVDS_PHYD4_CLK2 = 93,///< MIPI/LVDS PHY HS-clock/4
MIPI_LVDS_PHYD4_CLK = 94,///< MIPI/LVDS PHY HS-clock/4
MIPI_LVDS2_PHYD4_CLK = 95,///< MIPI/LVDS2 PHY HS-clock/4
PWM0_CLK = 96, ///< PWM0 clock
PWM1_CLK, ///< PWM1 clock
PWM2_CLK, ///< PWM2 clock
PWM3_CLK, ///< PWM3 clock
PWM4_CLK, ///< PWM4 clock
PWM5_CLK, ///< PWM5 clock
PWM6_CLK, ///< PWM6 clock
PWM7_CLK, ///< PWM7 clock
PWM8_CLK, ///< PWM8 clock
PWM9_CLK, ///< PWM9 clock
PWM10_CLK, ///< PWM10 clock
PWM11_CLK, ///< PWM11 clock
SDP_CLK = 112, ///< SDP clock
NUE2_CLK = 117, ///< NUE2 clock
MDBC_CLK, ///< MDBC clock
CNN_CLK, ///< CNN clock
IVE_CLK = 121, ///< IVE clock
IP_ACLK_CLK = 127, ///< IP_ACLK clock
ENUM_DUMMY4WORD(CG_EN)
} CG_EN;
/**
APB Clock Gating Select ID
This is for pll_set_pclk_auto_gating() / pll_clear_pclk_auto_gating() / pll_get_pclk_auto_gating().
*/
typedef enum {
SIE_GCLK, /*0*/ ///< Gating SIE APB clock
CNN_GCLK, /*1*/ ///< Gating CNN APB clock
IPE_GCLK, /*2*/ ///< Gating IPE APB clock
IME_GCLK, /*3*/ ///< Gating IME APB clock
DIS_GCLK, /*4*/ ///< Gating DIS APB clock
DCE_GCLK = 6, ///< Gating DCE APB clock
IFE_GCLK, /*7*/ ///< Gating IFE APB clock
GRA_GCLK, /*8*/ ///< Gating Graphic APB clock
GRA2_GCLK, /*9*/ ///< Gating Graphic2 APB clock
IDE_GCLK, /*10*/ ///< Gating IDE APB clock
NUE2_GCLK = 12, ///< Gating NUE2 APB clock
MDBC_GCLK, /*13*/ ///< Gating MDBC APB clock
JPG_GCLK = 15, ///< Gating JPEG APB clock
VENC_GCLK = 16, ///< Gating VENC APB clock
DAI_GCLK, /*17*/ ///< Gating DAI APB clock
EAC_GCLK, /*18*/ ///< Gating EAC APB clock
NAND_GCLK, /*19*/ ///< Gating xD/Nand APB clock
SDIO_GCLK, /*20*/ ///< Gating SDIO APB clock
SDIO2_GCLK, /*21*/ ///< Gating SDIO2 APB clock
I2C_GCLK, /*22*/ ///< Gating I2C APB clock
I2C2_GCLK, /*23*/ ///< Gating I2C2 APB clock
SPI_GCLK, /*24*/ ///< Gating SPI APB clock
SPI2_GCLK, /*25*/ ///< Gating SPI2 APB clock
SPI3_GCLK, /*26*/ ///< Gating SPI3 APB clock
SIF_GCLK, /*27*/ ///< Gating SIF APB clock
UART_GCLK, /*28*/ ///< Gating UART APB clock
UART2_GCLK, /*29*/ ///< Gating UART2 APB clock
RM_GCLK, /*30*/ ///< Gating Remote APB clock
ADC_GCLK, /*31*/ ///< Gating ADC APB clock
TMR_GCLK, /*32*/ ///< Gating TMR APB clock
WDT_GCLK, /*33*/ ///< Gating Watchdog APB clock
SDE_GCLK, /*34*/ ///< Gating SDE APB clock
MIPI_LVDS_GCLK = 35, ///< Gating MIPI/LVDS APB clock
MIPI_LVDS2_GCLK, /*36*/ ///< Gating MIPI/LVDS2 APB clock
MIPI_DSI_GCLK = 38, ///< Gating MIPI DSI APB clock
ISE_GCLK = 40, ///< Gating ISE APB clock
SIE2_GCLK, /*41*/ ///< Gating SIE2 APB clock
SIE3_GCLK, /*42*/ ///< Gating SIE3 APB clock
PWM_GCLK, /*43*/ ///< Gating PWM APB clock
SDIO3_GCLK = 47, ///< Gating SDIO3 APB clock
UART3_GCLK, /*48*/ ///< Gating UART3 APB clock
TGE_GCLK = 52, ///< Gating TGE APB clock
I2C3_GCLK = 56, ///< Gating I2C3 APB clock
TSE_GCLK, /*57*/ ///< Gating TSE APB clock
AFFINE_GCLK, /*58*/ ///< Gating AFFINE APB clock
IVE_GCLK = 60, ///< Gating IVE APB clock
SENPHY_GCLK = 61, ///< Gating SENPHY APB clock
UVCP_GCLK = 62, ///< Gating UVCP APB clock
GPIO_GCLK = 64, ///< Gating GPIO APB clock
INTC_GCLK, /*65*/ ///< Gating INTC APB clock
DMA_GCLK = 67, ///< Gating DMAC APB clock
PCLKGAT_MAXNUM,
ENUM_DUMMY4WORD(GATECLK)
} GATECLK;
/**
Module Clock Gating Select ID
This is for pll_set_clk_auto_gating() / pll_clear_clk_auto_gating() / pll_get_clk_auto_gating().
*/
typedef enum {
M_GCLK_BASE = PCLKGAT_MAXNUM,
CNN_M_GCLK, /*1*/ ///< Gating CNN Module clock
IPE_M_GCLK, /*2*/ ///< Gating IPE Module clock
IME_M_GCLK, /*3*/ ///< Gating IME Module clock
DIS_M_GCLK, /*4*/ ///< Gating DIS Module clock
DCE_M_GCLK = 6+M_GCLK_BASE, ///< Gating DCE Module clock
IFE_M_GCLK, /*7*/ ///< Gating IFE Module clock
GRA_M_GCLK, /*8*/ ///< Gating Graphic Module clock
GRA2_M_GCLK, /*9*/ ///< Gating Graphic2 Module clock
NUE2_M_GCLK = 12+M_GCLK_BASE, ///< Gating NUE2 Module clock
MDBC_M_GCLK, /*13*/ ///< Gating MDBC Module clock
JPG_M_GCLK = 15+M_GCLK_BASE, ///< Gating JPEG Module clock
VENC_M_GCLK = 16+M_GCLK_BASE, ///< Gating VENC Module clock
NAND_M_GCLK = 19+M_GCLK_BASE, ///< Gating xD/Nand Module clock
SDIO_M_GCLK, /*20*/ ///< Gating SDIO Module clock
SDIO2_M_GCLK, /*21*/ ///< Gating SDIO2 Module clock
SPI_M_GCLK = 24+M_GCLK_BASE, ///< Gating SPI Module clock
SPI2_M_GCLK, /*25*/ ///< Gating SPI2 Module clock
SPI3_M_GCLK, /*26*/ ///< Gating SPI3 Module clock
SIF_M_GCLK, /*27*/ ///< Gating SIF Module clock
ISE_M_GCLK = 40+M_GCLK_BASE, ///< Gating ISE Module clock
PWM_M_GCLK = 43+M_GCLK_BASE, ///< Gating PWM Module clock
SDIO3_M_GCLK = 47+M_GCLK_BASE, ///< Gating SDIO3 Module clock
TSE_M_GCLK = 57+M_GCLK_BASE, ///< Gating TSE Module clock
AFFINE_M_GCLK = 58+M_GCLK_BASE, ///< Gating AFFINE Module clock
ETH_M_GCLK = 59+M_GCLK_BASE, ///< Gating ETH Module clock
IVE_M_GCLK = 60+M_GCLK_BASE, ///< Gating IVE Module clock
MCLKGAT_MAXNUM,
ENUM_DUMMY4WORD(M_GATECLK)
} M_GATECLK;
/*
@name Default Gating Clock Select definition
This is for pll_config_clk_auto_gating() & pll_config_pclk_auto_gating().
*/
//@{
#define PLL_CLKSEL_DEFAULT_CLKGATE1 0x00000000
#define PLL_CLKSEL_DEFAULT_CLKGATE2 0x00000000
#define PLL_CLKSEL_DEFAULT_PCLKGATE1 0x00000000
#define PLL_CLKSEL_DEFAULT_PCLKGATE2 0x00000000
#define PLL_CLKSEL_DEFAULT_PCLKGATE3 0x00000000
//@}
/**
PLL ID
*/
typedef enum {
PLL_ID_1 = 1, ///< PLL1 (internal 480 MHz)
PLL_ID_3 = 3, ///< PLL3 (for DMA)
PLL_ID_4 = 4, ///< PLL4 (N/A:dummy)
PLL_ID_5 = 5, ///< PLL5 (for sensor1)
PLL_ID_6 = 6, ///< PLL6 (for IDE/eth)
PLL_ID_7 = 7, ///< PLL7 (for audio)
PLL_ID_8 = 8, ///< PLL8 (for CPU)
PLL_ID_9 = 9, ///< PLL9 (for IDE/eth backup)
PLL_ID_10 = 10, ///< PLL10 (N/A:dummy)
PLL_ID_11 = 11, ///< PLL11 (for DSI)
PLL_ID_12 = 12, ///< PLL12 (for sensor2)
PLL_ID_13 = 13, ///< PLL13 (N/A:dummy)
PLL_ID_14 = 14, ///< PLL14 (N/A:dummy)
PLL_ID_15 = 15, ///< PLL15 (N/A:dummy)
PLL_ID_16 = 16, ///< PLL16 (N/A:dummy)
PLL_ID_17 = 17, ///< PLL17 (N/A:dummy)
PLL_ID_18 = 18, ///< PLL18 (N/A:dummy)
PLL_ID_FIXED320 = 24, ///< Fixed 320MHz PLL
PLL_ID_MAX,
ENUM_DUMMY4WORD(PLL_ID)
} PLL_ID;
#define PLL_ID_2 PLL_ID_MAX ///< Backward compatible
extern ER pll_set_pll(PLL_ID id, UINT32 ui_setting);
extern BOOL pll_get_pll_enable(PLL_ID id);
extern ER pll_set_pll_enable(PLL_ID id, BOOL b_enable);
extern ER pll_set_pll_freq(PLL_ID id, UINT32 ui_frequency);
extern UINT32 pll_get_pll_freq(PLL_ID id);
extern ER pll_set_pll_spread_spectrum(PLL_ID id, UINT32 lower_frequency, UINT32 upper_frequency);
extern ER pll_get_pll_spread_spectrum(PLL_ID id, UINT32 *pui_lower_freq, UINT32 *pui_upper_freq);
extern void pll_set_pwm_clock_rate(UINT32 pwm_number, UINT32 ui_divider);
extern BOOL pll_is_clock_enabled(CG_EN num);
extern void pll_set_clk_auto_gating(M_GATECLK clock_select);
extern void pll_clear_clk_auto_gating(M_GATECLK clock_select);
extern BOOL pll_get_clk_auto_gating(M_GATECLK clock_select);
extern void pll_set_pclk_auto_gating(GATECLK clock_select);
extern void pll_clear_pclk_auto_gating(GATECLK clock_select);
extern BOOL pll_get_pclk_auto_gating(GATECLK clock_select);
extern void pll_set_trng_ro_sel(UINT32 trng_ro_select, UINT32 ui_divider);
extern void pll_get_trng_ro_sel(UINT32 *pui_trng_ro_sel, UINT32 *pui_divider);
extern ER pll_init(void);
extern UINT32 pll_get_apb_freq(void);
#define pll_setPLL pll_set_pll
#define pll_getPLLEn pll_get_pll_enable
#define pll_setPLLEn pll_set_pll_enable
#define pll_getPLLFreq pll_get_pll_freq
#define pll_setPLLSpreadSpectrum pll_set_pll_spread_spectrum
#define pll_getPLLSpreadSpectrum pll_get_pll_spread_spectrum
#define pll_isClockEnabled pll_is_clock_enabled
#define pll_setClkAutoGating pll_set_clk_auto_gating
#define pll_clearClkAutoGating pll_clear_clk_auto_gating
#define pll_getClkAutoGating pll_get_clk_auto_gating
#define pll_setPclkAutoGating pll_set_pclk_auto_gating
#define pll_clearPclkAutoGating pll_clear_pclk_auto_gating
#define pll_getPclkAutoGating pll_get_pclk_auto_gating
//@}
#endif