]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/MSP430FR5969_LaunchPad/driverlib/MSP430FR5xx_6xx/cs.c
Rename /Demo/MSP430FR5969_LaunchPad to /Demo/MSP430X_MSP430FR5969_LaunchPad for consi...
[freertos] / FreeRTOS / Demo / MSP430FR5969_LaunchPad / driverlib / MSP430FR5xx_6xx / cs.c
diff --git a/FreeRTOS/Demo/MSP430FR5969_LaunchPad/driverlib/MSP430FR5xx_6xx/cs.c b/FreeRTOS/Demo/MSP430FR5969_LaunchPad/driverlib/MSP430FR5xx_6xx/cs.c
deleted file mode 100644 (file)
index ce324d1..0000000
+++ /dev/null
@@ -1,939 +0,0 @@
-/* --COPYRIGHT--,BSD\r
- * Copyright (c) 2014, Texas Instruments Incorporated\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- *\r
- * *  Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- *\r
- * *  Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * *  Neither the name of Texas Instruments Incorporated nor the names of\r
- *    its contributors may be used to endorse or promote products derived\r
- *    from this software without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\r
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
- * --/COPYRIGHT--*/\r
-//*****************************************************************************\r
-//\r
-// cs.c - Driver for the cs Module.\r
-//\r
-//*****************************************************************************\r
-\r
-//*****************************************************************************\r
-//\r
-//! \addtogroup cs_api cs\r
-//! @{\r
-//\r
-//*****************************************************************************\r
-\r
-#include "inc/hw_regaccess.h"\r
-#include "inc/hw_memmap.h"\r
-\r
-#if defined(__MSP430_HAS_CS__) || defined(__MSP430_HAS_SFR__)\r
-#include "cs.h"\r
-\r
-#include <assert.h>\r
-\r
-//*****************************************************************************\r
-//\r
-// The following value is used by CS_getACLK, CS_getSMCLK, CS_getMCLK to\r
-// determine the operating frequency based on the available DCO frequencies.\r
-//\r
-//*****************************************************************************\r
-#define CS_DCO_FREQ_1                                                   1000000\r
-#define CS_DCO_FREQ_2                                                   2670000\r
-#define CS_DCO_FREQ_3                                                   3330000\r
-#define CS_DCO_FREQ_4                                                   4000000\r
-#define CS_DCO_FREQ_5                                                   5330000\r
-#define CS_DCO_FREQ_6                                                   6670000\r
-#define CS_DCO_FREQ_7                                                   8000000\r
-#define CS_DCO_FREQ_8                                                  16000000\r
-#define CS_DCO_FREQ_9                                                  20000000\r
-#define CS_DCO_FREQ_10                                                 24000000\r
-\r
-//*****************************************************************************\r
-//\r
-// Internal very low power VLOCLK, low frequency oscillator with 10kHz typical\r
-// frequency, internal low-power oscillator MODCLK with 5 MHz typical\r
-// frequency and LFMODCLK is MODCLK divided by 128.\r
-//\r
-//*****************************************************************************\r
-#define CS_VLOCLK_FREQUENCY                                               10000\r
-#define CS_MODCLK_FREQUENCY                                             5000000\r
-#define CS_LFMODCLK_FREQUENCY                                             39062\r
-\r
-//*****************************************************************************\r
-//\r
-// The following value is used by CS_XT1Start, CS_bypassXT1,\r
-// CS_XT1StartWithTimeout, CS_bypassXT1WithTimeout to properly set the XTS\r
-// bit. This frequnecy threshold is specified in the User's Guide.\r
-//\r
-//*****************************************************************************\r
-#define LFXT_FREQUENCY_THRESHOLD                                          50000\r
-\r
-//*****************************************************************************\r
-//\r
-// LFXT crystal frequency. Should be set with\r
-// CS_externalClockSourceInit if LFXT is used and user intends to invoke\r
-// CS_getSMCLK, CS_getMCLK, CS_getACLK and\r
-// CS_turnOnLFXT, CS_LFXTByPass, CS_turnOnLFXTWithTimeout,\r
-// CS_LFXTByPassWithTimeout.\r
-//\r
-//*****************************************************************************\r
-static uint32_t privateLFXTClockFrequency = 0;\r
-\r
-//*****************************************************************************\r
-//\r
-// The HFXT crystal frequency. Should be set with\r
-// CS_externalClockSourceInit if HFXT is used and user intends to invoke\r
-// CS_getSMCLK, CS_getMCLK, CS_getACLK,\r
-// CS_turnOnLFXT, CS_LFXTByPass, CS_turnOnLFXTWithTimeout,\r
-// CS_LFXTByPassWithTimeout.\r
-//\r
-//*****************************************************************************\r
-static uint32_t privateHFXTClockFrequency = 0;\r
-\r
-static uint32_t privateCSASourceClockFromDCO(uint8_t clockdivider)\r
-{\r
-    uint32_t CLKFrequency = 0;\r
-\r
-    if(HWREG16(CS_BASE + OFS_CSCTL1) & DCORSEL)\r
-    {\r
-        switch(HWREG16(CS_BASE + OFS_CSCTL1) & DCOFSEL_7)\r
-        {\r
-        case DCOFSEL_0:\r
-            CLKFrequency = CS_DCO_FREQ_1 / clockdivider;\r
-            break;\r
-        case DCOFSEL_1:\r
-            CLKFrequency = CS_DCO_FREQ_5 / clockdivider;\r
-            break;\r
-        case DCOFSEL_2:\r
-            CLKFrequency = CS_DCO_FREQ_6 / clockdivider;\r
-            break;\r
-        case DCOFSEL_3:\r
-            CLKFrequency = CS_DCO_FREQ_7 / clockdivider;\r
-            break;\r
-        case DCOFSEL_4:\r
-            CLKFrequency = CS_DCO_FREQ_8 / clockdivider;\r
-            break;\r
-        case DCOFSEL_5:\r
-            CLKFrequency = CS_DCO_FREQ_9 / clockdivider;\r
-            break;\r
-        case DCOFSEL_6:\r
-        case DCOFSEL_7:\r
-            CLKFrequency = CS_DCO_FREQ_10 / clockdivider;\r
-            break;\r
-        default:\r
-            CLKFrequency = 0;\r
-            break;\r
-        }\r
-    }\r
-    else\r
-    {\r
-        switch(HWREG16(CS_BASE + OFS_CSCTL1) & DCOFSEL_7)\r
-        {\r
-        case DCOFSEL_0:\r
-            CLKFrequency = CS_DCO_FREQ_1 / clockdivider;\r
-            break;\r
-        case DCOFSEL_1:\r
-            CLKFrequency = CS_DCO_FREQ_2 / clockdivider;\r
-            break;\r
-        case DCOFSEL_2:\r
-            CLKFrequency = CS_DCO_FREQ_3 / clockdivider;\r
-            break;\r
-        case DCOFSEL_3:\r
-            CLKFrequency = CS_DCO_FREQ_4 / clockdivider;\r
-            break;\r
-        case DCOFSEL_4:\r
-            CLKFrequency = CS_DCO_FREQ_5 / clockdivider;\r
-            break;\r
-        case DCOFSEL_5:\r
-            CLKFrequency = CS_DCO_FREQ_6 / clockdivider;\r
-            break;\r
-        case DCOFSEL_6:\r
-        case DCOFSEL_7:\r
-            CLKFrequency = CS_DCO_FREQ_7 / clockdivider;\r
-            break;\r
-        default:\r
-            CLKFrequency = 0;\r
-            break;\r
-        }\r
-    }\r
-\r
-    return (CLKFrequency);\r
-}\r
-\r
-static uint32_t privateCSAComputeCLKFrequency(uint16_t CLKSource,\r
-                                              uint16_t CLKSourceDivider)\r
-{\r
-    uint32_t CLKFrequency = 0;\r
-    uint8_t CLKSourceFrequencyDivider = 1;\r
-    uint8_t i = 0;\r
-\r
-    // Determine Frequency divider\r
-    for(i = 0; i < CLKSourceDivider; i++)\r
-    {\r
-        CLKSourceFrequencyDivider *= 2;\r
-    }\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    // Determine clock source based on CLKSource\r
-    switch(CLKSource)\r
-    {\r
-    // If LFXT is selected as clock source\r
-    case SELM__LFXTCLK:\r
-        CLKFrequency = (privateLFXTClockFrequency /\r
-                        CLKSourceFrequencyDivider);\r
-\r
-        //Check if LFXTOFFG is not set. If fault flag is set\r
-        //VLO is used as source clock\r
-        if(HWREG8(CS_BASE + OFS_CSCTL5) & LFXTOFFG)\r
-        {\r
-            HWREG8(CS_BASE + OFS_CSCTL5) &= ~(LFXTOFFG);\r
-            //Clear OFIFG fault flag\r
-            HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-\r
-            if(HWREG8(CS_BASE + OFS_CSCTL5) & LFXTOFFG)\r
-            {\r
-                CLKFrequency = CS_LFMODCLK_FREQUENCY;\r
-            }\r
-        }\r
-        break;\r
-\r
-    case SELM__VLOCLK:\r
-        CLKFrequency =\r
-            (CS_VLOCLK_FREQUENCY / CLKSourceFrequencyDivider);\r
-        break;\r
-\r
-    case SELM__LFMODOSC:\r
-        CLKFrequency =\r
-            (CS_LFMODCLK_FREQUENCY / CLKSourceFrequencyDivider);\r
-\r
-        break;\r
-\r
-    case SELM__DCOCLK:\r
-        CLKFrequency =\r
-            privateCSASourceClockFromDCO(CLKSourceFrequencyDivider);\r
-\r
-        break;\r
-\r
-    case SELM__MODOSC:\r
-        CLKFrequency =\r
-            (CS_MODCLK_FREQUENCY / CLKSourceFrequencyDivider);\r
-\r
-        break;\r
-\r
-    case SELM__HFXTCLK:\r
-        CLKFrequency =\r
-            (privateHFXTClockFrequency / CLKSourceFrequencyDivider);\r
-\r
-        if(HWREG8(CS_BASE + OFS_CSCTL5) & HFXTOFFG)\r
-        {\r
-            HWREG8(CS_BASE + OFS_CSCTL5) &= ~HFXTOFFG;\r
-            //Clear OFIFG fault flag\r
-            HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-        }\r
-\r
-        if(HWREG8(CS_BASE + OFS_CSCTL5) & HFXTOFFG)\r
-        {\r
-            CLKFrequency = CS_MODCLK_FREQUENCY;\r
-        }\r
-        break;\r
-    }\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-\r
-    return (CLKFrequency);\r
-}\r
-\r
-void CS_setExternalClockSource(uint32_t LFXTCLK_frequency,\r
-                               uint32_t HFXTCLK_frequency)\r
-{\r
-    privateLFXTClockFrequency = LFXTCLK_frequency;\r
-    privateHFXTClockFrequency = HFXTCLK_frequency;\r
-}\r
-\r
-void CS_initClockSignal(uint8_t selectedClockSignal,\r
-                        uint16_t clockSource,\r
-                        uint16_t clockSourceDivider)\r
-{\r
-    //Verify User has selected a valid Frequency divider\r
-    assert(\r
-        (CS_CLOCK_DIVIDER_1 == clockSourceDivider) ||\r
-        (CS_CLOCK_DIVIDER_2 == clockSourceDivider) ||\r
-        (CS_CLOCK_DIVIDER_4 == clockSourceDivider) ||\r
-        (CS_CLOCK_DIVIDER_8 == clockSourceDivider) ||\r
-        (CS_CLOCK_DIVIDER_16 == clockSourceDivider) ||\r
-        (CS_CLOCK_DIVIDER_32 == clockSourceDivider)\r
-        );\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    switch(selectedClockSignal)\r
-    {\r
-    case CS_ACLK:\r
-        assert(\r
-            (CS_LFXTCLK_SELECT == clockSource)  ||\r
-            (CS_VLOCLK_SELECT == clockSource)   ||\r
-            (CS_LFMODOSC_SELECT == clockSource)\r
-            );\r
-\r
-        clockSourceDivider = clockSourceDivider << 8;\r
-        clockSource = clockSource << 8;\r
-\r
-        HWREG16(CS_BASE + OFS_CSCTL2) &= ~(SELA_7);\r
-        HWREG16(CS_BASE + OFS_CSCTL2) |= (clockSource);\r
-        HWREG16(CS_BASE + OFS_CSCTL3) &= ~(DIVA0 + DIVA1 + DIVA2);\r
-        HWREG16(CS_BASE + OFS_CSCTL3) |= clockSourceDivider;\r
-        break;\r
-    case CS_SMCLK:\r
-        assert(\r
-            (CS_LFXTCLK_SELECT == clockSource) ||\r
-            (CS_VLOCLK_SELECT == clockSource) ||\r
-            (CS_DCOCLK_SELECT == clockSource) ||\r
-            (CS_HFXTCLK_SELECT == clockSource) ||\r
-            (CS_LFMODOSC_SELECT == clockSource)||\r
-            (CS_MODOSC_SELECT == clockSource)\r
-            );\r
-\r
-        clockSource = clockSource << 4;\r
-        clockSourceDivider = clockSourceDivider << 4;\r
-\r
-        HWREG16(CS_BASE + OFS_CSCTL2) &= ~(SELS_7);\r
-        HWREG16(CS_BASE + OFS_CSCTL2) |= clockSource;\r
-        HWREG16(CS_BASE + OFS_CSCTL3) &= ~(DIVS0 + DIVS1 + DIVS2);\r
-        HWREG16(CS_BASE + OFS_CSCTL3) |= clockSourceDivider;\r
-        break;\r
-    case CS_MCLK:\r
-        assert(\r
-            (CS_LFXTCLK_SELECT == clockSource) ||\r
-            (CS_VLOCLK_SELECT == clockSource) ||\r
-            (CS_DCOCLK_SELECT == clockSource) ||\r
-            (CS_HFXTCLK_SELECT == clockSource) ||\r
-            (CS_LFMODOSC_SELECT == clockSource)||\r
-            (CS_MODOSC_SELECT == clockSource)\r
-            );\r
-\r
-        HWREG16(CS_BASE + OFS_CSCTL2) &= ~(SELM_7);\r
-        HWREG16(CS_BASE + OFS_CSCTL2) |= clockSource;\r
-        HWREG16(CS_BASE + OFS_CSCTL3) &= ~(DIVM0 + DIVM1 + DIVM2);\r
-        HWREG16(CS_BASE + OFS_CSCTL3) |= clockSourceDivider;\r
-        break;\r
-    }\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-void CS_turnOnLFXT(uint16_t lfxtdrive)\r
-{\r
-    assert(privateLFXTClockFrequency != 0);\r
-\r
-    assert((lfxtdrive == CS_LFXT_DRIVE_0) ||\r
-           (lfxtdrive == CS_LFXT_DRIVE_1) ||\r
-           (lfxtdrive == CS_LFXT_DRIVE_2) ||\r
-           (lfxtdrive == CS_LFXT_DRIVE_3));\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    //Switch ON LFXT oscillator\r
-    HWREG16(CS_BASE + OFS_CSCTL4) &= ~LFXTOFF;\r
-\r
-    //Highest drive setting for LFXTstartup\r
-    HWREG16(CS_BASE + OFS_CSCTL4_L) |= LFXTDRIVE1_L + LFXTDRIVE0_L;\r
-\r
-    HWREG16(CS_BASE + OFS_CSCTL4) &= ~LFXTBYPASS;\r
-\r
-    //Wait for Crystal to stabilize\r
-    while(HWREG8(CS_BASE + OFS_CSCTL5) & LFXTOFFG)\r
-    {\r
-        //Clear OSC flaut Flags fault flags\r
-        HWREG8(CS_BASE + OFS_CSCTL5) &= ~(LFXTOFFG);\r
-\r
-        //Clear OFIFG fault flag\r
-        HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-    }\r
-\r
-    //set requested Drive mode\r
-    HWREG16(CS_BASE + OFS_CSCTL4) = (HWREG16(CS_BASE + OFS_CSCTL4) &\r
-                                     ~(LFXTDRIVE_3)\r
-                                     ) |\r
-                                    (lfxtdrive);\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-void CS_bypassLFXT(void)\r
-{\r
-    //Verify user has set frequency of LFXT with SetExternalClockSource\r
-    assert(privateLFXTClockFrequency != 0);\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    assert(privateLFXTClockFrequency < LFXT_FREQUENCY_THRESHOLD);\r
-\r
-    // Set LFXT in LF mode Switch off LFXT oscillator and enable BYPASS mode\r
-    HWREG16(CS_BASE + OFS_CSCTL4) |= (LFXTBYPASS + LFXTOFF);\r
-\r
-    //Wait until LFXT stabilizes\r
-    while(HWREG8(CS_BASE + OFS_CSCTL5) & LFXTOFFG)\r
-    {\r
-        //Clear OSC flaut Flags fault flags\r
-        HWREG8(CS_BASE + OFS_CSCTL5) &= ~(LFXTOFFG);\r
-\r
-        // Clear the global fault flag. In case the LFXT caused the global fault\r
-        // flag to get set this will clear the global error condition. If any\r
-        // error condition persists, global flag will get again.\r
-        HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-    }\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-bool CS_turnOnLFXTWithTimeout(uint16_t lfxtdrive,\r
-                              uint32_t timeout)\r
-{\r
-    assert(privateLFXTClockFrequency != 0);\r
-\r
-    assert((lfxtdrive == CS_LFXT_DRIVE_0) ||\r
-           (lfxtdrive == CS_LFXT_DRIVE_1) ||\r
-           (lfxtdrive == CS_LFXT_DRIVE_2) ||\r
-           (lfxtdrive == CS_LFXT_DRIVE_3));\r
-\r
-    assert(timeout > 0);\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    //Switch ON LFXT oscillator\r
-    HWREG16(CS_BASE + OFS_CSCTL4) &= ~LFXTOFF;\r
-\r
-    //Highest drive setting for LFXTstartup\r
-    HWREG16(CS_BASE + OFS_CSCTL4_L) |= LFXTDRIVE1_L + LFXTDRIVE0_L;\r
-\r
-    HWREG16(CS_BASE + OFS_CSCTL4) &= ~LFXTBYPASS;\r
-\r
-    while((HWREG8(CS_BASE + OFS_CSCTL5) & LFXTOFFG) && --timeout)\r
-    {\r
-        //Clear OSC fault Flags fault flags\r
-        HWREG8(CS_BASE + OFS_CSCTL5) &= ~(LFXTOFFG);\r
-\r
-        // Clear the global fault flag. In case the LFXT caused the global fault\r
-        // flag to get set this will clear the global error condition. If any\r
-        // error condition persists, global flag will get again.\r
-        HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-    }\r
-\r
-    if(timeout)\r
-    {\r
-        //set requested Drive mode\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = (HWREG16(CS_BASE + OFS_CSCTL4) &\r
-                                         ~(LFXTDRIVE_3)\r
-                                         ) |\r
-                                        (lfxtdrive);\r
-        // Lock CS control register\r
-        HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-        return (STATUS_SUCCESS);\r
-    }\r
-    else\r
-    {\r
-        // Lock CS control register\r
-        HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-        return (STATUS_FAIL);\r
-    }\r
-}\r
-\r
-bool CS_bypassLFXTWithTimeout(uint32_t timeout)\r
-{\r
-    assert(privateLFXTClockFrequency != 0);\r
-\r
-    assert(privateLFXTClockFrequency < LFXT_FREQUENCY_THRESHOLD);\r
-\r
-    assert(timeout > 0);\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    // Set LFXT in LF mode Switch off LFXT oscillator and enable BYPASS mode\r
-    HWREG16(CS_BASE + OFS_CSCTL4) |= (LFXTBYPASS + LFXTOFF);\r
-\r
-    while((HWREG8(CS_BASE + OFS_CSCTL5) & LFXTOFFG) && --timeout)\r
-    {\r
-        //Clear OSC fault Flags fault flags\r
-        HWREG8(CS_BASE + OFS_CSCTL5) &= ~(LFXTOFFG);\r
-\r
-        // Clear the global fault flag. In case the LFXT caused the global fault\r
-        // flag to get set this will clear the global error condition. If any\r
-        // error condition persists, global flag will get again.\r
-        HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-    }\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-\r
-    if(timeout)\r
-    {\r
-        return (STATUS_SUCCESS);\r
-    }\r
-    else\r
-    {\r
-        return (STATUS_FAIL);\r
-    }\r
-}\r
-\r
-void CS_turnOffLFXT(void)\r
-{\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    //Switch off LFXT oscillator\r
-    HWREG16(CS_BASE + OFS_CSCTL4) |= LFXTOFF;\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-void CS_turnOnHFXT(uint16_t hfxtdrive)\r
-{\r
-    assert(privateHFXTClockFrequency != 0);\r
-\r
-    assert((hfxtdrive == CS_HFXT_DRIVE_4MHZ_8MHZ) ||\r
-           (hfxtdrive == CS_HFXT_DRIVE_8MHZ_16MHZ) ||\r
-           (hfxtdrive == CS_HFXT_DRIVE_16MHZ_24MHZ)||\r
-           (hfxtdrive == CS_HFXT_DRIVE_24MHZ_32MHZ));\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    // Switch ON HFXT oscillator\r
-    HWREG16(CS_BASE + OFS_CSCTL4) &= ~HFXTOFF;\r
-\r
-    //Disable HFXTBYPASS mode and Switch on HFXT oscillator\r
-    HWREG16(CS_BASE + OFS_CSCTL4) &= ~HFXTBYPASS;\r
-\r
-    //If HFFrequency is 16MHz or above\r
-    if(privateHFXTClockFrequency > 16000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_3;\r
-    }\r
-    //If HFFrequency is between 8MHz and 16MHz\r
-    else if(privateHFXTClockFrequency > 8000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_2;\r
-    }\r
-    //If HFFrequency is between 0MHz and 4MHz\r
-    else if(privateHFXTClockFrequency < 4000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_0;\r
-    }\r
-    //If HFFrequency is between 4MHz and 8MHz\r
-    else\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_1;\r
-    }\r
-\r
-    while(HWREG8(CS_BASE + OFS_CSCTL5) & HFXTOFFG)\r
-    {\r
-        //Clear OSC flaut Flags\r
-        HWREG8(CS_BASE + OFS_CSCTL5) &= ~(HFXTOFFG);\r
-\r
-        //Clear OFIFG fault flag\r
-        HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-    }\r
-\r
-    HWREG16(CS_BASE + OFS_CSCTL4) = (HWREG16(CS_BASE + OFS_CSCTL4) &\r
-                                     ~(CS_HFXT_DRIVE_24MHZ_32MHZ)\r
-                                     ) |\r
-                                    (hfxtdrive);\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-void CS_bypassHFXT(void)\r
-{\r
-    //Verify user has initialized value of HFXTClock\r
-    assert(privateHFXTClockFrequency != 0);\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    //Switch off HFXT oscillator and set it to BYPASS mode\r
-    HWREG16(CS_BASE + OFS_CSCTL4) |= (HFXTBYPASS + HFXTOFF);\r
-\r
-    //Set correct HFFREQ bit for FR58xx/FR59xx devices\r
-\r
-    //If HFFrequency is 16MHz or above\r
-    if(privateHFXTClockFrequency > 16000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_3;\r
-    }\r
-    //If HFFrequency is between 8MHz and 16MHz\r
-    else if(privateHFXTClockFrequency > 8000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_2;\r
-    }\r
-    //If HFFrequency is between 0MHz and 4MHz\r
-    else if(privateHFXTClockFrequency < 4000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_0;\r
-    }\r
-    //If HFFrequency is between 4MHz and 8MHz\r
-    else\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_1;\r
-    }\r
-\r
-    while(HWREG8(CS_BASE + OFS_CSCTL5) & HFXTOFFG)\r
-    {\r
-        //Clear OSC fault Flags\r
-        HWREG8(CS_BASE + OFS_CSCTL5) &= ~(HFXTOFFG);\r
-\r
-        //Clear OFIFG fault flag\r
-        HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-    }\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-bool CS_turnOnHFXTWithTimeout(uint16_t hfxtdrive,\r
-                              uint32_t timeout)\r
-{\r
-    //Verify user has initialized value of HFXTClock\r
-    assert(privateHFXTClockFrequency != 0);\r
-\r
-    assert(timeout > 0);\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    //Switch on HFXT oscillator\r
-    HWREG16(CS_BASE + OFS_CSCTL4) &= ~HFXTOFF;\r
-\r
-    // Disable HFXTBYPASS mode\r
-    HWREG16(CS_BASE + OFS_CSCTL4) &= ~HFXTBYPASS;\r
-\r
-    //Set correct HFFREQ bit for FR58xx/FR59xx devices based\r
-    //on HFXTClockFrequency\r
-\r
-    //If HFFrequency is 16MHz or above\r
-    if(privateHFXTClockFrequency > 16000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_3;\r
-    }\r
-    //If HFFrequency is between 8MHz and 16MHz\r
-    else if(privateHFXTClockFrequency > 8000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_2;\r
-    }\r
-    //If HFFrequency is between 0MHz and 4MHz\r
-    else if(privateHFXTClockFrequency < 4000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_0;\r
-    }\r
-    //If HFFrequency is between 4MHz and 8MHz\r
-    else\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_1;\r
-    }\r
-\r
-    while((HWREG8(CS_BASE + OFS_CSCTL5) & HFXTOFFG) && --timeout)\r
-    {\r
-        //Clear OSC fault Flags fault flags\r
-        HWREG8(CS_BASE + OFS_CSCTL5) &= ~(HFXTOFFG);\r
-\r
-        // Clear the global fault flag. In case the LFXT caused the global fault\r
-        // flag to get set this will clear the global error condition. If any\r
-        // error condition persists, global flag will get again.\r
-        HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-    }\r
-\r
-    if(timeout)\r
-    {\r
-        //Set drive strength for HFXT\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = (HWREG16(CS_BASE + OFS_CSCTL4) &\r
-                                         ~(CS_HFXT_DRIVE_24MHZ_32MHZ)\r
-                                         ) |\r
-                                        (hfxtdrive);\r
-        // Lock CS control register\r
-        HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-        return (STATUS_SUCCESS);\r
-    }\r
-    else\r
-    {\r
-        // Lock CS control register\r
-        HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-        return (STATUS_FAIL);\r
-    }\r
-}\r
-\r
-bool CS_bypassHFXTWithTimeout(uint32_t timeout)\r
-{\r
-    //Verify user has initialized value of HFXTClock\r
-    assert(privateHFXTClockFrequency != 0);\r
-\r
-    assert(timeout > 0);\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    //If HFFrequency is 16MHz or above\r
-    if(privateHFXTClockFrequency > 16000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_3;\r
-    }\r
-    //If HFFrequency is between 8MHz and 16MHz\r
-    else if(privateHFXTClockFrequency > 8000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_2;\r
-    }\r
-    //If HFFrequency is between 0MHz and 4MHz\r
-    else if(privateHFXTClockFrequency < 4000000)\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_0;\r
-    }\r
-    //If HFFrequency is between 4MHz and 8MHz\r
-    else\r
-    {\r
-        HWREG16(CS_BASE + OFS_CSCTL4) = HFFREQ_1;\r
-    }\r
-\r
-    //Switch off HFXT oscillator and enable BYPASS mode\r
-    HWREG16(CS_BASE + OFS_CSCTL4) |= (HFXTBYPASS + HFXTOFF);\r
-\r
-    while((HWREG8(CS_BASE + OFS_CSCTL5) & HFXTOFFG) && --timeout)\r
-    {\r
-        //Clear OSC fault Flags fault flags\r
-        HWREG8(CS_BASE + OFS_CSCTL5) &= ~(HFXTOFFG);\r
-\r
-        // Clear the global fault flag. In case the LFXT caused the global fault\r
-        // flag to get set this will clear the global error condition. If any\r
-        // error condition persists, global flag will get again.\r
-        HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-    }\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-\r
-    if(timeout)\r
-    {\r
-        return (STATUS_SUCCESS);\r
-    }\r
-    else\r
-    {\r
-        return (STATUS_FAIL);\r
-    }\r
-}\r
-\r
-void CS_turnOffHFXT(void)\r
-{\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    //Switch off HFXT oscillator\r
-    HWREG16(CS_BASE + OFS_CSCTL4) |= HFXTOFF;\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-void CS_enableClockRequest(uint8_t selectClock)\r
-{\r
-    assert(\r
-        (CS_ACLK == selectClock)||\r
-        (CS_SMCLK == selectClock)||\r
-        (CS_MCLK == selectClock)||\r
-        (CS_MODOSC == selectClock));\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    HWREG8(CS_BASE + OFS_CSCTL6) |= selectClock;\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-void CS_disableClockRequest(uint8_t selectClock)\r
-{\r
-    assert(\r
-        (CS_ACLK == selectClock)||\r
-        (CS_SMCLK == selectClock)||\r
-        (CS_MCLK == selectClock)||\r
-        (CS_MODOSC == selectClock));\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    HWREG8(CS_BASE + OFS_CSCTL6) &= ~selectClock;\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-uint8_t CS_getFaultFlagStatus(uint8_t mask)\r
-{\r
-    assert(\r
-        (CS_HFXTOFFG == mask)||\r
-        (CS_LFXTOFFG == mask)\r
-        );\r
-    return (HWREG8(CS_BASE + OFS_CSCTL5) & mask);\r
-}\r
-\r
-void CS_clearFaultFlag(uint8_t mask)\r
-{\r
-    assert(\r
-        (CS_HFXTOFFG == mask)||\r
-        (CS_LFXTOFFG == mask)\r
-        );\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    HWREG8(CS_BASE + OFS_CSCTL5) &= ~mask;\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-uint32_t CS_getACLK(void)\r
-{\r
-    //Find ACLK source\r
-    uint16_t ACLKSource = (HWREG16(CS_BASE + OFS_CSCTL2) & SELA_7);\r
-    ACLKSource = ACLKSource >> 8;\r
-\r
-    //Find ACLK frequency divider\r
-    uint16_t ACLKSourceDivider = HWREG16(CS_BASE + OFS_CSCTL3) & SELA_7;\r
-    ACLKSourceDivider = ACLKSourceDivider >> 8;\r
-\r
-    return (privateCSAComputeCLKFrequency(\r
-                ACLKSource,\r
-                ACLKSourceDivider));\r
-}\r
-\r
-uint32_t CS_getSMCLK(void)\r
-{\r
-    //Find SMCLK source\r
-    uint16_t SMCLKSource = HWREG8(CS_BASE + OFS_CSCTL2) & SELS_7;\r
-\r
-    SMCLKSource = SMCLKSource >> 4;\r
-\r
-    //Find SMCLK frequency divider\r
-    uint16_t SMCLKSourceDivider = HWREG16(CS_BASE + OFS_CSCTL3) & SELS_7;\r
-    SMCLKSourceDivider = SMCLKSourceDivider >> 4;\r
-\r
-    return (privateCSAComputeCLKFrequency(\r
-                SMCLKSource,\r
-                SMCLKSourceDivider)\r
-            );\r
-}\r
-\r
-uint32_t CS_getMCLK(void)\r
-{\r
-    //Find MCLK source\r
-    uint16_t MCLKSource = (HWREG16(CS_BASE + OFS_CSCTL2) & SELM_7);\r
-    //Find MCLK frequency divider\r
-    uint16_t MCLKSourceDivider = HWREG16(CS_BASE + OFS_CSCTL3) & SELM_7;\r
-\r
-    return (privateCSAComputeCLKFrequency(\r
-                MCLKSource,\r
-                MCLKSourceDivider)\r
-            );\r
-}\r
-\r
-void CS_turnOffVLO(void)\r
-{\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    HWREG16(CS_BASE + OFS_CSCTL4) |= VLOOFF;\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-uint16_t CS_clearAllOscFlagsWithTimeout(uint32_t timeout)\r
-{\r
-    assert(timeout > 0);\r
-\r
-    // Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    do\r
-    {\r
-        // Clear all osc fault flags\r
-        HWREG8(CS_BASE + OFS_CSCTL5) &= ~(LFXTOFFG + HFXTOFFG);\r
-\r
-        // Clear the global osc fault flag.\r
-        HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;\r
-\r
-        // Check LFXT fault flags\r
-    }\r
-    while((HWREG8(SFR_BASE + OFS_SFRIFG1) & OFIFG) && --timeout);\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-\r
-    return (HWREG8(CS_BASE + OFS_CSCTL5) & (LFXTOFFG + HFXTOFFG));\r
-}\r
-\r
-void CS_setDCOFreq(uint16_t dcorsel,\r
-                   uint16_t dcofsel)\r
-{\r
-    assert(\r
-        (dcofsel == CS_DCOFSEL_0)||\r
-        (dcofsel == CS_DCOFSEL_1)||\r
-        (dcofsel == CS_DCOFSEL_2)||\r
-        (dcofsel == CS_DCOFSEL_3)||\r
-        (dcofsel == CS_DCOFSEL_4)||\r
-        (dcofsel == CS_DCOFSEL_5)||\r
-        (dcofsel == CS_DCOFSEL_6)\r
-        );\r
-\r
-    //Verify user has selected a valid DCO Frequency Range option\r
-    assert(\r
-        (dcorsel == CS_DCORSEL_0)||\r
-        (dcorsel == CS_DCORSEL_1));\r
-\r
-    //Unlock CS control register\r
-    HWREG16(CS_BASE + OFS_CSCTL0) = CSKEY;\r
-\r
-    // Set user's frequency selection for DCO\r
-    HWREG16(CS_BASE + OFS_CSCTL1) = (dcorsel + dcofsel);\r
-\r
-    // Lock CS control register\r
-    HWREG8(CS_BASE + OFS_CSCTL0_H) = 0x00;\r
-}\r
-\r
-#endif\r
-//*****************************************************************************\r
-//\r
-//! Close the doxygen group for cs_api\r
-//! @}\r
-//\r
-//*****************************************************************************\r