added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
mbed_official
Date:
Fri Jan 15 07:45:16 2016 +0000
Revision:
50:a417edff4437
Parent:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
Synchronized with git revision 6010f32619bfcbb01cc73747d4ff9040863482d9

Full URL: https://github.com/mbedmicro/mbed/commit/6010f32619bfcbb01cc73747d4ff9040863482d9/

Remove doubling of buffer size in realiseEndpoint()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 2 * @file em_rmu.c
bogdanm 0:9b334a45a8ff 3 * @brief Reset Management Unit (RMU) peripheral module peripheral API
bogdanm 0:9b334a45a8ff 4 *
mbed_official 50:a417edff4437 5 * @version 4.2.1
bogdanm 0:9b334a45a8ff 6 *******************************************************************************
bogdanm 0:9b334a45a8ff 7 * @section License
mbed_official 50:a417edff4437 8 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
bogdanm 0:9b334a45a8ff 9 *******************************************************************************
bogdanm 0:9b334a45a8ff 10 *
bogdanm 0:9b334a45a8ff 11 * Permission is granted to anyone to use this software for any purpose,
bogdanm 0:9b334a45a8ff 12 * including commercial applications, and to alter it and redistribute it
bogdanm 0:9b334a45a8ff 13 * freely, subject to the following restrictions:
bogdanm 0:9b334a45a8ff 14 *
bogdanm 0:9b334a45a8ff 15 * 1. The origin of this software must not be misrepresented; you must not
bogdanm 0:9b334a45a8ff 16 * claim that you wrote the original software.
bogdanm 0:9b334a45a8ff 17 * 2. Altered source versions must be plainly marked as such, and must not be
bogdanm 0:9b334a45a8ff 18 * misrepresented as being the original software.
bogdanm 0:9b334a45a8ff 19 * 3. This notice may not be removed or altered from any source distribution.
bogdanm 0:9b334a45a8ff 20 *
bogdanm 0:9b334a45a8ff 21 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
bogdanm 0:9b334a45a8ff 22 * obligation to support this Software. Silicon Labs is providing the
bogdanm 0:9b334a45a8ff 23 * Software "AS IS", with no express or implied warranties of any kind,
bogdanm 0:9b334a45a8ff 24 * including, but not limited to, any implied warranties of merchantability
bogdanm 0:9b334a45a8ff 25 * or fitness for any particular purpose or warranties against infringement
bogdanm 0:9b334a45a8ff 26 * of any proprietary rights of a third party.
bogdanm 0:9b334a45a8ff 27 *
bogdanm 0:9b334a45a8ff 28 * Silicon Labs will not be liable for any consequential, incidental, or
bogdanm 0:9b334a45a8ff 29 * special damages, or any other relief, or for any claim by any third party,
bogdanm 0:9b334a45a8ff 30 * arising from your use of this Software.
bogdanm 0:9b334a45a8ff 31 *
bogdanm 0:9b334a45a8ff 32 ******************************************************************************/
bogdanm 0:9b334a45a8ff 33
bogdanm 0:9b334a45a8ff 34 #include "em_rmu.h"
bogdanm 0:9b334a45a8ff 35 #if defined(RMU_COUNT) && (RMU_COUNT > 0)
bogdanm 0:9b334a45a8ff 36
mbed_official 50:a417edff4437 37 #include "em_common.h"
bogdanm 0:9b334a45a8ff 38 #include "em_emu.h"
mbed_official 50:a417edff4437 39 #include "em_bus.h"
bogdanm 0:9b334a45a8ff 40
bogdanm 0:9b334a45a8ff 41 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 42 * @addtogroup EM_Library
bogdanm 0:9b334a45a8ff 43 * @{
bogdanm 0:9b334a45a8ff 44 ******************************************************************************/
bogdanm 0:9b334a45a8ff 45
bogdanm 0:9b334a45a8ff 46 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 47 * @addtogroup RMU
bogdanm 0:9b334a45a8ff 48 * @brief Reset Management Unit (RMU) Peripheral API
bogdanm 0:9b334a45a8ff 49 * @{
bogdanm 0:9b334a45a8ff 50 ******************************************************************************/
bogdanm 0:9b334a45a8ff 51
bogdanm 0:9b334a45a8ff 52 /*******************************************************************************
bogdanm 0:9b334a45a8ff 53 ***************************** DEFINES *********************************
bogdanm 0:9b334a45a8ff 54 ******************************************************************************/
bogdanm 0:9b334a45a8ff 55
bogdanm 0:9b334a45a8ff 56 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */
bogdanm 0:9b334a45a8ff 57
bogdanm 0:9b334a45a8ff 58 /* Reset cause "don't care" definitions.
bogdanm 0:9b334a45a8ff 59 1's mark the bits that must be zero, zeros are "don't cares". */
mbed_official 50:a417edff4437 60 #if (_RMU_RSTCAUSE_MASK == 0x0000007FUL)
bogdanm 0:9b334a45a8ff 61 #define RMU_RSTCAUSE_PORST_XMASK (0x00000000) /**0b0000000000000000 < Power On Reset */
bogdanm 0:9b334a45a8ff 62 #define RMU_RSTCAUSE_BODUNREGRST_XMASK (0x00000081) /**0b0000000010000001 < Brown Out Detector Unregulated Domain Reset */
bogdanm 0:9b334a45a8ff 63 #define RMU_RSTCAUSE_BODREGRST_XMASK (0x00000091) /**0b0000000010010001 < Brown Out Detector Regulated Domain Reset */
bogdanm 0:9b334a45a8ff 64 #define RMU_RSTCAUSE_EXTRST_XMASK (0x00000001) /**0b0000000000000001 < External Pin Reset */
bogdanm 0:9b334a45a8ff 65 #define RMU_RSTCAUSE_WDOGRST_XMASK (0x00000003) /**0b0000000000000011 < Watchdog Reset */
bogdanm 0:9b334a45a8ff 66 #define RMU_RSTCAUSE_LOCKUPRST_XMASK (0x0000EFDF) /**0b1110111111011111 < LOCKUP Reset */
bogdanm 0:9b334a45a8ff 67 #define RMU_RSTCAUSE_SYSREQRST_XMASK (0x0000EF9F) /**0b1110111110011111 < System Request Reset */
bogdanm 0:9b334a45a8ff 68 #define NUM_RSTCAUSES (7)
mbed_official 50:a417edff4437 69
mbed_official 50:a417edff4437 70 #elif (_RMU_RSTCAUSE_MASK == 0x000007FFUL)
mbed_official 50:a417edff4437 71 #define RMU_RSTCAUSE_PORST_XMASK (0x00000000) /**0b0000000000000000 < Power On Reset */
mbed_official 50:a417edff4437 72 #define RMU_RSTCAUSE_BODUNREGRST_XMASK (0x00000081) /**0b0000000010000001 < Brown Out Detector Unregulated Domain Reset */
mbed_official 50:a417edff4437 73 #define RMU_RSTCAUSE_BODREGRST_XMASK (0x00000091) /**0b0000000010010001 < Brown Out Detector Regulated Domain Reset */
mbed_official 50:a417edff4437 74 #define RMU_RSTCAUSE_EXTRST_XMASK (0x00000001) /**0b0000000000000001 < External Pin Reset */
mbed_official 50:a417edff4437 75 #define RMU_RSTCAUSE_WDOGRST_XMASK (0x00000003) /**0b0000000000000011 < Watchdog Reset */
mbed_official 50:a417edff4437 76 #define RMU_RSTCAUSE_LOCKUPRST_XMASK (0x0000EFDF) /**0b1110111111011111 < LOCKUP Reset */
mbed_official 50:a417edff4437 77 #define RMU_RSTCAUSE_SYSREQRST_XMASK (0x0000EF9F) /**0b1110111110011111 < System Request Reset */
bogdanm 0:9b334a45a8ff 78 #define RMU_RSTCAUSE_EM4RST_XMASK (0x00000719) /**0b0000011100011001 < EM4 Reset */
bogdanm 0:9b334a45a8ff 79 #define RMU_RSTCAUSE_EM4WURST_XMASK (0x00000619) /**0b0000011000011001 < EM4 Wake-up Reset */
bogdanm 0:9b334a45a8ff 80 #define RMU_RSTCAUSE_BODAVDD0_XMASK (0x0000041F) /**0b0000010000011111 < AVDD0 Bod Reset. */
bogdanm 0:9b334a45a8ff 81 #define RMU_RSTCAUSE_BODAVDD1_XMASK (0x0000021F) /**0b0000001000011111 < AVDD1 Bod Reset. */
bogdanm 0:9b334a45a8ff 82 #define NUM_RSTCAUSES (11)
mbed_official 50:a417edff4437 83
mbed_official 50:a417edff4437 84 #elif (_RMU_RSTCAUSE_MASK == 0x0000FFFFUL)
mbed_official 50:a417edff4437 85 #define RMU_RSTCAUSE_PORST_XMASK (0x00000000) /**0b0000000000000000 < Power On Reset */
mbed_official 50:a417edff4437 86 #define RMU_RSTCAUSE_BODUNREGRST_XMASK (0x00000081) /**0b0000000010000001 < Brown Out Detector Unregulated Domain Reset */
mbed_official 50:a417edff4437 87 #define RMU_RSTCAUSE_BODREGRST_XMASK (0x00000091) /**0b0000000010010001 < Brown Out Detector Regulated Domain Reset */
mbed_official 50:a417edff4437 88 #define RMU_RSTCAUSE_EXTRST_XMASK (0x00000001) /**0b0000000000000001 < External Pin Reset */
mbed_official 50:a417edff4437 89 #define RMU_RSTCAUSE_WDOGRST_XMASK (0x00000003) /**0b0000000000000011 < Watchdog Reset */
mbed_official 50:a417edff4437 90 #define RMU_RSTCAUSE_LOCKUPRST_XMASK (0x0000EFDF) /**0b1110111111011111 < LOCKUP Reset */
mbed_official 50:a417edff4437 91 #define RMU_RSTCAUSE_SYSREQRST_XMASK (0x0000EF9F) /**0b1110111110011111 < System Request Reset */
mbed_official 50:a417edff4437 92 #define RMU_RSTCAUSE_EM4RST_XMASK (0x00000719) /**0b0000011100011001 < EM4 Reset */
mbed_official 50:a417edff4437 93 #define RMU_RSTCAUSE_EM4WURST_XMASK (0x00000619) /**0b0000011000011001 < EM4 Wake-up Reset */
mbed_official 50:a417edff4437 94 #define RMU_RSTCAUSE_BODAVDD0_XMASK (0x0000041F) /**0b0000010000011111 < AVDD0 Bod Reset */
mbed_official 50:a417edff4437 95 #define RMU_RSTCAUSE_BODAVDD1_XMASK (0x0000021F) /**0b0000001000011111 < AVDD1 Bod Reset */
bogdanm 0:9b334a45a8ff 96 #define RMU_RSTCAUSE_BUBODVDDDREG_XMASK (0x00000001) /**0b0000000000000001 < Backup Brown Out Detector, VDD_DREG */
bogdanm 0:9b334a45a8ff 97 #define RMU_RSTCAUSE_BUBODBUVIN_XMASK (0x00000001) /**0b0000000000000001 < Backup Brown Out Detector, BU_VIN */
bogdanm 0:9b334a45a8ff 98 #define RMU_RSTCAUSE_BUBODUNREG_XMASK (0x00000001) /**0b0000000000000001 < Backup Brown Out Detector Unregulated Domain */
bogdanm 0:9b334a45a8ff 99 #define RMU_RSTCAUSE_BUBODREG_XMASK (0x00000001) /**0b0000000000000001 < Backup Brown Out Detector Regulated Domain */
bogdanm 0:9b334a45a8ff 100 #define RMU_RSTCAUSE_BUMODERST_XMASK (0x00000001) /**0b0000000000000001 < Backup mode reset */
bogdanm 0:9b334a45a8ff 101 #define NUM_RSTCAUSES (16)
mbed_official 50:a417edff4437 102
mbed_official 50:a417edff4437 103 #elif ((_RMU_RSTCAUSE_MASK & 0x0FFFFFFF) == 0x00010F1DUL)
mbed_official 50:a417edff4437 104 #define RMU_RSTCAUSE_PORST_XMASK (0x00000000) /**0b0000000000000000 < Power On Reset */
mbed_official 50:a417edff4437 105 #define RMU_RSTCAUSE_BODAVDD_XMASK (0x00000001) /**0b0000000000000001 < AVDD Bod Reset */
mbed_official 50:a417edff4437 106 #define RMU_RSTCAUSE_BODDVDD_XMASK (0x00000003) /**0b0000000000000011 < DVDD Bod Reset */
mbed_official 50:a417edff4437 107 #define RMU_RSTCAUSE_BODREGRST_XMASK (0x0000000F) /**0b0000000000001111 < Brown Out Detector Regulated Domain Reset */
mbed_official 50:a417edff4437 108 #define RMU_RSTCAUSE_EXTRST_XMASK (0x0000000F) /**0b0000000000001111 < External Pin Reset */
mbed_official 50:a417edff4437 109 #define RMU_RSTCAUSE_LOCKUPRST_XMASK (0x0000001F) /**0b0000000000011111 < LOCKUP Reset */
mbed_official 50:a417edff4437 110 #define RMU_RSTCAUSE_SYSREQRST_XMASK (0x0000001F) /**0b0000000000011111 < System Request Reset */
mbed_official 50:a417edff4437 111 #define RMU_RSTCAUSE_WDOGRST_XMASK (0x0000001F) /**0b0000000000011111 < Watchdog Reset */
mbed_official 50:a417edff4437 112 #define RMU_RSTCAUSE_EM4RST_XMASK (0x00000003) /**0b0000000000000011 < EM4H/S Reset */
mbed_official 50:a417edff4437 113 #define NUM_RSTCAUSES (9)
mbed_official 50:a417edff4437 114
mbed_official 50:a417edff4437 115 #else
mbed_official 50:a417edff4437 116 #warning "RMU_RSTCAUSE XMASKs are not defined for this family."
bogdanm 0:9b334a45a8ff 117 #endif
bogdanm 0:9b334a45a8ff 118
bogdanm 0:9b334a45a8ff 119 /*******************************************************************************
bogdanm 0:9b334a45a8ff 120 ******************************* STRUCTS ***********************************
bogdanm 0:9b334a45a8ff 121 ******************************************************************************/
bogdanm 0:9b334a45a8ff 122
bogdanm 0:9b334a45a8ff 123 /** Reset cause mask type. */
bogdanm 0:9b334a45a8ff 124 typedef struct
bogdanm 0:9b334a45a8ff 125 {
mbed_official 50:a417edff4437 126 uint32_t resetCauseMask;
mbed_official 50:a417edff4437 127 uint32_t dontCareMask;
bogdanm 0:9b334a45a8ff 128 } RMU_ResetCauseMasks_Typedef;
bogdanm 0:9b334a45a8ff 129
bogdanm 0:9b334a45a8ff 130
bogdanm 0:9b334a45a8ff 131 /*******************************************************************************
bogdanm 0:9b334a45a8ff 132 ******************************* TYPEDEFS **********************************
bogdanm 0:9b334a45a8ff 133 ******************************************************************************/
bogdanm 0:9b334a45a8ff 134
bogdanm 0:9b334a45a8ff 135 /** Reset cause mask table. */
bogdanm 0:9b334a45a8ff 136 static const RMU_ResetCauseMasks_Typedef resetCauseMasks[NUM_RSTCAUSES] =
bogdanm 0:9b334a45a8ff 137 {
bogdanm 0:9b334a45a8ff 138 { RMU_RSTCAUSE_PORST, RMU_RSTCAUSE_PORST_XMASK },
mbed_official 50:a417edff4437 139 #if defined(RMU_RSTCAUSE_BODUNREGRST)
bogdanm 0:9b334a45a8ff 140 { RMU_RSTCAUSE_BODUNREGRST, RMU_RSTCAUSE_BODUNREGRST_XMASK },
mbed_official 50:a417edff4437 141 #endif
mbed_official 50:a417edff4437 142 #if defined(RMU_RSTCAUSE_BODREGRST)
bogdanm 0:9b334a45a8ff 143 { RMU_RSTCAUSE_BODREGRST, RMU_RSTCAUSE_BODREGRST_XMASK },
mbed_official 50:a417edff4437 144 #endif
mbed_official 50:a417edff4437 145 #if defined(RMU_RSTCAUSE_AVDDBOD)
mbed_official 50:a417edff4437 146 { RMU_RSTCAUSE_AVDDBOD, RMU_RSTCAUSE_BODAVDD_XMASK },
mbed_official 50:a417edff4437 147 #endif
mbed_official 50:a417edff4437 148 #if defined(RMU_RSTCAUSE_DVDDBOD)
mbed_official 50:a417edff4437 149 { RMU_RSTCAUSE_DVDDBOD, RMU_RSTCAUSE_BODDVDD_XMASK },
mbed_official 50:a417edff4437 150 #endif
mbed_official 50:a417edff4437 151 #if defined(RMU_RSTCAUSE_DECBOD)
mbed_official 50:a417edff4437 152 { RMU_RSTCAUSE_DECBOD, RMU_RSTCAUSE_BODREGRST_XMASK },
mbed_official 50:a417edff4437 153 #endif
bogdanm 0:9b334a45a8ff 154 { RMU_RSTCAUSE_EXTRST, RMU_RSTCAUSE_EXTRST_XMASK },
bogdanm 0:9b334a45a8ff 155 { RMU_RSTCAUSE_WDOGRST, RMU_RSTCAUSE_WDOGRST_XMASK },
bogdanm 0:9b334a45a8ff 156 { RMU_RSTCAUSE_LOCKUPRST, RMU_RSTCAUSE_LOCKUPRST_XMASK },
bogdanm 0:9b334a45a8ff 157 { RMU_RSTCAUSE_SYSREQRST, RMU_RSTCAUSE_SYSREQRST_XMASK },
mbed_official 50:a417edff4437 158 #if defined(RMU_RSTCAUSE_EM4RST)
bogdanm 0:9b334a45a8ff 159 { RMU_RSTCAUSE_EM4RST, RMU_RSTCAUSE_EM4RST_XMASK },
mbed_official 50:a417edff4437 160 #endif
mbed_official 50:a417edff4437 161 #if defined(RMU_RSTCAUSE_EM4WURST)
bogdanm 0:9b334a45a8ff 162 { RMU_RSTCAUSE_EM4WURST, RMU_RSTCAUSE_EM4WURST_XMASK },
mbed_official 50:a417edff4437 163 #endif
mbed_official 50:a417edff4437 164 #if defined(RMU_RSTCAUSE_BODAVDD0)
bogdanm 0:9b334a45a8ff 165 { RMU_RSTCAUSE_BODAVDD0, RMU_RSTCAUSE_BODAVDD0_XMASK },
mbed_official 50:a417edff4437 166 #endif
mbed_official 50:a417edff4437 167 #if defined(RMU_RSTCAUSE_BODAVDD1)
bogdanm 0:9b334a45a8ff 168 { RMU_RSTCAUSE_BODAVDD1, RMU_RSTCAUSE_BODAVDD1_XMASK },
bogdanm 0:9b334a45a8ff 169 #endif
mbed_official 50:a417edff4437 170 #if defined(BU_PRESENT)
bogdanm 0:9b334a45a8ff 171 { RMU_RSTCAUSE_BUBODVDDDREG, RMU_RSTCAUSE_BUBODVDDDREG_XMASK },
bogdanm 0:9b334a45a8ff 172 { RMU_RSTCAUSE_BUBODBUVIN, RMU_RSTCAUSE_BUBODBUVIN_XMASK },
bogdanm 0:9b334a45a8ff 173 { RMU_RSTCAUSE_BUBODUNREG, RMU_RSTCAUSE_BUBODUNREG_XMASK },
bogdanm 0:9b334a45a8ff 174 { RMU_RSTCAUSE_BUBODREG, RMU_RSTCAUSE_BUBODREG_XMASK },
bogdanm 0:9b334a45a8ff 175 { RMU_RSTCAUSE_BUMODERST, RMU_RSTCAUSE_BUMODERST_XMASK },
bogdanm 0:9b334a45a8ff 176 #endif
bogdanm 0:9b334a45a8ff 177 };
bogdanm 0:9b334a45a8ff 178
bogdanm 0:9b334a45a8ff 179
bogdanm 0:9b334a45a8ff 180 /*******************************************************************************
bogdanm 0:9b334a45a8ff 181 ******************************** TEST ********************************
bogdanm 0:9b334a45a8ff 182 ******************************************************************************/
mbed_official 50:a417edff4437 183 #if defined(EMLIB_REGRESSION_TEST)
bogdanm 0:9b334a45a8ff 184 /* Test variable that replaces the RSTCAUSE cause register when testing
bogdanm 0:9b334a45a8ff 185 the RMU_ResetCauseGet function. */
bogdanm 0:9b334a45a8ff 186 extern uint32_t rstCause;
bogdanm 0:9b334a45a8ff 187 #endif
bogdanm 0:9b334a45a8ff 188
bogdanm 0:9b334a45a8ff 189
bogdanm 0:9b334a45a8ff 190 /** @endcond */
bogdanm 0:9b334a45a8ff 191
bogdanm 0:9b334a45a8ff 192 /*******************************************************************************
bogdanm 0:9b334a45a8ff 193 ************************** GLOBAL FUNCTIONS *******************************
bogdanm 0:9b334a45a8ff 194 ******************************************************************************/
bogdanm 0:9b334a45a8ff 195
bogdanm 0:9b334a45a8ff 196 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 197 * @brief
bogdanm 0:9b334a45a8ff 198 * Disable/enable reset for various peripherals and signal sources
bogdanm 0:9b334a45a8ff 199 *
bogdanm 0:9b334a45a8ff 200 * @param[in] reset Reset types to enable/disable
bogdanm 0:9b334a45a8ff 201 *
mbed_official 50:a417edff4437 202 * @param[in] mode Reset mode
bogdanm 0:9b334a45a8ff 203 ******************************************************************************/
mbed_official 50:a417edff4437 204 void RMU_ResetControl(RMU_Reset_TypeDef reset, RMU_ResetMode_TypeDef mode)
bogdanm 0:9b334a45a8ff 205 {
mbed_official 50:a417edff4437 206 /* Note that the RMU supports bit-band access, but not peripheral bit-field set/clear */
mbed_official 50:a417edff4437 207 #if defined(_RMU_CTRL_PINRMODE_MASK)
mbed_official 50:a417edff4437 208 uint32_t val;
mbed_official 50:a417edff4437 209 #endif
mbed_official 50:a417edff4437 210 uint32_t shift;
mbed_official 50:a417edff4437 211
mbed_official 50:a417edff4437 212 shift = EFM32_CTZ((uint32_t)reset);
mbed_official 50:a417edff4437 213 #if defined(_RMU_CTRL_PINRMODE_MASK)
mbed_official 50:a417edff4437 214 val = (uint32_t)mode << shift;
mbed_official 50:a417edff4437 215 RMU->CTRL = (RMU->CTRL & ~reset) | val;
mbed_official 50:a417edff4437 216 #else
mbed_official 50:a417edff4437 217 BUS_RegBitWrite(&RMU->CTRL, (uint32_t)shift, mode ? 1 : 0);
mbed_official 50:a417edff4437 218 #endif
bogdanm 0:9b334a45a8ff 219 }
bogdanm 0:9b334a45a8ff 220
bogdanm 0:9b334a45a8ff 221
bogdanm 0:9b334a45a8ff 222 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 223 * @brief
bogdanm 0:9b334a45a8ff 224 * Clear the reset cause register.
bogdanm 0:9b334a45a8ff 225 *
bogdanm 0:9b334a45a8ff 226 * @details
bogdanm 0:9b334a45a8ff 227 * This function clears all the reset cause bits of the RSTCAUSE register.
bogdanm 0:9b334a45a8ff 228 * The reset cause bits must be cleared by SW before a new reset occurs,
bogdanm 0:9b334a45a8ff 229 * otherwise reset causes may accumulate. See @ref RMU_ResetCauseGet().
bogdanm 0:9b334a45a8ff 230 ******************************************************************************/
bogdanm 0:9b334a45a8ff 231 void RMU_ResetCauseClear(void)
bogdanm 0:9b334a45a8ff 232 {
bogdanm 0:9b334a45a8ff 233 RMU->CMD = RMU_CMD_RCCLR;
bogdanm 0:9b334a45a8ff 234
mbed_official 50:a417edff4437 235 #if defined(EMU_AUXCTRL_HRCCLR)
bogdanm 0:9b334a45a8ff 236 {
mbed_official 50:a417edff4437 237 uint32_t locked;
bogdanm 0:9b334a45a8ff 238
mbed_official 50:a417edff4437 239 /* Clear some reset causes not cleared with RMU CMD register */
mbed_official 50:a417edff4437 240 /* (If EMU registers locked, they must be unlocked first) */
mbed_official 50:a417edff4437 241 locked = EMU->LOCK & EMU_LOCK_LOCKKEY_LOCKED;
mbed_official 50:a417edff4437 242 if (locked)
mbed_official 50:a417edff4437 243 {
mbed_official 50:a417edff4437 244 EMU_Unlock();
mbed_official 50:a417edff4437 245 }
bogdanm 0:9b334a45a8ff 246
mbed_official 50:a417edff4437 247 BUS_RegBitWrite(&(EMU->AUXCTRL), _EMU_AUXCTRL_HRCCLR_SHIFT, 1);
mbed_official 50:a417edff4437 248 BUS_RegBitWrite(&(EMU->AUXCTRL), _EMU_AUXCTRL_HRCCLR_SHIFT, 0);
mbed_official 50:a417edff4437 249
mbed_official 50:a417edff4437 250 if (locked)
mbed_official 50:a417edff4437 251 {
mbed_official 50:a417edff4437 252 EMU_Lock();
mbed_official 50:a417edff4437 253 }
bogdanm 0:9b334a45a8ff 254 }
mbed_official 50:a417edff4437 255 #endif
bogdanm 0:9b334a45a8ff 256 }
bogdanm 0:9b334a45a8ff 257
bogdanm 0:9b334a45a8ff 258
bogdanm 0:9b334a45a8ff 259 /***************************************************************************//**
bogdanm 0:9b334a45a8ff 260 * @brief
bogdanm 0:9b334a45a8ff 261 * Get the cause of the last reset.
bogdanm 0:9b334a45a8ff 262 *
bogdanm 0:9b334a45a8ff 263 * @details
mbed_official 50:a417edff4437 264 * In order to be useful, the reset cause must be cleared by software before a new
bogdanm 0:9b334a45a8ff 265 * reset occurs, otherwise reset causes may accumulate. See @ref
bogdanm 0:9b334a45a8ff 266 * RMU_ResetCauseClear(). This function call will return the main cause for
bogdanm 0:9b334a45a8ff 267 * reset, which can be a bit mask (several causes), and clear away "noise".
bogdanm 0:9b334a45a8ff 268 *
bogdanm 0:9b334a45a8ff 269 * @return
mbed_official 50:a417edff4437 270 * Reset cause mask. Please consult the reference manual for description
mbed_official 50:a417edff4437 271 * of the reset cause mask.
bogdanm 0:9b334a45a8ff 272 ******************************************************************************/
bogdanm 0:9b334a45a8ff 273 uint32_t RMU_ResetCauseGet(void)
bogdanm 0:9b334a45a8ff 274 {
mbed_official 50:a417edff4437 275 #if !defined(EMLIB_REGRESSION_TEST)
mbed_official 50:a417edff4437 276 uint32_t rstCause = RMU->RSTCAUSE;
bogdanm 0:9b334a45a8ff 277 #endif
bogdanm 0:9b334a45a8ff 278 uint32_t validRstCause = 0;
mbed_official 50:a417edff4437 279 uint32_t i;
mbed_official 50:a417edff4437 280
mbed_official 50:a417edff4437 281 for (i = 0; i < NUM_RSTCAUSES; i++)
bogdanm 0:9b334a45a8ff 282 {
mbed_official 50:a417edff4437 283 /* Checks to see if rstCause matches a RSTCAUSE and is not excluded by the X-mask */
mbed_official 50:a417edff4437 284 if ((rstCause & resetCauseMasks[i].resetCauseMask)
mbed_official 50:a417edff4437 285 && !(rstCause & resetCauseMasks[i].dontCareMask))
bogdanm 0:9b334a45a8ff 286 {
mbed_official 50:a417edff4437 287 /* Adds the reset-cause to list of real reset-causes */
bogdanm 0:9b334a45a8ff 288 validRstCause |= resetCauseMasks[i].resetCauseMask;
bogdanm 0:9b334a45a8ff 289 }
bogdanm 0:9b334a45a8ff 290 }
bogdanm 0:9b334a45a8ff 291 return validRstCause;
bogdanm 0:9b334a45a8ff 292 }
bogdanm 0:9b334a45a8ff 293
bogdanm 0:9b334a45a8ff 294
bogdanm 0:9b334a45a8ff 295 /** @} (end addtogroup RMU) */
bogdanm 0:9b334a45a8ff 296 /** @} (end addtogroup EM_Library) */
bogdanm 0:9b334a45a8ff 297 #endif /* defined(RMU_COUNT) && (RMU_COUNT > 0) */