/**
******************************************************************************
* @file xl_ics.h
* @author software group
* @brief This file contains all the functions prototypes for the ICS
* firmware library.
******************************************************************************
* @attention
*
* 2019 by Chipways Communications,Inc. All Rights Reserved.
* This software is supplied under the terms of a license
* agreement or non-disclosure agreement with Chipways.
* Passing on and copying of this document,and communication
* of its contents is not permitted without prior written
* authorization.
*
*
© COPYRIGHT 2019 Chipways
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef XL_ICS_H_
#define XL_ICS_H_
#ifdef __cplusplus
extern "C"{
#endif
/* Includes ---------------------------------------------------------------*/
#include "XL6600.h"
/* Register define ------------------------------------------------------------*/
/* C1 Bit Fields */
#define ICS_C1_IREFSTEN_MASK 0x1u
#define ICS_C1_IREFSTEN_SHIFT 0u
#define ICS_C1_IRCLKEN_MASK 0x2u
#define ICS_C1_IRCLKEN_SHIFT 1u
#define ICS_C1_IREFS_MASK 0x4u
#define ICS_C1_IREFS_SHIFT 2u
#define ICS_C1_RDIV_MASK 0x38u
#define ICS_C1_RDIV_SHIFT 3u
#define ICS_C1_CLKS_MASK 0xC0u
#define ICS_C1_CLKS_SHIFT 6u
/* C2 Bit Fields */
#define ICS_C2_LP_MASK 0x01u
#define ICS_C2_LP_SHIFT 0u
#define ICS_C2_BDIV_MASK 0xFEu
#define ICS_C2_BDIV_SHIFT 1u
/* C3 Bit Fields */
#define ICS_C3_SCTRIM_MASK 0xFFu
#define ICS_C3_SCTRIM_SHIFT 0u
/* C4 Bit Fields */
#define ICS_C4_RDIV2_MASK 0x1Cu
#define ICS_C4_RDIV2_SHIFT 2u
#define ICS_C4_CME_MASK 0x20u
#define ICS_C4_CME_SHIFT 5u
#define ICS_C4_FLLSTEN_MASK 0x40u
#define ICS_C4_FLLSTEN_SHIFT 6u
#define ICS_C4_LOLIE_MASK 0x80u
#define ICS_C4_LOLIE_SHIFT 7u
/* S Bit Fields */
#define ICS_S_CLKST_MASK 0xCu
#define ICS_S_CLKST_SHIFT 2u
#define ICS_S_IREFST_MASK 0x10u
#define ICS_S_IREFST_SHIFT 4u
#define ICS_S_LOCK_MASK 0x40u
#define ICS_S_LOCK_SHIFT 6u
#define ICS_S_LOLS_MASK 0x80u
#define ICS_S_LOLS_SHIFT 7u
/* CFG Bit Fields */
#define ICS_CFG_FLLFSEL_MASK 0x1u
#define ICS_CFG_FLLFSEL_SHIFT 0u
#define ICS_CFG_IRCSEL_MASK 0x2u
#define ICS_CFG_IRCSEL_SHIFT 1u
#define ICS_CFG_WPROT_MASK 0xFFFF0000u
#define ICS_CFG_WPROT_SHIFT 16
/** ICS - Register Layout Typedef */
typedef struct {
__IO uint8_t C1; /*!< ICS¿ØÖƼĴæÆ÷1, offset: 0x0 */
__IO uint8_t C2; /*!< ICS¿ØÖƼĴæÆ÷2, offset: 0x1 */
__IO uint8_t C3; /*!< ICS¿ØÖƼĴæÆ÷3, offset: 0x2 */
__IO uint8_t C4; /*!< ICS¿ØÖƼĴæÆ÷4, offset: 0x3 */
__IO uint8_t S; /*!< ICS״̬¼Ä´æÆ÷, offset: 0x4 */
uint8_t RESERVED_0[3];
__IO uint32_t CFG; /*!< ICSʱÖÓÅäÖüĴæÆ÷, offset: 0x8 */
__IO uint32_t TRIM_EN; /*!< ICSʱÖÓÐÞµ÷ʹÄܼĴæÆ÷, offset: 0xC */
} ICS_Type;
extern ICS_Type* ICS;
/** @addtogroup XL6600_StdPeriph_Driver
* @{
*/
/** @addtogroup ICS
* @{
*/
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/** @defgroup ICS_Exported_Constants ACMPÄ£¿éʹÓòÎÊý¶¨Òå
* @{
*/
/** @defgroup Clocks_SourceSelect ClocksʱÖÓÔ´Ñ¡Ôñ
* @{
*/
#define ICS_CLOCKS_FLL ((uint8_t)0x00) /*!< Ñ¡ÔñFLLΪʱÖÓÔ´Êä³ö */
#define ICS_CLOCKS_IRC ((uint8_t)0x01) /*!< Ñ¡ÔñIRCΪʱÖÓÔ´Êä³ö */
#define ICS_CLOCKS_OSC ((uint8_t)0x02) /*!< Ñ¡ÔñOSCΪʱÖÓÔ´Êä³ö */
#define ICS_CLOCKS_RESERVED ((uint8_t)0x03) /*!< ʱÖÓÔ´±£Áô*/
/**
* @}
*/
/** @defgroup Clocks_BaseDivider ClocksʱÖÓÔ´»ù×¼·ÖƵ
* @{
*/
#define ICS_RDIV_1or32 ((uint8_t)0x00) /*!< ƵÂÊ·¶Î§Îª32kHzµÍƵ·¶Î§£º·ÖƵϵÊýΪ1 £»ÆµÂÊ·¶Î§Îª4-24MHz¸ßƵ·¶Î§£º·ÖƵϵÊýΪ32 */
#define ICS_RDIV_2or64 ((uint8_t)0x01) /*!< ƵÂÊ·¶Î§Îª32kHzµÍƵ·¶Î§£º·ÖƵϵÊýΪ2 £»ÆµÂÊ·¶Î§Îª4-24MHz¸ßƵ·¶Î§£º·ÖƵϵÊýΪ64 */
#define ICS_RDIV_4or128 ((uint8_t)0x02) /*!< ƵÂÊ·¶Î§Îª32kHzµÍƵ·¶Î§£º·ÖƵϵÊýΪ4 £»ÆµÂÊ·¶Î§Îª4-24MHz¸ßƵ·¶Î§£º·ÖƵϵÊýΪ128 */
#define ICS_RDIV_8or256 ((uint8_t)0x03) /*!< ƵÂÊ·¶Î§Îª32kHzµÍƵ·¶Î§£º·ÖƵϵÊýΪ8 £»ÆµÂÊ·¶Î§Îª4-24MHz¸ßƵ·¶Î§£º·ÖƵϵÊýΪ256 */
#define ICS_RDIV_16or512 ((uint8_t)0x04) /*!< ƵÂÊ·¶Î§Îª32kHzµÍƵ·¶Î§£º·ÖƵϵÊýΪ16 £»ÆµÂÊ·¶Î§Îª4-24MHz¸ßƵ·¶Î§£º·ÖƵϵÊýΪ512 */
#define ICS_RDIV_32or1024 ((uint8_t)0x05) /*!< ƵÂÊ·¶Î§Îª32kHzµÍƵ·¶Î§£º·ÖƵϵÊýΪ32 £»ÆµÂÊ·¶Î§Îª4-24MHz¸ßƵ·¶Î§£º·ÖƵϵÊýΪ1024 */
#define ICS_RDIV_64 ((uint8_t)0x06) /*!< ƵÂÊ·¶Î§Îª32kHzµÍƵ·¶Î§£º·ÖƵϵÊýΪ64 £»ÆµÂÊ·¶Î§Îª4-24MHz¸ßƵ·¶Î§£º·ÖƵϵÊýΪ±£Áô */
#define ICS_RDIV_128 ((uint8_t)0x07) /*!< ƵÂÊ·¶Î§Îª32kHzµÍƵ·¶Î§£º·ÖƵϵÊýΪ128 £»ÆµÂÊ·¶Î§Îª4-24MHz¸ßƵ·¶Î§£º·ÖƵϵÊýΪ±£Áô */ */
/**
* @}
*/
/** @defgroup Clocks_BaseDivider2 ClocksʱÖÓÔ´»ù×¼·ÖƵ
* @{
*/
#define ICS_RDIV2_1 ((uint8_t)0x00) /*!< 1·ÖƵ */
#define ICS_RDIV2_2 ((uint8_t)0x01) /*!< 2·ÖƵ */
#define ICS_RDIV2_3 ((uint8_t)0x02) /*!< 3·ÖƵ */
#define ICS_RDIV2_4 ((uint8_t)0x03) /*!< 4·ÖƵ */
#define ICS_RDIV2_5 ((uint8_t)0x04) /*!< 5·ÖƵ */
#define ICS_RDIV2_6 ((uint8_t)0x05) /*!< 6·ÖƵ */
#define ICS_RDIV2_7 ((uint8_t)0x06) /*!< 7·ÖƵ */
#define ICS_RDIV2_8 ((uint8_t)0x07) /*!< 8·ÖƵ */
/**
* @}
*/
/** @defgroup FLL_ClocksSourceSelect FLLʱÖÓÔ´Ñ¡Ôñ
* @{
*/
#define ICS_IREFS_OSC ((uint8_t)0x00) /*!< Ñ¡ÔñOSCΪFLLʱÖÓÔ´ */
#define ICS_IREFS_IRC ((uint8_t)0x01) /*!< Ñ¡ÔñIRCΪFLLʱÖÓÔ´ */
/**
* @}
*/
/** @defgroup ICS_ClockConfig ÄÚ²¿Ê±ÖÓÔ´Ñ¡Ôñ
* @{
*/
#define ICS_IRC_50K ((uint8_t)0x00u) /*!< Ñ¡ÔñÄÚ²¿Ê±ÖÓÔ´IRCƵÂÊΪ50k */
#define ICS_IRC_37o5K ((uint8_t)0x01u) /*!< Ñ¡ÔñÄÚ²¿Ê±ÖÓÔ´IRCƵÂÊΪ37.5k */
/**
* @}
*/
/** @defgroup FLL_MultiplierFactor FLL±¶ÆµÏµÊýÑ¡Ôñ
* @{
*/
#define ICS_FLLFACTOR_1280 ((uint8_t)0x00) /*!< Ñ¡Ôñ±¶ÆµÆ÷FLLΪ1280 */
#define ICS_FLLFACTOR_1920 ((uint8_t)0x01) /*!< Ñ¡Ôñ±¶ÆµÆ÷FLLΪ1920 */
/**
* @}
*/
/** @defgroup ICS_Status ICS״̬
* @{
*/
#define ICS_STATUS_LOSINGLOCK ((uint8_t)0x80) /*!< FLLµÄÊ§Ëø×´Ì¬ */
#define ICS_STATUS_LOCK ((uint8_t)0x40) /*!< FLLµÄËø¶¨×´Ì¬ */
#define ICS_STATUS_IREF ((uint8_t)0x10) /*!< ÄÚ²¿»ù׼ʱÖÓÀ´Ô´×´Ì¬ */
/**
* @}
*/
/** @defgroup ICS_ClocksModeStatus ʱÖÓģʽ״̬
* @{
*/
#define ICS_MODE_FLL ((uint8_t)0x00) /*!< ICSʱÖÓģʽΪFLLÊä³ö */
#define ICS_MODE_IRC ((uint8_t)0x01) /*!< ICSʱÖÓģʽΪIRCÊä³ö */
#define ICS_MODE_OSC ((uint8_t)0x02) /*!< ICSʱÖÓģʽΪOSCÊä³ö */
#define ICS_MODE_RESERVED ((uint8_t)0x03) /*!< ICSʱÖÓģʽ±£Áô */
/**
* @}
*/
/**
* @}
*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
void ICS_DeInit(void);
void ICS_ClocksSelect(uint8_t Clksel);
void ICS_BaseDivider(uint8_t RDiv);
void ICS_BaseDivider2(uint8_t RDiv2);
void ICS_IREFSSelect(uint8_t FllSel);
void ICS_IRCEnableCmd(FunctionalState State);
void ICS_IREFStopEnableCmd(FunctionalState State);
void ICS_BusDivder(uint8_t BDiv);
uint8_t ICS_GetBusDivder(void);
void ICS_FllLPModeStopEnableCmd(FunctionalState State);
void ICS_LosingLockIntEnableCmd(FunctionalState State);
void ICS_FllStopModeCloseEnableCmd(FunctionalState State);
void ICS_ClockMonitorEnableCmd(FunctionalState State);
void ICS_IRCSelect(uint8_t IRCValue);
void ICS_FllFactorSelect(uint8_t FactorValue);
uint8_t ICS_GetStatus(uint8_t ICSStatus);
uint8_t ICS_GetClockMode(void);
uint8_t ICS_GetIRCFre(void);
uint8_t ICS_GetIREFSSelect(void);
uint8_t ICS_GetFLLMultiple(void);
uint8_t ICS_GetBaseDivider(void);
uint8_t ICS_GetBaseDivider2(void);
#ifdef __cplusplus
}
#endif
#endif
/**
* @}
*/
/**
* @}
*/