BLE_TYQ_BJQ_CH584M/StdPeriphDriver/inc/CH58x_clk.h

338 lines
7.4 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************** (C) COPYRIGHT *******************************
* File Name : CH58x_clk.h
* Author : WCH
* Version : V1.2
* Date : 2021/11/17
* Description : head file(ch585/ch584)
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/
#ifndef __CH58x_CLK_H__
#define __CH58x_CLK_H__
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief ϵͳÖ÷Ƶ¶¨Òå
*/
typedef enum
{
CLK_SOURCE_32KHz = 0xC0,
CLK_SOURCE_HSI_16MHz = (0x100 | 0x80),
CLK_SOURCE_HSI_8MHz = 0x02,
CLK_SOURCE_HSI_5_3MHz = 0x03,
CLK_SOURCE_HSI_4MHz = 0x04,
CLK_SOURCE_HSI_2MHz = 0x08,
CLK_SOURCE_HSI_1MHz = 0x10,
CLK_SOURCE_HSE_32MHz = (0x100 | 0x200 | 0x80),
CLK_SOURCE_HSE_16MHz = (0x200 | 0x02),
CLK_SOURCE_HSE_8MHz = (0x200 | 0x04),
CLK_SOURCE_HSE_6_4MHz = (0x200 | 0x05),
CLK_SOURCE_HSE_4MHz = (0x200 | 0x08),
CLK_SOURCE_HSE_2MHz = (0x200 | 0x10),
CLK_SOURCE_HSI_PLL_78MHz = (0x100 | 0x40 | 4),
CLK_SOURCE_HSI_PLL_62_4MHz = (0x100 | 0x40 | 5),
CLK_SOURCE_HSI_PLL_52MHz = (0x100 | 0x40 | 6),
CLK_SOURCE_HSI_PLL_39MHz = (0x100 | 0x40 | 8),
CLK_SOURCE_HSI_PLL_26MHz = (0x100 | 0x40 | 12),
CLK_SOURCE_HSI_PLL_24MHz = (0x100 | 0x40 | 13),
CLK_SOURCE_HSI_PLL_19_5MHz = (0x100 | 0x40 | 16),
CLK_SOURCE_HSI_PLL_13MHz = (0x100 | 0x40 | 24),
CLK_SOURCE_HSE_PLL_78MHz = (0x300 | 0x40 | 4),
CLK_SOURCE_HSE_PLL_62_4MHz = (0x300 | 0x40 | 5),
CLK_SOURCE_HSE_PLL_52MHz = (0x300 | 0x40 | 6),
CLK_SOURCE_HSE_PLL_39MHz = (0x300 | 0x40 | 8),
CLK_SOURCE_HSE_PLL_26MHz = (0x300 | 0x40 | 12),
CLK_SOURCE_HSE_PLL_24MHz = (0x300 | 0x40 | 13),
CLK_SOURCE_HSE_PLL_19_5MHz = (0x300 | 0x40 | 16),
CLK_SOURCE_HSE_PLL_13MHz = (0x300 | 0x40 | 24),
} SYS_CLKTypeDef;
/**
* @brief 32KʱÖÓÑ¡Ôñ
*/
typedef enum
{
Clk32K_LSI = 0,
Clk32K_LSE,
} LClk32KTypeDef;
/**
* @brief 32M¾§ÕñµçÁ÷µ²Î»
*/
typedef enum
{
HSE_RCur_75 = 0,
HSE_RCur_100,
HSE_RCur_125,
HSE_RCur_150
} HSECurrentTypeDef;
/**
* @brief 32M¾§ÕñÄÚ²¿µçÈݵ²Î»
*/
typedef enum
{
HSECap_10p = 0,
HSECap_12p,
HSECap_14p,
HSECap_16p,
HSECap_18p,
HSECap_20p,
HSECap_22p,
HSECap_24p,
HSECap_2p,
HSECap_4p,
HSECap_6p,
HSECap_8p
} HSECapTypeDef;
/**
* @brief LSE32K¾§ÕñµçÁ÷µ²Î»
*/
typedef enum
{
LSE_RCur_70 = 0,
LSE_RCur_100,
LSE_RCur_140,
LSE_RCur_200
} LSECurrentTypeDef;
/**
* @brief LSI32K¾§ÕñµçÁ÷µ²Î»
*/
typedef enum
{
LSI_RCur_70 = 0,
LSI_RCur_100,
LSI_RCur_140,
LSI_RCur_200
} LSICurrentTypeDef;
/**
* @brief 32K¾§ÕñÄÚ²¿µçÈݵ²Î»
*/
typedef enum
{
LSECap_2p = 0, // ¶¨Òå±£Áô£¬Êµ¼ÊÉÏΪ12p
LSECap_12p = 0,
LSECap_13p,
LSECap_14p,
LSECap_15p,
LSECap_16p,
LSECap_17p,
LSECap_18p,
LSECap_19p,
LSECap_20p,
LSECap_21p,
LSECap_22p,
LSECap_23p,
LSECap_24p,
LSECap_25p,
LSECap_26p,
LSECap_27p
} LSECapTypeDef;
#define RTC_MAX_COUNT 0xA8C00000
#define MAX_DAY 0x00004000
#define MAX_2_SEC 0x0000A8C0
//#define MAX_SEC 0x545FFFFF
#define BEGYEAR 2020
#define IsLeapYear(yr) (!((yr) % 400) || (((yr) % 100) && !((yr) % 4)))
#define YearLength(yr) (IsLeapYear(yr) ? 366 : 365)
#define monthLength(lpyr, mon) (((mon) == 1) ? (28 + (lpyr)) : (((mon) > 6) ? (((mon) & 1) ? 31 : 30) : (((mon) & 1) ? 30 : 31)))
/**
* @brief rtc timer mode period define
*/
typedef enum
{
Period_0_125_S = 0, // 0.125s ÖÜÆÚ
Period_0_25_S, // 0.25s ÖÜÆÚ
Period_0_5_S, // 0.5s ÖÜÆÚ
Period_1_S, // 1s ÖÜÆÚ
Period_2_S, // 2s ÖÜÆÚ
Period_4_S, // 4s ÖÜÆÚ
Period_8_S, // 8s ÖÜÆÚ
Period_16_S, // 16s ÖÜÆÚ
} RTC_TMRCycTypeDef;
/**
* @brief rtc interrupt event define
*/
typedef enum
{
RTC_TRIG_EVENT = 0, // RTC ´¥·¢Ê¼þ
RTC_TMR_EVENT, // RTC ÖÜÆÚ¶¨Ê±Ê¼þ
} RTC_EVENTTypeDef;
/**
* @brief rtc interrupt event define
*/
typedef enum
{
RTC_TRIG_MODE = 0, // RTC ´¥·¢Ä£Ê½
RTC_TMR_MODE, // RTC ÖÜÆÚ¶¨Ê±Ä£Ê½
} RTC_MODETypeDef;
typedef enum
{
/* У׼¾«¶ÈÔ½¸ß£¬ºÄʱԽ³¤ */
Level_32 = 3, // ÓÃʱ 1.2ms
Level_64, // ÓÃʱ 2.2ms
Level_128, // ÓÃʱ 4.2ms
Level_1024, // ÓÃʱ 32.2ms
} Cali_LevelTypeDef;
/**
* @brief 32K µÍƵʱÖÓÀ´Ô´
*
* @param hc - Ñ¡Ôñ32KʹÓÃÄÚ²¿»¹ÊÇÍⲿ
*/
void LClk32K_Select(LClk32KTypeDef hc);
/**
* @brief HSE¾§Ìå Æ«ÖõçÁ÷ÅäÖÃ
*
* @param c - 75%,100%,125%,150%
*/
void HSECFG_Current(HSECurrentTypeDef c);
/**
* @brief HSE¾§Ìå ¸ºÔصçÈÝÅäÖÃ
*
* @param c - refer to HSECapTypeDef
*/
void HSECFG_Capacitance(HSECapTypeDef c);
/**
* @brief LSI¾§Ìå Æ«ÖõçÁ÷ÅäÖÃ
*
* @param c - 70%,100%,140%,200%
*/
void LSICFG_Current(LSICurrentTypeDef c);
/**
* @brief LSE¾§Ìå Æ«ÖõçÁ÷ÅäÖÃ
*
* @param c - 70%,100%,140%,200%
*/
void LSECFG_Current(LSECurrentTypeDef c);
/**
* @brief LSE¾§Ìå ¸ºÔصçÈÝÅäÖÃ
*
* @param c - refer to LSECapTypeDef
*/
void LSECFG_Capacitance(LSECapTypeDef c);
void Calibration_LSI(Cali_LevelTypeDef cali_Lv); /* ÓÃÖ÷ƵУ׼ÄÚ²¿32KʱÖÓ */
/**
* @brief RTCʱÖÓ³õʼ»¯µ±Ç°Ê±¼ä
*
* @param y - ÅäÖÃÄ꣬MAX_Y = BEGYEAR + 44
* @param mon - ÅäÖÃÔ£¬MAX_MON = 12
* @param d - ÅäÖÃÈÕ£¬MAX_D = 31
* @param h - ÅäÖÃСʱ£¬MAX_H = 23
* @param m - ÅäÖ÷ÖÖÓ£¬MAX_M = 59
* @param s - ÅäÖÃÃ룬MAX_S = 59
*/
void RTC_InitTime(uint16_t y, uint16_t mon, uint16_t d, uint16_t h, uint16_t m, uint16_t s);
/**
* @brief »ñÈ¡µ±Ç°Ê±¼ä
*
* @param py - »ñÈ¡µ½µÄÄ꣬MAX_Y = BEGYEAR + 44
* @param pmon - »ñÈ¡µ½µÄÔ£¬MAX_MON = 12
* @param pd - »ñÈ¡µ½µÄÈÕ£¬MAX_D = 31
* @param ph - »ñÈ¡µ½µÄСʱ£¬MAX_H = 23
* @param pm - »ñÈ¡µ½µÄ·ÖÖÓ£¬MAX_M = 59
* @param ps - »ñÈ¡µ½µÄÃ룬MAX_S = 59
*/
void RTC_GetTime(uint16_t *py, uint16_t *pmon, uint16_t *pd, uint16_t *ph, uint16_t *pm, uint16_t *ps);
/**
* @brief »ùÓÚLSE/LSIʱÖÓ£¬ÅäÖõ±Ç°RTC ÖÜÆÚÊý
*
* @param cyc - ÅäÖÃÖÜÆÚ¼ÆÊý³õÖµ£¬MAX_CYC = 0xA8BFFFFF = 2831155199
*/
void RTC_SetCycle32k(uint32_t cyc);
/**
* @brief »ùÓÚLSE/LSIʱÖÓ£¬»ñÈ¡µ±Ç°RTC ÖÜÆÚÊý
*
* @return µ±Ç°ÖÜÆÚÊý£¬MAX_CYC = 0xA8BFFFFF = 2831155199
*/
uint32_t RTC_GetCycle32k(void);
/**
* @brief RTC¶¨Ê±Ä£Ê½ÅäÖã¨×¢Òⶨʱ»ù×¼¹Ì¶¨Îª32768Hz£©
*
* @param t - refer to RTC_TMRCycTypeDef
*/
void RTC_TRIGFunCfg(uint32_t cyc);
/**
* @brief RTC¶¨Ê±Ä£Ê½ÅäÖã¨×¢Òⶨʱ»ù×¼¹Ì¶¨Îª32768Hz£©
*
* @param t - refer to RTC_TMRCycTypeDef
*/
void RTC_TMRFunCfg(RTC_TMRCycTypeDef t);
/**
* @brief RTC ģʽ¹¦ÄܹرÕ
*
* @param m - ÐèÒª¹Ø±ÕµÄµ±Ç°Ä£Ê½
*/
void RTC_ModeFunDisable(RTC_MODETypeDef m);
/**
* @brief »ñÈ¡RTCÖжϱêÖ¾
*
* @param f - refer to RTC_EVENTTypeDef
*
* @return Öжϱê־״̬
*/
uint8_t RTC_GetITFlag(RTC_EVENTTypeDef f);
/**
* @brief Çå³ýRTCÖжϱêÖ¾
*
* @param f - refer to RTC_EVENTTypeDef
*/
void RTC_ClearITFlag(RTC_EVENTTypeDef f);
/**
* @brief 32K µÍƵʱÖÓµçÔ´ÅäÖÃ
*/
void LClk32K_Cfg(LClk32KTypeDef hc, FunctionalState s);
#ifdef __cplusplus
}
#endif
#endif // __CH58x_CLK_H__