SAMV71 Xplained Ultra Software Package 1.5

supc.c

00001 /* ---------------------------------------------------------------------------- */
00002 /*                  Atmel Microcontroller Software Support                      */
00003 /*                       SAM Software Package License                           */
00004 /* ---------------------------------------------------------------------------- */
00005 /* Copyright (c) 2015, Atmel Corporation                                        */
00006 /*                                                                              */
00007 /* All rights reserved.                                                         */
00008 /*                                                                              */
00009 /* Redistribution and use in source and binary forms, with or without           */
00010 /* modification, are permitted provided that the following condition is met:    */
00011 /*                                                                              */
00012 /* - Redistributions of source code must retain the above copyright notice,     */
00013 /* this list of conditions and the disclaimer below.                            */
00014 /*                                                                              */
00015 /* Atmel's name may not be used to endorse or promote products derived from     */
00016 /* this software without specific prior written permission.                     */
00017 /*                                                                              */
00018 /* DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR   */
00019 /* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */
00020 /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE   */
00021 /* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,      */
00022 /* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT */
00023 /* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,  */
00024 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    */
00025 /* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING         */
00026 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */
00027 /* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                           */
00028 /* ---------------------------------------------------------------------------- */
00029 
00030 /*----------------------------------------------------------------------------
00031  *        Headers
00032  *----------------------------------------------------------------------------*/
00033 
00034 #include "chip.h"
00035 
00036 #include <assert.h>
00037 
00038 /*----------------------------------------------------------------------------
00039  *        Local functions
00040  *----------------------------------------------------------------------------*/
00041 
00042 /**
00043  * \brief Select external 32K Crystal.
00044  *
00045  */
00046 
00047 void SUPC_SelectExtCrystal32K(void)
00048 {
00049     PMC_EnableXT32KFME();
00050 
00051     /* Select XTAL 32k instead of internal slow RC 32k for slow clock */
00052     if ((SUPC->SUPC_SR & SUPC_SR_OSCSEL) != SUPC_SR_OSCSEL_CRYST) {
00053         SUPC->SUPC_CR = SUPC_CR_KEY_PASSWD | SUPC_CR_XTALSEL_CRYSTAL_SEL;
00054 
00055         while (!(SUPC->SUPC_SR & SUPC_SR_OSCSEL));
00056     }
00057 }
00058 
00059 /**
00060  * \brief VROFF asserts the vddcore_nreset and stops the voltage regulator
00061  *
00062  */
00063 void SUPC_DisableVoltageReg(void)
00064 {
00065     SUPC->SUPC_CR |= SUPC_CR_KEY_PASSWD | SUPC_CR_VROFF;
00066 }
00067 
00068 /**
00069  * \brief Configures supply monitor
00070  *
00071  */
00072 void SUPC_ConfigSupplyMonitor(uint32_t Config)
00073 {
00074     SUPC->SUPC_SMMR = Config;
00075 }
00076 
00077 
00078 /**
00079  * \brief Disables supply monitor
00080  *
00081  */
00082 void SUPC_DisableSupplyMonitor(void)
00083 {
00084     SUPC->SUPC_SMMR = SUPC_SMMR_SMSMPL_SMD;
00085 }
00086 
00087 
00088 /**
00089  * \brief Enables/Disables Brownout detector
00090  *
00091  */
00092 void SUPC_BrownoutDetectEnable(uint8_t enable)
00093 {
00094     if (enable)
00095         SUPC->SUPC_MR = (SUPC_MR_BODDIS_ENABLE | SUPC_MR_KEY_PASSWD);
00096     else
00097         SUPC->SUPC_MR = (SUPC_MR_BODDIS_DISABLE | SUPC_MR_KEY_PASSWD);
00098 }
00099 
00100 /**
00101  * \brief Enables Brownout Detector Reset
00102  *
00103  */
00104 void SUPC_BrownoutResetEnable(void)
00105 {
00106     SUPC->SUPC_MR = (SUPC_MR_BODRSTEN_ENABLE | SUPC_MR_KEY_PASSWD);
00107 }
00108 
00109 
00110 /**
00111  * \brief Enables/Disables Sram in backup mode
00112  *
00113  */
00114 void SUPC_SramBackupMode(uint8_t enable)
00115 {
00116     if (enable)
00117         SUPC->SUPC_MR = ((1 << 17) | SUPC_MR_KEY_PASSWD);
00118     else
00119         SUPC->SUPC_MR = ((0 << 17) | SUPC_MR_KEY_PASSWD);
00120 }
00121 
00122 /**
00123  * \brief Bypass external 32.768KHz oscillator
00124  *
00125  */
00126 void SUPC_BypassXtal32KOsc(void)
00127 {
00128     SUPC->SUPC_MR = (SUPC_MR_OSCBYPASS_BYPASS | SUPC_MR_KEY_PASSWD);
00129 }
00130 
00131 
00132 /**
00133  * \brief Enables/Disables Wakeup mode
00134  *
00135  */
00136 void SUPC_EnablesWakeupMode(uint32_t Regs, uint8_t enable)
00137 {
00138     if (enable)
00139         SUPC->SUPC_WUMR |= Regs;
00140     else
00141         SUPC->SUPC_WUMR &= ~(uint32_t)Regs;
00142 }
00143 
00144 /**
00145  * \brief Configure Wakeup denounce period
00146  *
00147  */
00148 void SUPC_SetWakeupDebounce(uint8_t period)
00149 {
00150     SUPC->SUPC_WUMR |= ((period << SUPC_WUMR_WKUPDBC_Pos) & SUPC_WUMR_WKUPDBC_Msk);
00151 }
00152 
00153 /**
00154  * \brief Configure Low-power denounce period
00155  *
00156  */
00157 void SUPC_SetLowPowerDebounce(uint8_t period)
00158 {
00159     SUPC->SUPC_WUMR |= ((period << SUPC_WUMR_LPDBC_Pos) & SUPC_WUMR_LPDBC_Msk);
00160 }
00161 
00162 
00163 /**
00164  * \brief Enables/Disables Wakeup Inputs
00165  *
00166  */
00167 void SUPC_EnablesWakeupInput(uint32_t Input, uint8_t enable)
00168 {
00169     if (enable)
00170         SUPC->SUPC_WUIR |= Input;
00171     else
00172         SUPC->SUPC_WUIR &= ~(uint32_t)Input;
00173 }
00174 
00175 /**
00176  * \brief Checks if Crystal oscillator is selected as a slow clock
00177  */
00178 
00179 uint8_t SUPC_IsSlowClkExtCrystal32K(void)
00180 {
00181     return ((SUPC->SUPC_SR & SUPC_SR_OSCSEL) >> 7);
00182 }
00183 
00184 /**
00185  * \brief Checks if Crystal oscillator is selected as a slow clock
00186  */
00187 
00188 uint8_t SUPC_Read_Status(uint32_t status)
00189 {
00190     return (SUPC->SUPC_SR & status);
00191 }
00192 
00193 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines