/** ****************************************************************************** * @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 /** * @} */ /** * @} */