PeripheralDriver_Flagchip_F.../Inc/module_driver_csc.h

172 lines
5.0 KiB
C

/**
* @file module_driver_csc.h
* @author flagchip
* @brief csc driver type definition and API
* @version 2.0.0
* @date 2024-08-20
*
* SDK Version: 2.6.0
*
* @copyright Copyright (c) 2020-2024 Flagchip Semiconductors Co., Ltd.
*
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.1.0 2023-12-15 Flagchip055 N/A First version for FC7300
* 2.0.0 2024-10-12 Flagchip055 N/A Change version and release
******************************************************************************** */
#ifndef _DRIVER_MODULE_DRIVER_CSC_H_
#define _DRIVER_MODULE_DRIVER_CSC_H_
#include "HwA_csc.h"
#if CSC0_INSTANCE_COUNT > 0U
/**
* @addtogroup module_driver_csc
* @{
*/
/********* Dev Error Report ************/
#ifndef CSC0_DEV_ERROR_REPORT
#define CSC0_DEV_ERROR_REPORT STD_OFF
#endif
#if CSC0_DEV_ERROR_REPORT == STD_ON
#define CSC0_ReportDevError(func, error) ReportDevError(CSC0_MODULE_ID, func, error)
#endif
/**
* @name CSC0 API Service IDs
* @{
*/
#define CSC0_SET_CLOCK_OUT_ID 0x00U
#define CSC0_SET_AONCLKSRC_ID 0x01U
#define CSC0_GET_CLOCK_FREQ_ID 0x02U
/** @}*/
/**
* @name CSC0 Dev Error Code
* @brief Error Code of calling CSC0 apis
* @{
*/
#define CSC0_E_PARAM_POINTER 0x01U
#define CSC0_E_PARAM_OUT_RANGE 0x02U
/** @}*/
/********* Local defines ************/
#define CSC0_AONCLK_128K 128000U
#define CSC0_AONCLK_32K 32000U
#define CSC0_AONCLK_SOSC_32K 32768U
#define CSC0_AONCLK_1K 1000U
/********* Local typedef ************/
/**
* @brief Indicate the clock status for each clock source in clock tree list
*
*/
typedef enum
{
CSC0_CLOCK_UNDEFINE = 0U, /*!< Clock status undefined from power on */
CSC0_CLOCK_DISABLE = 1U, /*!< clock source set as disabled */
CSC0_CLOCK_VALID = 2U, /*!< clock set succeed */
CSC0_CLOCK_ERROR = 3U, /*!< clock set failed */
CSC0_CLOCK_UNKNOWN = 4U
} CSC0_ClockStatusDef;
/**
* @brief CSC0 clock source type for clock infomation querry
*
*/
typedef enum
{
CSC0_AON32K_CLK = 0U, /*!< AON32K_CLK */
CSC0_RTC_CLK = 1U, /*!< RTC_CLK */
CSC0_AON_CLK = 2U, /*!< AON_CLK */
CSC0_CLKOUT_CLK = 3U, /*!< CLKOUT_CLK */
CSC0_END_OF_CLOCKS = 4U /*!< End of CSC0 clocks */
} CSC0_ClkSrcType;
/**
* @brief CSC return status
*
*/
typedef enum
{
CSC_E_OK = 0U, /*!< Return ok */
CSC_E_NOT_OK /*!< Return not ok */
} CSC_RetStatusType;
/**
* @brief Data type for register CSC0_CLKOUT_CTRL,mainly focus on CLKOUT setting
*
*/
typedef struct
{
bool bEnable; /*!< CSC0 ClockOut enable */
CSC0_ClockOutSrcType eClkOutSrc; /*!< CSC0 ClockOut source select */
CSC0_ClockOutDivType eDivider; /*!< CSC0 ClockOut divide ratio */
} CSC0_ClkoutType;
/**
* @brief CSC0_AONCLKSR clock source info
*
*/
typedef struct
{
CSC0_AON32KClkSrcType eAon32KSel; /*!< CSC0 32 KHz Always-on Clock Source Select */
CSC0_RTCClkSrcType eRtcSel; /*!< CSC0 RTC Clock Source Select */
CSC0_AONClkSrcType eAonSel; /*!< CSC0 AON Clock Source Select */
} CSC0_AONCLKSRType;
/********* Local function ************/
#if CSC0_CLOCKCONFIG_SUPPORT
/**
* @brief set clock out. with clock out pin configure, the clock would be monitored.
* This Function may combined with SCG_ClkOut setting
* need to call SCG_SetClkOut,if clock out source set to SCG_CLKOUT. *
* @param pCsc0ClkOut to Csc0ClkOut instance for clock out configuration
* @param bLockStatus to lock current register
*
* @return Set clock out operation success/failed
* @note configuration sequence:
* 1. Disable CLKOUTEN
* 2. Set CLKOUTSEL
* 3. Enable CLKOUTEN
*/
CSC_RetStatusType CSC0_SetClockOut(const CSC0_ClkoutType *const pCsc0ClkOut, bool bLockStatus);
/**
* @brief set always on clock source configuration include AON32K, RTC, AONCLK clock.
*
* @param pAonclkSrcType pointer to AONCLKSR instance for AON clock source configuration
* @param bLockStatus to lock current register
*
* @return Set clock out operation success/failed
*/
CSC_RetStatusType CSC0_SetAonClkSrc(const CSC0_AONCLKSRType *const pAonclkSrcType, bool bLockStatus);
/**
* @brief Report the clock source status and frequency configured in MCU run time.
* The clock frequency and status would change by clock set function.
*
* @param eClkkName: the CSC0 clock source to query
* @param pFreq: frequency variable point to get the frequency value
* @return true or false. This indicate the clock source status invalid or request clock source out of
* range.
*/
CSC_RetStatusType CSC0_GetCSC0ClockFreq(const CSC0_ClkSrcType eClkkName, uint32_t *const pFreq);
#endif /* CSC0_CLOCKCONFIG_SUPPORT */
/** @}*/
#endif /* #if CSC0_INSTANCE_COUNT > 0U */
#endif /* End of _DRIVER_MODULE_DRIVER_CSC_H_ */