93 lines
2.9 KiB
C
93 lines
2.9 KiB
C
/*
|
||
*Copyright (C),2023 , NANOCHAP
|
||
*File name: ENS1_CLOCK.H
|
||
*Author:
|
||
*Version: V1.0
|
||
*Date: 2023-11-
|
||
*Description:
|
||
*Function List:
|
||
1 uint32_t ClockInitSet(Clock_ConfigStructure* CLOCKCONFIG);
|
||
2 void ClockInit(void);
|
||
3 uint8_t PCLK_Enable(uint8_t APB_CLKEN_POS);
|
||
4 uint8_t PCLK_Disable(uint8_t APB_CLKEN_POS);
|
||
History:
|
||
1.V1.0
|
||
Date:
|
||
Author:
|
||
Modification: 初版
|
||
*/
|
||
|
||
|
||
#ifndef ENS1_CLOCK_H
|
||
#define ENS1_CLOCK_H
|
||
#include "my_header.h"
|
||
#include "CMSDK_CM0.h"
|
||
|
||
/*
|
||
时钟树结构
|
||
低速(LSI RC / LSE OSC) --> LFCLK --> RTC / LCD
|
||
高速 (HSI RC / HSE ) --> SYSCLK --> 分频(AHB Prescaler)-----> SYSC / PMU / HCLK /SCLK /DCLK
|
||
|
|
||
|
|
||
|
|
||
---->分频(APB Prescaler) --> PCLK
|
||
*/
|
||
extern uint32_t APB_Clock_Freq;
|
||
//分频选择
|
||
//APB
|
||
#define ENS1_APB_PCLK_DIV_1 0x0
|
||
#define ENS1_APB_PCLK_DIV_2 0x4
|
||
#define ENS1_APB_PCLK_DIV_4 0x5
|
||
#define ENS1_APB_PCLK_DIV_8 0x6
|
||
#define ENS1_APB_PCLK_DIV_16 0x7
|
||
//AHB
|
||
#define ENS1_AHB_HCLK_DIV_1 0X0
|
||
#define ENS1_AHB_HCLK_DIV_2 0X4
|
||
#define ENS1_AHB_HCLK_DIV_4 0X5
|
||
#define ENS1_AHB_HCLK_DIV_8 0X6
|
||
#define ENS1_AHB_HCLK_DIV_16 0X7
|
||
|
||
typedef enum{HSI_4MHZ =0 , HSI_8MHZ=1 , HS_16MHZ=2 , HSI_32MHZ=3}HSI_FREQ_SEL;
|
||
typedef enum{MCO_HSI=0, MCO_HSE ,MCO_LSI,MCO_LSE}MCU_CLOCK_OUTPUT_SEL; //mcu时钟输出选择
|
||
typedef enum{LSI_AS_LFCLK =0, LSE_AS_LFCLK }LFCLK_SWITCH_SEL; //LFCLK输入源选择
|
||
typedef enum{HSI_SYSCLK = 0 ,HSE_SYSCLK , LFCLK_SYSCLK}SYSTEM_CLOCK_SEL; //选择系统时钟源,在离开stop模式时,系统会强制设置为00
|
||
|
||
/*--------时钟初始化配置结构体----------*/
|
||
typedef struct ClockConfig
|
||
{
|
||
MCU_CLOCK_OUTPUT_SEL MCO_SEL; //输入
|
||
HSI_FREQ_SEL HSI_FREQ; //内部高速RC频率选择
|
||
uint8_t HSE_OSC_FREQ; //外部高速晶振实际频率(单位MHZ)
|
||
uint16_t LSE_OSC_FREQ; //外部低速晶振实际频率(单位1)
|
||
SYSTEM_CLOCK_SEL SYSCLK_SEL; //系统时钟源的选择
|
||
uint8_t ENS1_APB_PCLK_DIV_x; //PCLK分频选择
|
||
uint8_t ENS1_AHB_PCLK_DIV_x; //HCLK分频选择
|
||
LFCLK_SWITCH_SEL LFCLK_SW_SEL; //选择lfclk的输入源,为RTC的时钟输入
|
||
|
||
}Clock_ConfigStructure;
|
||
|
||
extern uint32_t ClockInitSet(Clock_ConfigStructure* CLOCKCONFIG);
|
||
extern void ClockInit(void);
|
||
//PCLK 的时钟位
|
||
#define UART0_PCLK_EN 0
|
||
#define UART1_PCLK_EN 1
|
||
#define SPI0_PCLK_EN 2
|
||
#define SPI1_PCLK_EN 3
|
||
#define I2C0_PCLK_EN 4
|
||
#define I2C1_PCLK_EN 5
|
||
#define WDT_PCLK_EN 6
|
||
#define PWM_PCLK_EN 7
|
||
#define TIMER0_PCLK_EN 8
|
||
#define TIMER1_PCLK_EN 9
|
||
#define DUAL_TIMER_PCLK_EN 10
|
||
#define LCD_PCLK_EN 11
|
||
#define WAVE_GEN_PCLK_EN 12
|
||
#define ADC_PCLK_EN 13
|
||
#define ANALOG_PCLK_EN 14
|
||
#define RTC_PCLK_EN 15
|
||
extern uint8_t PCLK_Enable(uint8_t APB_CLKEN_POS);
|
||
extern uint8_t PCLK_Disable(uint8_t APB_CLKEN_POS);
|
||
void HSE_ClockInit(uint32_t Clock_Freq);
|
||
#endif
|
||
|