// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // File name : cpm_drv.h // Version : V0.1 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #ifndef __CPM_DRV_H__ #define __CPM_DRV_H__ #include "type.h" #include "memmap.h" #include "cpm_reg.h" //系统时钟源 #define OSC108M 108*1000*1000 #define OSC120M 120*1000*1000 #define OSC150M 150*1000*1000 #define OSC160M 160*1000*1000 //必须二分频使用 typedef enum //系统时钟最高256分频 { SYS_CLK_DIV_1 = 0, SYS_CLK_DIV_2, SYS_CLK_DIV_3, SYS_CLK_DIV_4, SYS_CLK_DIV_5, SYS_CLK_DIV_6, SYS_CLK_DIV_7, SYS_CLK_DIV_8, SYS_CLK_DIV_9, SYS_CLK_DIV_10, SYS_CLK_DIV_11, SYS_CLK_DIV_12, SYS_CLK_DIV_13, SYS_CLK_DIV_14, SYS_CLK_DIV_15, SYS_CLK_DIV_16 }SYS_CLK_DIV; typedef enum //IPS 时钟最高16分频 { // IPS_CLK_DIV_1 = 0, IPS_CLK_DIV_2 = 1, IPS_CLK_DIV_3, IPS_CLK_DIV_4, IPS_CLK_DIV_5, IPS_CLK_DIV_6, IPS_CLK_DIV_7, IPS_CLK_DIV_8, IPS_CLK_DIV_9, IPS_CLK_DIV_10, IPS_CLK_DIV_11, IPS_CLK_DIV_12, IPS_CLK_DIV_13, IPS_CLK_DIV_14, IPS_CLK_DIV_15, IPS_CLK_DIV_16 }IPS_CLK_DIV; //打开需要trim的时钟 #define CPM ((CPM_TypeDef *)(CPM_BASE_ADDR)) #define EFLASH_SYS_CLK_20M 20000000 #define EFLASH_SYS_CLK_30M 30000000 #define EFLASH_SYS_CLK_40M 40000000 #define EFLASH_SYS_CLK_60M 60000000 #define EFLASH_SYS_CLK_80M 80000000 #define EFLASH_SYS_CLK_120M 120000000 #define SUPPER_EDGE_WAKEUP 0 #define CPM_VREF_TRIM_090 0x10 //0.90V #define CPM_VREF_TRIM_105 0x00 //1.05V #define CPM_VREF_TRIM_110 0x01 //1.10V #define CPM_VREF_TRIM_115 0x02 //1.15V #define CPM_VREF_TRIM_121 0x03 //1.21V #define VDD_PD_RETENT (1<<0) #define VDD_WK_SWOFF (1<<5) #define CPM_IPS_SLPEN (1<<9) #define WKP_AFILT_BYPASS (1<<15) #define WKP_DFILT_GTE (1<<28) #define WKP_DFILT_BYPASS (1<<29) #define WKP_DFILT_EN (1<<30) typedef enum _SYSCLK_SEL_ { SYSCLK_OSC8M = 0, SYSCLK_OSC160M, SYSCLK_USBPHY240M, SYSCLK_OSCEXT }SysClkSelect; #define MODULE_CLK_EFMULP 1 #define MODULE_CLK_SDRAM_SM 2 #define MODULE_CLK_SDRAM 3 #define MODULE_CLK_MCC_MULTI 5 #define MODULE_CLK_MCCADR 6 #define MODULE_CLK_ADC 7 #define MODULE_CLK_CLCD_MULTI 8 #define MODULE_CLK_MESH 9 #define MODULE_CLK_TC 10 #define MODULE_CLK_DMA2D_SRAM 11 #define MODULE_CLK_MIPI_SAMPLE 12 #define MODULE_CLK_DCMI_PIX 13 #define MODULE_CLK_DCMI_SENSOR 14 #define MODULE_CLK_CLKOUT 15 #define MODULE_CLK_CCM 16 #define MODULE_CLK_RIM 17 #define MODULE_CLK_EFM_IPS 18 #define MODULE_CLK_CPM_IPS 19 #define MODULE_CLK_EPORT 20 #define MODULE_CLK_EPORT1 21 #define MODULE_CLK_EPORT2 22 #define MODULE_CLK_EPORT3 23 #define MODULE_CLK_EPORT4 24 #define MODULE_CLK_SRAM2LCD 25 #define MODULE_CLK_TRACE 26 #define MODULE_CLK_DMAC1 33 #define MODULE_CLK_DMAC2 34 #define MODULE_CLK_CLCD1 35 #define MODULE_CLK_CRC0 36 #define MODULE_CLK_CRC1 37 #define MODULE_CLK_MIPI 38 #define MODULE_CLK_DMA2D 40 #define MODULE_CLK_DCM1 41 #define MODULE_CLK_PXLP 42 #define MODULE_CLK_AHB2_MUX 43 #define MODULE_CLK_SRAMD 44 #define MODULE_CLK_SRAM0 45 #define MODULE_CLK_SRAM1 46 #define MODULE_CLK_SRAM2 47 #define MODULE_CLK_SRAM3 48 #define MODULE_CLK_SSI4 64 #define MODULE_CLK_SSI5 65 #define MODULE_CLK_SSI6 66 #define MODULE_CLK_USBC 67 #define MODULE_CLK_ROM 68 #define MODULE_CLK_AHB3_MUX 69 #define MODULE_CLK_SCB2 96 #define MODULE_CLK_AES 97 #define MODULE_CLK_SM4 98 #define MODULE_CLK_SSF33 99 #define MODULE_CLK_RF 100 #define MODULE_CLK_CRYPTO 101 #define MODULE_CLK_SHA 102 #define MODULE_CLK_EDMAC0 103 #define MODULE_CLK_DES 104 #define MODULE_CLK_ZUC 105 #define MODULE_CLK_IO_CTRL 128 #define MODULE_CLK_WDT 129 #define MODULE_CLK_RTC 130 #define MODULE_CLK_PIT1 131 #define MODULE_CLK_PIT2 132 #define MODULE_CLK_USI1 133 #define MODULE_CLK_EDMAC1 134 #define MODULE_CLK_SPI1 135 #define MODULE_CLK_SPI2 136 #define MODULE_CLK_SPI3 137 #define MODULE_CLK_SCI1 138 #define MODULE_CLK_SCI2 139 #define MODULE_CLK_USI2 140 //#define MODULE_CLK_USI3 141 #define MODULE_CLK_I2C1 142 #define MODULE_CLK_PWM0 143 #define MODULE_CLK_I2C2 144 #define MODULE_CLK_I2C3 145 #define MODULE_CLK_SCI3 146 //#define MODULE_CLK_SCI4 147 #define MODULE_CLK_QADC 148 #define MODULE_CLK_DAC 149 #define MODULE_CLK_MCC 150 #define MODULE_CLK_TSI 151 #define MODULE_CLK_LD 152 #define MODULE_CLK_TRNG 153 #define MODULE_CLK_PGD 154 #define MODULE_CLK_SEC_DET 155 #define MODULE_CLK_PCI 156 #define MODULE_CLK_PMURTC 157 #define MODULE_CLK_AHB2IPS 158 typedef enum _DIVIDER_TYPE_ { SYS_DIVIDER = 0, TRACE_DIVIDER, CLKOUT_DIVIDER, IPS_DIVIDER, AHB3_DIVIDER, ARITH_DIVIDER, SDRAM_DIVIDER, SDRAM_SM_DIVIER, SDRAM2LCD_DIVIDER, MCC_DIVIDER, MCCADR_DIVIDER, ADC_DIVIDER, CLCD_DIVIDER, MESH_DIVIDER, TC_DIVIDER, DMA2D_SRAM_DIVIDER, MIPI_SAMPLE_DIVIDER, DCMI_PIX_DIVIDER, DCMI_SENSOR_DIVIDER }CLK_DIVIDER; typedef enum _CLK_DIVIDER_OPERATION_ { DIVIDER_DISABLE = 0, UPDATA_DIVIDER, GET_NOW_DIVIDER, GET_NOW_CLKGATE, CLKGATE_RESTORE }CLK_DIV_OP; /******************************************************************************* * Function Name : CPM_Write_CoreTestKey * Description : 顺序写入core test key * Input : None * * Output : None * Return : None ******************************************************************************/ void CPM_Write_CoreTestKey(void); /******************************************************************************* * Function Name : CPM_VCC5V_Bypass * Description : 关闭VCC5V LDO * Input : None * * Output : None * Return : None ******************************************************************************/ extern void CPM_VCC5V_Bypass(void); /******************************************************************************* * Function Name : CPM_Vref_Trim * Description : trim参考电压 * Input : trim_value:0x10 is 0.90V; b'00 is 1.05V; b'01 is 1.1V; b'10 is 1.15V; b'11 is 1.21V。 * * Output : None * Return : None ******************************************************************************/ extern void CPM_Vref_Trim(unsigned int trim_value); /******************************************************************************* * Function Name : CPM_Sleep * Description : CPU进入Sleep模式 * Input : None * * Output : None * Return : None ******************************************************************************/ extern void CPM_Sleep(void); /******************************************************************************* * Function Name : CPM_PowerOff_1 * Description : CPU进入PowerOff_1模式 * Input : None * * Output : None * Return : None ******************************************************************************/ extern void CPM_PowerOff_1(void); /******************************************************************************* * Function Name : CPM_PowerOff_1p5 * Description : CPU进入PowerOff_1p5模式 * Input : None * * Output : None * Return : None ******************************************************************************/ extern void CPM_PowerOff_1p5(void); /******************************************************************************* * Function Name : CPM_PowerOff_2 * Description : CPU进入power off 2模式 * Input : None * * Output : None * Return : None ******************************************************************************/ extern void CPM_PowerOff_2(void); /******************************************************************************* * Function Name : CPM_Card_Sleep * Description : 卡模式下CPU进入Sleep模式 * Input : None * * Output : None * Return : None ******************************************************************************/ extern void CPM_Card_Sleep(void); /******************************************************************************* * Function Name : CPM_Card_PowerOff1 * Description : 卡模式下CPU进入power off 1模式 * Input : None * * Output : None * Return : None ******************************************************************************/ extern void CPM_Card_PowerOff1(void); /******************************************************************************* * Function Name : CPM_Card_PowerOff1p5 * Description : 卡模式下CPU进入power off 1.5模式 * Input : None * * Output : None * Return : None ******************************************************************************/ extern void CPM_Card_PowerOff1p5(void); /******************************************************************************* * Function Name : CPM_SysClkSelect * Description : 设置sys_sel分频作为系统时钟 * Input : - sys_sel: 系统主时钟源SYSCLK_SEL_OSC1M, SYSCLK_SEL_OSC160M, SYSCLK_SEL_USBPHY or SYSCLK_SEL_OSCEXT * - div:时钟预分频 * * Output : None * Return : None ******************************************************************************/ extern void CPM_SysClkSelect(UINT32 sys_sel, UINT32 div); /******************************************* * * 打开某个模块时钟 * ********************************************/ extern void ModuleClk_On(UINT32 module); /******************************************* * * 关闭某个模块时钟 * *******************************************/ extern void ModuleClk_Off(UINT32 module); /******************************************************************************* * Function Name : get_usb_det_sta * Description : 获取USB_DET脚状态 * Input : None * * Output : None * Return : - TRUE: 检测到有USB插入 * - FALSE: 检测无USB插入 ******************************************************************************/ extern BOOL get_usb_det_sta(void); /******************************************************************************* * Function Name : Clock_Out_Select * Description : clock out管脚输出时钟频率的选择 * * Input : clk - SELECT_SYSTEM_CLK,系统时钟 * SELECT_ARITH_CLK ,算法时钟 * SELECT_EFLASH_CLK,Eflash时钟 * SELECT_RTC32K_CLK,外部RTC32K时钟 * Output : None * Return : None ******************************************************************************/ extern void Clock_Out_Select(unsigned char clk); /******************************************************************************* * Function Name : Get_Sys_Clock * Description : 返回当前系统频率,单位Hz * * Input : 无 * Output : 系统频率 * Return : None ******************************************************************************/ extern UINT32 Get_Sys_Clock(void); /******************************************************************************* * Function Name : ARITH_Clk_Op * Description : ARITH模块时钟操作 * * Input : -div_op: * DIVIDER_DISABLE:禁止分频 * UPDATA_DIVIDER:更新分频系数 * GET_NOW_DIVIDER:获取当前分频系数 * -op_data: * 操作参数 * Output : 当前分频系数 * Return : None ******************************************************************************/ extern UINT32 ARITH_Clk_Op(UINT32 div_op, UINT32 op_data); /******************************************************************************* * Function Name : SDRAM_Clk_Op * Description : SDRAM模块时钟操作 * * Input : -div_op: * DIVIDER_DISABLE:禁止分频 * UPDATA_DIVIDER:更新分频系数 * GET_NOW_DIVIDER:获取当前分频系数 * -op_data: * 操作参数 * Output : 当前分频系数 * Return : None ******************************************************************************/ extern UINT32 SDRAM_Clk_Op(UINT32 div_op, UINT32 op_data); /******************************************************************************* * Function Name : IPS_Clk_Op * Description : IPS模块时钟操作 * * Input : -div_op: * DIVIDER_DISABLE:禁止分频 * UPDATA_DIVIDER:更新分频系数 * GET_NOW_DIVIDER:获取当前分频系数 * -op_data: * 操作参数 * Output : 当前分频系数 * Return : None ******************************************************************************/ extern UINT32 IPS_Clk_Op(UINT32 div_op, UINT32 op_data); /******************************************************************************* * Function Name : USBC_PHY_Init * Description : 初始化USBC PHY时钟 * * Input : None * Output : None * Return : None ******************************************************************************/ extern void USBC_PHY_Init(UINT8 osc_type); /******************************************************************************* * Function Name : Sys_Clk_Init * Description : 初始化系统时钟 * * Input : -sys_clk_trim: * 0:OSC_108M_HZ, * 1:OSC_120M_HZ , * 2:OSC_150M_HZ, * 3:OSC_160M_HZ * : -sys_clk_div * 0:SYS_CLK_DIV_1, * 1:SYS_CLK_DIV_2, * ... ... * : -ips_clk_div * 1:IPS_CLK_DIV_2, * 2:SYS_CLK_DIV_3, * ... ... * Output : None * Return : None ******************************************************************************/ extern void Sys_Clk_Init(int sys_clk_trim, SYS_CLK_DIV sys_clk_div, IPS_CLK_DIV ips_clk_div); #endif /* __CPM_DRV_H__ */