#ifndef _SR_HAL_RCC_H_
#define _SR_HAL_RCC_H_



#include "sr_config.h"

//#include "sr_device.h"

#ifdef SR_USE_RCC


typedef enum SR_CLK_TYPE   SR_CLK_TYPE_E;
typedef enum SR_SYSCLK_SRC SR_SYSCLK_SRC_E;
typedef struct SR_RCC_CFG  SR_RCC_CFG_T;


#include "sr_bsp_rcc.h"


enum SR_CLK_TYPE
{
    SR_SYSCLK = 0,
    SR_HCLK,
    SR_PCLK1,
    SR_PCLK2,
};

enum SR_SYSCLK_SRC
{
    SR_SYSCLK_HSI = 0,
    SR_SYSCLK_HSE,
    SR_SYSCLK_PLL,
};


struct SR_RCC_CFG
{
    SR_SYSCLK_SRC_E sysclkSrc;  /*!< SYSCLK时钟源*/
    uint32_t sysclkFreq;      /*!< SYSCLK时钟频率，单位Hz */
    uint8_t  lsiState;        /*!< LSI时钟状态 0:失能 1：使能*/
    uint8_t  lseState;        /*!< LSE时钟状态 0:失能 1：使能*/

};

/**
 * @brief RCC时钟配置
 * @note  配置系统时钟源和频率、LSI/LSE使能
 *
 * @param[in] cfg  系统时钟源配置结构体,可选值SR_RCC_CFG_T *类型
 *
 * @return 成功返回0，失败返回负值错误码
 */
#define SR_HalRccClkConfig(cfg)  BspRccClkConfig(cfg)



/**
 * @brief 获取时钟频率
 *
 * @param[in]  type    时钟类型，SR_CLK_TYPE_E枚举
 * @param[out] freq    频率值，uint32_t *类型，单位Hz
 *
 * @return 成功返回0，失败返回负值错误码
 */
#define SR_HalRccGetClkFreq(type,freq)   BspRccGetClkFreq(type,freq)



#endif


#endif /* _SR_HAL_RCC_H_ */
