Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: mbed-os/targets/TARGET_TOSHIBA/TARGET_TMPM066/Periph_Driver/src/tmpm066_cg.c
- Revision:
- 0:9fca2b23d0ba
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os/targets/TARGET_TOSHIBA/TARGET_TMPM066/Periph_Driver/src/tmpm066_cg.c Sat Feb 23 12:13:36 2019 +0000
@@ -0,0 +1,698 @@
+/**
+ *******************************************************************************
+ * @file tmpm066_cg.c
+ * @brief This file provides API functions for CG driver
+ * @version V2.0.2.1
+ * @date 2015/09/22
+ *
+ * (C)Copyright TOSHIBA ELECTRONIC DEVICES & STORAGE CORPORATION 2017 All rights reserved
+ *******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "tmpm066_cg.h"
+
+#if defined(__TMPM066_CG_H)
+/** @addtogroup TX00_Periph_Driver
+ * @{
+ */
+
+/** @defgroup CG
+ * @brief CG driver modules
+ * @{
+ */
+
+/** @defgroup CG_Private_Defines
+ * @{
+ */
+
+#define CG_FC_GEAR_MASK ((uint32_t)0xFFFFFFF8)
+#define CG_PRCK_MASK ((uint32_t)0xFFFFF0FF)
+#define CG_WUP_TIME_MASK ((uint32_t)0x000FFFFF)
+#define CG_WUP_COUNTER_MASK ((uint32_t)0xFFFFFEFF)
+#define CG_WUP_START_SET ((uint32_t)0x00000001)
+#define CG_WUEF_VALUE_MASK ((uint32_t)0x00000002)
+#define CG_OSCCR_IOSCEN_SET ((uint32_t)0x00000001)
+#define CG_OSCCR_IOSCEN_CLEAR ((uint32_t)0xFFFFFFFE)
+#define CG_OSCCR_EOSCEN_EHOSC ((uint32_t)0x00000002)
+#define CG_OSCCR_EOSCEN_NOUSE ((uint32_t)0xFFFFFFF9)
+#define CG_OSCCR_EOSCEN_MASK ((uint32_t)0x00000006)
+#define CG_OSCCR_EOSCEN_CLKIN ((uint32_t)0x00000004)
+#define CG_OSCCR_OSCSEL_SET ((uint32_t)0x00000100)
+#define CG_OSCCR_OSCSEL_CLEAR ((uint32_t)0xFFFFFEFF)
+#define CG_OSCCR_OSCF_SET ((uint32_t)0x00000200)
+#define CG_OSCCR_WUPT_MASK ((uint32_t)0x00FFFFFF)
+
+#define CG_PLL0SEL_PLL0ON_SET ((uint32_t)0x00000001)
+#define CG_PLL0SEL_PLL0ON_CLEAR ((uint32_t)0xFFFFFFFE)
+#define CG_PLL0SEL_PLL0SEL_SET ((uint32_t)0x00000002)
+#define CG_PLL0SEL_PLL0SEL_CLEAR ((uint32_t)0xFFFFFFFD)
+#define CG_PLL0SEL_PLLST_SET ((uint32_t)0x00000004)
+
+#define CG_PLL0SET_VALUE_MASK ((uint32_t)0xFFFFFF00)
+#define CG_PLL0SEL_PLL0SET_MASK ((uint32_t)0xFFFFFF00)
+
+#define CG_STBY_MODE_MASK ((uint32_t)0xFFFFFFFC)
+//#define CG_NMIFLG_MASK ((uint32_t)0xFFF8FFFF)
+
+#define FC_GEAR_1_1 ((uint32_t)0x00000000)
+#define FC_GEAR_1_2 ((uint32_t)0x00000001)
+#define FC_GEAR_1_4 ((uint32_t)0x00000002)
+#define FC_GEAR_1_8 ((uint32_t)0x00000003)
+#define FC_GEAR_1_16 ((uint32_t)0x00000004)
+
+#define WARM_UP_SEL_OSC_INT_HIGH ((uint32_t)0xFFFFFEFF)
+#define WARM_UP_SEL_OSC_EXT_HIGH ((uint32_t)0x00000100)
+
+#define CG_PROTECT_SET ((uint32_t)0x000000C1)
+#define CG_PROTECT_CLEAR ((uint32_t)0x0000003E)
+
+//#define INT_NCLR_PCLR_CLEAR ((uint8_t)0x01)
+#define ADC_MOD0_BUSY_MASK ((uint32_t)0x00000040)
+#define CG_SPCLKEN_ADCKEN_CLEAR ((uint32_t)0xFFFEFFFF)
+#define CG_SPCLKEN_ADCKEN_SET ((uint32_t)0x00010000)
+
+
+static CG_DivideLevel numToDivideLevel_table[CG_DIVIDE_MAX] = {
+ CG_DIVIDE_1,
+ CG_DIVIDE_2,
+ CG_DIVIDE_4,
+ CG_DIVIDE_8,
+ CG_DIVIDE_16,
+ CG_DIVIDE_32,
+ CG_DIVIDE_64,
+ CG_DIVIDE_128,
+ CG_DIVIDE_256,
+ CG_DIVIDE_512,
+ CG_DIVIDE_UNKNOWN,
+};
+
+static CG_STBYMode numToSTBYMode_table[CG_STBY_MODE_MAX] = {
+ CG_STBY_MODE_IDLE,
+ CG_STBY_MODE_STOP1,
+ CG_STBY_MODE_UNKNOWN,
+ CG_STBY_MODE_UNKNOWN,
+};
+
+/** @} */
+/* End of group CG_Private_Defines */
+
+/** @defgroup CG_Private_FunctionPrototypes
+ * @{
+ */
+
+/** @} */
+/* End of group CG_Private_FunctionPrototypes */
+
+/** @defgroup CG_Private_Functions
+ * @{
+ */
+
+/** @} */
+/* End of group CG_Private_Functions */
+
+/** @defgroup CG_Exported_Functions
+ * @{
+ */
+
+/**
+ * @brief Set dividing level between clock fgear and fc.
+ * @param DivideFgearFromFc: Dividing level between fgear and fc.
+ * This parameter can be one of the following values:
+ * CG_DIVIDE_1, CG_DIVIDE_2, CG_DIVIDE_4, CG_DIVIDE_8, CG_DIVIDE_16
+ * @retval None
+ */
+void CG_SetFgearLevel(CG_DivideLevel DivideFgearFromFc)
+{
+ uint32_t gear = FC_GEAR_1_1;
+ uint32_t regval = TSB_CG->SYSCR;
+
+ /* Check the parameters */
+ assert_param(IS_CG_GEAR_DIVIDE_LEVEL(DivideFgearFromFc));
+
+ /* Set the value of fgear */
+ switch (DivideFgearFromFc) {
+ case CG_DIVIDE_1:
+ gear = FC_GEAR_1_1;
+ break;
+ case CG_DIVIDE_2:
+ gear = FC_GEAR_1_2;
+ break;
+ case CG_DIVIDE_4:
+ gear = FC_GEAR_1_4;
+ break;
+ case CG_DIVIDE_8:
+ gear = FC_GEAR_1_8;
+ break;
+ case CG_DIVIDE_16:
+ gear = FC_GEAR_1_16;
+ break;
+ default:
+ /* Do nothing */
+ break;
+ }
+
+ regval &= CG_FC_GEAR_MASK;
+ regval |= gear;
+ TSB_CG->SYSCR = regval;
+}
+
+/**
+ * @brief Get dividing level between clock fgear and fc.
+ * @param None
+ * @retval The dividing level between clock fgear and fc
+ * The value returned can be one of the following values:
+ * CG_DIVIDE_1, CG_DIVIDE_2, CG_DIVIDE_4,
+ * CG_DIVIDE_8, CG_DIVIDE_16 or CG_DIVIDE_UNKNOWN
+ */
+CG_DivideLevel CG_GetFgearLevel(void)
+{
+ CG_DivideLevel DivideFgearFromFc = CG_DIVIDE_UNKNOWN;
+ uint32_t syscr = TSB_CG->SYSCR;
+ syscr &= (~CG_FC_GEAR_MASK);
+
+ switch (syscr) {
+ case FC_GEAR_1_1:
+ DivideFgearFromFc = CG_DIVIDE_1;
+ break;
+ case FC_GEAR_1_2:
+ DivideFgearFromFc = CG_DIVIDE_2;
+ break;
+ case FC_GEAR_1_4:
+ DivideFgearFromFc = CG_DIVIDE_4;
+ break;
+ case FC_GEAR_1_8:
+ DivideFgearFromFc = CG_DIVIDE_8;
+ break;
+ case FC_GEAR_1_16:
+ DivideFgearFromFc = CG_DIVIDE_16;
+ break;
+ default:
+ /* Do nothing */
+ break;
+ }
+
+ return DivideFgearFromFc;
+}
+
+/**
+ * @brief Set dividing level between clock PhiT0 and fc.
+ * @param DividePhiT0FromFc: Dividing level between PhiT0 and fc.
+ * This parameter can be one of the following values:
+ * CG_DIVIDE_1, CG_DIVIDE_2, CG_DIVIDE_4, CG_DIVIDE_8,
+ * CG_DIVIDE_16, CG_DIVIDE_32, CG_DIVIDE_64, CG_DIVIDE_128,
+ * CG_DIVIDE_256 or CG_DIVIDE_512
+ * @retval Success or not
+ * The value returned can be one of the following values:
+ * SUCCESS or ERROR
+ */
+Result CG_SetPhiT0Level(CG_DivideLevel DividePhiT0FromFc)
+{
+ uint32_t fprclk = 0U;
+ Result retval = ERROR;
+ uint32_t regval = TSB_CG->SYSCR;
+
+ /* Check the parameters */
+ assert_param(IS_CG_DIVIDE_FC_LEVEL(DividePhiT0FromFc));
+
+ fprclk = (uint32_t) DividePhiT0FromFc;
+ regval &= CG_PRCK_MASK;
+ fprclk <<= 8U;
+ regval |= fprclk;
+ TSB_CG->SYSCR = regval;
+ retval = SUCCESS;
+
+ return retval;
+}
+
+/**
+ * @brief Get dividing level between clock phiT0 and fc.
+ * @param None
+ * @retval The divide level between clock phiT0 and fc
+ * The value returned can be one of the following values:
+ * CG_DIVIDE_1, CG_DIVIDE_2, CG_DIVIDE_4, CG_DIVIDE_8,
+ * CG_DIVIDE_16, CG_DIVIDE_32, CG_DIVIDE_64, CG_DIVIDE_128,
+ * CG_DIVIDE_256, CG_DIVIDE_512 or CG_DIVIDE_UNKNOWN
+ */
+CG_DivideLevel CG_GetPhiT0Level(void)
+{
+ uint32_t fprclk = 0U;
+ CG_DivideLevel phiT0Level = CG_DIVIDE_UNKNOWN;
+
+ fprclk = TSB_CG->SYSCR & (~CG_PRCK_MASK);
+ fprclk = (uint32_t) (fprclk >> 8U);
+
+ phiT0Level = numToDivideLevel_table[fprclk];
+
+ return phiT0Level;
+}
+
+/**
+ * @brief Set the warm up time
+ * @param Source: Select source of warm-up counter
+ * This parameter can be one of the following values:
+ * CG_WARM_UP_SRC_OSC_INT_HIGH, CG_WARM_UP_SRC_OSC_EXT_HIGH.
+ * Warm-up function is not necessary when using stable external clock.
+ * @param Time: Set number of warm-up cycle. It is between 0x0000 and 0xFFFF.
+ * @retval None
+ */
+void CG_SetWarmUpTime(CG_WarmUpSrc Source, uint16_t Time)
+{
+ uint32_t wupt = 0U;
+ uint32_t regval = TSB_CG->WUPHCR;
+
+ /* Check the parameters */
+ assert_param(IS_CG_WARM_UP_SRC(Source));
+
+ /* Get high 12 bits of warm-up time */
+ wupt = (((uint32_t) Time) & CG_OSCCR_WUPT_MASK) << 20U;
+
+ regval &= CG_WUP_TIME_MASK;
+ regval &= CG_WUP_COUNTER_MASK;
+
+ switch (Source) {
+ case CG_WARM_UP_SRC_OSC_INT_HIGH:
+ regval |= wupt;
+ regval &= WARM_UP_SEL_OSC_INT_HIGH;
+ break;
+ case CG_WARM_UP_SRC_OSC_EXT_HIGH:
+ regval |= wupt;
+ regval |= WARM_UP_SEL_OSC_EXT_HIGH;
+ break;
+ default:
+ /* Do nothing */
+ break;
+ }
+
+ TSB_CG->WUPHCR = regval;
+}
+
+/**
+ * @brief Start operation of warm up timer for oscillator.
+ * @param None
+ * @retval None
+ */
+void CG_StartWarmUp(void)
+{
+ uint32_t regval = TSB_CG->WUPHCR;
+ regval |= CG_WUP_START_SET;
+ TSB_CG->WUPHCR = regval;
+}
+
+/**
+ * @brief Check whether warm up is completed or not.
+ * @param None
+ * @retval The state of warm-up
+ * The value returned can be one of the following values:
+ * DONE or BUSY
+ */
+WorkState CG_GetWarmUpState(void)
+{
+ WorkState state = BUSY;
+ uint32_t wuef = 0U;
+ uint32_t regval = TSB_CG->WUPHCR;
+
+ wuef = regval & CG_WUEF_VALUE_MASK;
+ if (wuef == 0U) {
+ state = DONE;
+ } else {
+ /* Do nothing */
+ }
+
+ return state;
+}
+
+/**
+ * @brief Set PLL multiplying value
+ * @param NewValue: PLL multiplying value
+ * This parameter can be one of the following values:
+ * CG_8M_MUL_12_FPLL, CG_10M_MUL_8_FPLL, CG_12M_MUL_8_FPLL,
+ * CG_16M_MUL_6_FPLL.
+ * @retval Success or not
+ * The value returned can be one of the following values:
+ * SUCCESS or ERROR
+ */
+Result CG_SetFPLLValue(uint32_t NewValue)
+{
+ Result retval = SUCCESS;
+
+ /* read PLL0SEL and clear PLL0SET(bit14:0) */
+ uint32_t tmp = TSB_CG->PLL0SEL & CG_PLL0SEL_PLL0SET_MASK;
+
+ /* Check the parameters */
+ assert_param(IS_CG_FPLL_VALUE(NewValue));
+
+ /* Don't use the PLL when internal high-speed oscillator (IHOSC) is used as system clock */
+ /* When PLL is on, don't change the PLL setting value */
+ if (CG_FOSC_OSC_INT == CG_GetFoscSrc()) {
+ retval = ERROR;
+ } else if (ENABLE == CG_GetPLLState()) {
+ retval = ERROR;
+ } else {
+ tmp |= NewValue;
+ TSB_CG->PLL0SEL = tmp;
+ }
+
+ return retval;
+}
+
+/**
+ * @brief Get the value of PLL setting
+ * @param None
+ * @retval Get the value of PLL setting.
+ * CG_8M_MUL_12_FPLL, CG_10M_MUL_8_FPLL, CG_12M_MUL_8_FPLL,
+ * CG_16M_MUL_6_FPLL.
+ */
+uint32_t CG_GetFPLLValue(void)
+{
+ uint32_t PLL0SEL = TSB_CG->PLL0SEL & CG_PLL0SET_VALUE_MASK;
+
+ return PLL0SEL;
+}
+
+/**
+ * @brief Enable PLL or disable it.
+ * @param NewState: New state of PLL
+ * This parameter can be one of the following values:
+ * DISABLE or ENABLE
+ * @retval Success or not
+ * The value returned can be one of the following values:
+ * SUCCESS or ERROR
+ */
+Result CG_SetPLL(FunctionalState NewState)
+{
+ Result retval = ERROR;
+ uint32_t regval = TSB_CG->PLL0SEL;
+ CG_FcSrc fcsrc = CG_FC_SRC_FPLL;
+
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState == ENABLE) {
+ regval |= CG_PLL0SEL_PLL0ON_SET;
+ retval = SUCCESS;
+ } else {
+ fcsrc = CG_GetFcSrc();
+ if (fcsrc == CG_FC_SRC_FOSC) { /* PLL is not used. So it can be shut off */
+ /* Set register to disable PLL */
+ regval &= CG_PLL0SEL_PLL0ON_CLEAR;
+ retval = SUCCESS;
+ } else { /*fcsrc == CG_FC_SRC_FPLL. PLL is in use, so disabling it should be invalid */
+ /* Do nothing */
+ }
+ }
+ TSB_CG->PLL0SEL = regval;
+ return retval;
+}
+
+/**
+ * @brief Get the status of PLL operation
+ * @param None
+ * @retval Run or stop
+ * The value returned can be one of the following values:
+ * ENABLE or DISABLE
+ */
+FunctionalState CG_GetPLLState(void)
+{
+ FunctionalState pllstate = DISABLE;
+ uint32_t regval = TSB_CG->PLL0SEL;
+
+ regval &= CG_PLL0SEL_PLL0ON_SET;
+ if (regval == CG_PLL0SEL_PLL0ON_SET) {
+ pllstate = ENABLE;
+ } else {
+ /* Do nothing */
+ }
+
+ return pllstate;
+}
+
+
+/**
+ * @brief Set the source of high-speed oscillator (fosc)
+ * @param Source: Select clock source for fosc
+ * This parameter can be one of the following values:
+ * CG_FOSC_OSC_EXT , CG_FOSC_CLKIN_EXT or CG_FOSC_OSC_INT
+ * @retval None
+ */
+void CG_SetFoscSrc(CG_FoscSrc Source)
+{
+ /* Check the parameters */
+ assert_param(IS_CG_FOSC_SRC(Source));
+
+ if (Source == CG_FOSC_OSC_INT) {
+ /*Selects internal high-speed oscillator */
+ TSB_CG->OSCCR |= CG_OSCCR_IOSCEN_SET;
+ TSB_CG->OSCCR &= CG_OSCCR_OSCSEL_CLEAR;
+ } else {
+ /*Selects external high-speed oscillator */
+ TSB_CG->OSCCR |= CG_OSCCR_OSCSEL_SET;
+ TSB_CG->OSCCR &= CG_OSCCR_IOSCEN_CLEAR | CG_OSCCR_EOSCEN_NOUSE;
+ if (Source == CG_FOSC_OSC_EXT) {
+ /*Selects external high-speed oscillator */
+ TSB_CG->OSCCR |= CG_OSCCR_EOSCEN_EHOSC;
+ } else {
+ /*Selects an external clock input */
+ TSB_CG->OSCCR |= CG_OSCCR_EOSCEN_CLKIN;
+ }
+ }
+}
+
+/**
+ * @brief Get the source of high-speed oscillator (fosc)
+ * @param None
+ * @retval Source of fosc
+ * The value returned can be one of the following values:
+ * CG_FOSC_OSC_EXT , CG_FOSC_CLKIN_EXT or CG_FOSC_OSC_INT
+ */
+CG_FoscSrc CG_GetFoscSrc(void)
+{
+ uint32_t regval = TSB_CG->OSCCR;
+ uint32_t oscf = 0U;
+ uint32_t hoscon = 0U;
+ CG_FoscSrc fosc_src = CG_FOSC_CLKIN_EXT;
+
+ oscf = regval & CG_OSCCR_OSCF_SET;
+ hoscon = regval & CG_OSCCR_EOSCEN_MASK;
+ if (oscf == 0U) {
+ fosc_src = CG_FOSC_OSC_INT;
+ } else {
+ if (hoscon == CG_OSCCR_EOSCEN_EHOSC) {
+ fosc_src = CG_FOSC_OSC_EXT;
+ } else {
+ /* Do nothing */
+ }
+ }
+
+ return fosc_src;
+}
+
+/**
+ * @brief Set to the specified low-power mode
+ * @param Low power mode
+ * The value can be one of the following values:
+ * CG_STBY_MODE_STOP1, CG_STBY_MODE_IDLE.
+ * @retval None
+ */
+void CG_SetSTBYMode(CG_STBYMode Mode)
+{
+ uint32_t regval = TSB_CG->STBYCR;
+
+ /* Check the parameter */
+ assert_param(IS_CG_STBY_MODE(Mode));
+
+ regval &= CG_STBY_MODE_MASK;
+ regval |= (uint32_t) Mode;
+
+ TSB_CG->STBYCR = regval;
+}
+
+/**
+ * @brief Get the low-power consumption mode
+ * @param None
+ * @retval Low power mode
+ * The value returned can be one of the following values:
+ * CG_STBY_MODE_STOP1, CG_STBY_MODE_IDLE, CG_STBY_MODE_UNKNOWN.
+ */
+CG_STBYMode CG_GetSTBYMode(void)
+{
+ CG_STBYMode stby_mode = CG_STBY_MODE_UNKNOWN;
+ uint8_t regval = (uint8_t) (TSB_CG->STBYCR & (~CG_STBY_MODE_MASK));
+
+ stby_mode = numToSTBYMode_table[regval];
+
+ return stby_mode;
+}
+
+/**
+ * @brief Set the source of fc
+ * @param Source: The source of fc
+ * This parameter can be one of the following values:
+ * CG_FC_SRC_FOSC or CG_FC_SRC_FPLL
+ * @retval None
+ */
+void CG_SetFcSrc(CG_FcSrc Source)
+{
+ uint32_t regval = TSB_CG->PLL0SEL;
+
+ /* Check the parameters */
+ assert_param(IS_CG_FC_SRC(Source));
+
+ if (Source == CG_FC_SRC_FOSC) {
+ regval &= CG_PLL0SEL_PLL0SEL_CLEAR;
+ } else {
+ regval |= CG_PLL0SEL_PLL0SEL_SET;
+ }
+ TSB_CG->PLL0SEL = regval;
+}
+
+/**
+ * @brief Get the source of fc
+ * @param None
+ * @retval The source of fc
+ * The value returned can be one of the following values:
+ * CG_FC_SRC_FOSC or CG_FC_SRC_FPLL
+ */
+CG_FcSrc CG_GetFcSrc(void)
+{
+ uint32_t regval = TSB_CG->PLL0SEL;
+ CG_FcSrc fcsrc = CG_FC_SRC_FOSC;
+
+ regval &= CG_PLL0SEL_PLLST_SET;
+ if (regval == CG_PLL0SEL_PLLST_SET) {
+ fcsrc = CG_FC_SRC_FPLL;
+ } else {
+ /* Do nothing */
+ }
+
+ return fcsrc;
+}
+
+/**
+ * @brief Enable or disable to protect CG registers
+ * @param NewState: New state of the CG protect register
+ * This parameter can be one of the following values:
+ * DISABLE or ENABLE
+ * @retval None
+ */
+void CG_SetProtectCtrl(FunctionalState NewState)
+{
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ if (NewState == ENABLE) {
+ TSB_CG->PROTECT = CG_PROTECT_SET;
+ } else {
+ TSB_CG->PROTECT = CG_PROTECT_CLEAR;
+ }
+}
+
+/**
+ * @brief Enable or disable supplying clock fsys to peripheries
+ * @param Periph: The target peripheral of CG supplies clock
+ * This parameter can be one of the following values or their combination:
+ * CG_FC_PERIPH_PORTH, CG_FC_PERIPH_PORTJ, CG_FC_PERIPH_TMRB0_3,
+ * CG_FC_PERIPH_TMRB4_6, CG_FC_PERIPH_TMR16A, CG_FC_PERIPH_I2C0,
+ * CG_FC_PERIPH_SIO0, CG_FC_PERIPH_TSPI, CG_FC_PERIPH_DMAC,
+ * CG_FC_PERIPH_ADC, CG_FC_PERIPH_USBD, CG_FC_PERIPH_TMRD,
+ * CG_FC_PERIPHA_ALL.
+ * @param NewState: New state of clock supply setting.
+ * This parameter can be one of the following values:
+ * DISABLE or ENABLE
+ * @retval None
+ */
+void CG_SetFcPeriphA(uint32_t Periph, FunctionalState NewState)
+{
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+ assert_param(IS_CG_FC_PERIPHA(Periph));
+ if (NewState == ENABLE) { /* write '1' to enable */
+ TSB_CG->FSYSENA |= Periph;
+ } else { /* clear to '0' to disable */
+ TSB_CG->FSYSENA &= ~Periph;
+ }
+}
+
+ /**
+ * @brief Enable or disable supplying clock fsys to peripheries
+ * @param Periph: The target peripheral of CG supplies clock
+ * This parameter can be one of the following values or their combination:
+ * CG_FC_PERIPH_TMRB7, CG_FC_PERIPH_SIO1, CG_FC_PERIPH_WDT,
+ * CG_FC_PERIPH_I2C1, CG_FC_PERIPHB_ALL.
+ * @param NewState: New state of clock supply setting.
+ * This parameter can be one of the following values:
+ * DISABLE or ENABLE
+ * @retval None
+ */
+void CG_SetFcPeriphB(uint32_t Periph, FunctionalState NewState)
+{
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+ assert_param(IS_CG_FC_PERIPHB(Periph));
+ if (NewState == ENABLE) { /* write '1' to enable */
+ TSB_CG->FSYSENB |= Periph;
+ } else { /* clear to '0' to disable */
+ TSB_CG->FSYSENB &= ~Periph;
+ }
+}
+
+ /**
+ * @brief Enable or disable supplying clock fsys to peripheries
+ * @param Periph: The target peripheral of CG supplies clock
+ * This parameter can be one of the following values or their combination:
+ * CG_FPLL_PERIPH_TMRD, CG_EHCLKSEL_8_24_48MHZ, CG_USBSEL_PLL_CLOCKIN,
+ * CG_FC_PERIPH_I2C1, CG_FC_PERIPHB_ALL.
+ * @param NewState: New state of clock supply setting.
+ * This parameter can be one of the following values:
+ * DISABLE or ENABLE
+ * @retval None
+ */
+void CG_SetFcOptional(uint32_t Periph, FunctionalState NewState)
+{
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+ assert_param(IS_CG_FPLL_OPTIONAL(Periph));
+ if (NewState == ENABLE) { /* write '1' to enable */
+ TSB_CG->EXTENDO0 |= Periph;
+ } else { /* clear to '0' to disable */
+ TSB_CG->EXTENDO0 &= ~Periph;
+ }
+}
+
+/**
+ * @brief Enable or disable supplying clock fsys for ADC.
+ * @param NewState: New state of clock fsys supply setting for ADC.
+ * This parameter can be one of the following values:
+ * ENABLE or DISABLE.
+ * @retval None.
+ */
+void CG_SetADCClkSupply(FunctionalState NewState)
+{
+ volatile uint32_t tmp = 0U;
+
+ /* Check the parameters */
+ assert_param(IS_FUNCTIONAL_STATE(NewState));
+
+ /* Check ADC is not during conversion */
+ do {
+ tmp = TSB_AD->MOD0 & ADC_MOD0_BUSY_MASK;
+ }
+ while (tmp);
+
+ /* Set CGSPCLKEN<ADCKEN> */
+ tmp = TSB_CG->SPCLKEN;
+ if (NewState == ENABLE) {
+ tmp |= CG_SPCLKEN_ADCKEN_SET;
+ } else {
+ tmp &= CG_SPCLKEN_ADCKEN_CLEAR;
+ }
+ TSB_CG->SPCLKEN = tmp;
+}
+
+/** @} */
+/* End of group CG_Exported_Functions */
+
+/** @} */
+/* End of group CG */
+
+/** @} */
+/* End of group TX00_Periph_Driver */
+
+#endif /* defined(__TMPM066_CG_H) */