mbed SDK library sources

Fork of mbed-src by mbed official

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Mon Jan 27 14:30:07 2014 +0000
Revision:
76:aeb1df146756
Child:
80:66393a7b209d
Synchronized with git revision a31ec9c5f7bcb5c8a1b2eced103f6a1dfa921abd

Full URL: https://github.com/mbedmicro/mbed/commit/a31ec9c5f7bcb5c8a1b2eced103f6a1dfa921abd/

Add NUCLEO_L152RE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 76:aeb1df146756 1 /**
mbed_official 76:aeb1df146756 2 ******************************************************************************
mbed_official 76:aeb1df146756 3 * @file misc.c
mbed_official 76:aeb1df146756 4 * @author MCD Application Team
mbed_official 76:aeb1df146756 5 * @version V1.2.0
mbed_official 76:aeb1df146756 6 * @date 22-February-2013
mbed_official 76:aeb1df146756 7 * @brief This file provides all the miscellaneous firmware functions (add-on
mbed_official 76:aeb1df146756 8 * to CMSIS functions).
mbed_official 76:aeb1df146756 9 ******************************************************************************
mbed_official 76:aeb1df146756 10 * @attention
mbed_official 76:aeb1df146756 11 *
mbed_official 76:aeb1df146756 12 * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
mbed_official 76:aeb1df146756 13 *
mbed_official 76:aeb1df146756 14 * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
mbed_official 76:aeb1df146756 15 * You may not use this file except in compliance with the License.
mbed_official 76:aeb1df146756 16 * You may obtain a copy of the License at:
mbed_official 76:aeb1df146756 17 *
mbed_official 76:aeb1df146756 18 * http://www.st.com/software_license_agreement_liberty_v2
mbed_official 76:aeb1df146756 19 *
mbed_official 76:aeb1df146756 20 * Unless required by applicable law or agreed to in writing, software
mbed_official 76:aeb1df146756 21 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 76:aeb1df146756 22 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 76:aeb1df146756 23 * See the License for the specific language governing permissions and
mbed_official 76:aeb1df146756 24 * limitations under the License.
mbed_official 76:aeb1df146756 25 *
mbed_official 76:aeb1df146756 26 ******************************************************************************
mbed_official 76:aeb1df146756 27 */
mbed_official 76:aeb1df146756 28
mbed_official 76:aeb1df146756 29 /* Includes ------------------------------------------------------------------*/
mbed_official 76:aeb1df146756 30 #include "misc.h"
mbed_official 76:aeb1df146756 31
mbed_official 76:aeb1df146756 32 /** @addtogroup STM32L1xx_StdPeriph_Driver
mbed_official 76:aeb1df146756 33 * @{
mbed_official 76:aeb1df146756 34 */
mbed_official 76:aeb1df146756 35
mbed_official 76:aeb1df146756 36 /** @defgroup MISC
mbed_official 76:aeb1df146756 37 * @brief MISC driver modules
mbed_official 76:aeb1df146756 38 * @{
mbed_official 76:aeb1df146756 39 */
mbed_official 76:aeb1df146756 40
mbed_official 76:aeb1df146756 41 /* Private typedef -----------------------------------------------------------*/
mbed_official 76:aeb1df146756 42 /* Private define ------------------------------------------------------------*/
mbed_official 76:aeb1df146756 43 #define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000)
mbed_official 76:aeb1df146756 44
mbed_official 76:aeb1df146756 45 /* Private macro -------------------------------------------------------------*/
mbed_official 76:aeb1df146756 46 /* Private variables ---------------------------------------------------------*/
mbed_official 76:aeb1df146756 47 /* Private function prototypes -----------------------------------------------*/
mbed_official 76:aeb1df146756 48 /* Private functions ---------------------------------------------------------*/
mbed_official 76:aeb1df146756 49
mbed_official 76:aeb1df146756 50 /** @defgroup MISC_Private_Functions
mbed_official 76:aeb1df146756 51 * @{
mbed_official 76:aeb1df146756 52 */
mbed_official 76:aeb1df146756 53 /**
mbed_official 76:aeb1df146756 54 *
mbed_official 76:aeb1df146756 55 @verbatim
mbed_official 76:aeb1df146756 56 *******************************************************************************
mbed_official 76:aeb1df146756 57 ##### Interrupts configuration functions #####
mbed_official 76:aeb1df146756 58 *******************************************************************************
mbed_official 76:aeb1df146756 59 [..] This section provide functions allowing to configure the NVIC interrupts
mbed_official 76:aeb1df146756 60 (IRQ).The Cortex-M3 exceptions are managed by CMSIS functions.
mbed_official 76:aeb1df146756 61 (#) Configure the NVIC Priority Grouping using NVIC_PriorityGroupConfig()
mbed_official 76:aeb1df146756 62 function according to the following table.
mbed_official 76:aeb1df146756 63 The table below gives the allowed values of the preemption priority
mbed_official 76:aeb1df146756 64 and subpriority according to the Priority Grouping configuration
mbed_official 76:aeb1df146756 65 performed by NVIC_PriorityGroupConfig function.
mbed_official 76:aeb1df146756 66 ============================================================================================================================
mbed_official 76:aeb1df146756 67 NVIC_PriorityGroup | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority | Description
mbed_official 76:aeb1df146756 68 ============================================================================================================================
mbed_official 76:aeb1df146756 69 NVIC_PriorityGroup_0 | 0 | 0-15 | 0 bits for preemption priority
mbed_official 76:aeb1df146756 70 | | | 4 bits for subpriority
mbed_official 76:aeb1df146756 71 ----------------------------------------------------------------------------------------------------------------------------
mbed_official 76:aeb1df146756 72 NVIC_PriorityGroup_1 | 0-1 | 0-7 | 1 bits for preemption priority
mbed_official 76:aeb1df146756 73 | | | 3 bits for subpriority
mbed_official 76:aeb1df146756 74 ----------------------------------------------------------------------------------------------------------------------------
mbed_official 76:aeb1df146756 75 NVIC_PriorityGroup_2 | 0-3 | 0-3 | 2 bits for preemption priority
mbed_official 76:aeb1df146756 76 | | | 2 bits for subpriority
mbed_official 76:aeb1df146756 77 ----------------------------------------------------------------------------------------------------------------------------
mbed_official 76:aeb1df146756 78 NVIC_PriorityGroup_3 | 0-7 | 0-1 | 3 bits for preemption priority
mbed_official 76:aeb1df146756 79 | | | 1 bits for subpriority
mbed_official 76:aeb1df146756 80 ----------------------------------------------------------------------------------------------------------------------------
mbed_official 76:aeb1df146756 81 NVIC_PriorityGroup_4 | 0-15 | 0 | 4 bits for preemption priority
mbed_official 76:aeb1df146756 82 | | | 0 bits for subpriority
mbed_official 76:aeb1df146756 83 ============================================================================================================================
mbed_official 76:aeb1df146756 84
mbed_official 76:aeb1df146756 85
mbed_official 76:aeb1df146756 86 (#) Enable and Configure the priority of the selected IRQ Channels.
mbed_official 76:aeb1df146756 87
mbed_official 76:aeb1df146756 88 -@- When the NVIC_PriorityGroup_0 is selected, it will no any nested interrupt,
mbed_official 76:aeb1df146756 89 the IRQ priority will be managed only by subpriority.
mbed_official 76:aeb1df146756 90 The sub-priority is only used to sort pending exception priorities,
mbed_official 76:aeb1df146756 91 and does not affect active exceptions.
mbed_official 76:aeb1df146756 92 -@- Lower priority values gives higher priority.
mbed_official 76:aeb1df146756 93 -@- Priority Order:
mbed_official 76:aeb1df146756 94 (#@) Lowest Preemption priority.
mbed_official 76:aeb1df146756 95 (#@) Lowest Subpriority.
mbed_official 76:aeb1df146756 96 (#@) Lowest hardware priority (IRQn position).
mbed_official 76:aeb1df146756 97
mbed_official 76:aeb1df146756 98 @endverbatim
mbed_official 76:aeb1df146756 99 */
mbed_official 76:aeb1df146756 100
mbed_official 76:aeb1df146756 101 /**
mbed_official 76:aeb1df146756 102 * @brief Configures the priority grouping: preemption priority and subpriority.
mbed_official 76:aeb1df146756 103 * @param NVIC_PriorityGroup: specifies the priority grouping bits length.
mbed_official 76:aeb1df146756 104 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 105 * @arg NVIC_PriorityGroup_0: 0 bits for preemption priority
mbed_official 76:aeb1df146756 106 * 4 bits for subpriority.
mbed_official 76:aeb1df146756 107 * @note When NVIC_PriorityGroup_0 is selected, it will no be any nested
mbed_official 76:aeb1df146756 108 * interrupt. This interrupts priority is managed only with subpriority.
mbed_official 76:aeb1df146756 109 * @arg NVIC_PriorityGroup_1: 1 bits for preemption priority.
mbed_official 76:aeb1df146756 110 * 3 bits for subpriority.
mbed_official 76:aeb1df146756 111 * @arg NVIC_PriorityGroup_2: 2 bits for preemption priority.
mbed_official 76:aeb1df146756 112 * 2 bits for subpriority.
mbed_official 76:aeb1df146756 113 * @arg NVIC_PriorityGroup_3: 3 bits for preemption priority.
mbed_official 76:aeb1df146756 114 * 1 bits for subpriority.
mbed_official 76:aeb1df146756 115 * @arg NVIC_PriorityGroup_4: 4 bits for preemption priority.
mbed_official 76:aeb1df146756 116 * 0 bits for subpriority.
mbed_official 76:aeb1df146756 117 * @retval None
mbed_official 76:aeb1df146756 118 */
mbed_official 76:aeb1df146756 119 void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
mbed_official 76:aeb1df146756 120 {
mbed_official 76:aeb1df146756 121 /* Check the parameters */
mbed_official 76:aeb1df146756 122 assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
mbed_official 76:aeb1df146756 123
mbed_official 76:aeb1df146756 124 /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
mbed_official 76:aeb1df146756 125 SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
mbed_official 76:aeb1df146756 126 }
mbed_official 76:aeb1df146756 127
mbed_official 76:aeb1df146756 128 /**
mbed_official 76:aeb1df146756 129 * @brief Initializes the NVIC peripheral according to the specified
mbed_official 76:aeb1df146756 130 * parameters in the NVIC_InitStruct.
mbed_official 76:aeb1df146756 131 * @note To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()
mbed_official 76:aeb1df146756 132 * function should be called before.
mbed_official 76:aeb1df146756 133 * @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains
mbed_official 76:aeb1df146756 134 * the configuration information for the specified NVIC peripheral.
mbed_official 76:aeb1df146756 135 * @retval None
mbed_official 76:aeb1df146756 136 */
mbed_official 76:aeb1df146756 137 void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
mbed_official 76:aeb1df146756 138 {
mbed_official 76:aeb1df146756 139 uint8_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
mbed_official 76:aeb1df146756 140
mbed_official 76:aeb1df146756 141 /* Check the parameters */
mbed_official 76:aeb1df146756 142 assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
mbed_official 76:aeb1df146756 143 assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
mbed_official 76:aeb1df146756 144 assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
mbed_official 76:aeb1df146756 145
mbed_official 76:aeb1df146756 146 if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
mbed_official 76:aeb1df146756 147 {
mbed_official 76:aeb1df146756 148 /* Compute the Corresponding IRQ Priority --------------------------------*/
mbed_official 76:aeb1df146756 149 tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
mbed_official 76:aeb1df146756 150 tmppre = (0x4 - tmppriority);
mbed_official 76:aeb1df146756 151 tmpsub = tmpsub >> tmppriority;
mbed_official 76:aeb1df146756 152
mbed_official 76:aeb1df146756 153 tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
mbed_official 76:aeb1df146756 154 tmppriority |= (uint8_t)(NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub);
mbed_official 76:aeb1df146756 155 tmppriority = tmppriority << 0x04;
mbed_official 76:aeb1df146756 156
mbed_official 76:aeb1df146756 157 NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
mbed_official 76:aeb1df146756 158
mbed_official 76:aeb1df146756 159 /* Enable the Selected IRQ Channels --------------------------------------*/
mbed_official 76:aeb1df146756 160 NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
mbed_official 76:aeb1df146756 161 (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
mbed_official 76:aeb1df146756 162 }
mbed_official 76:aeb1df146756 163 else
mbed_official 76:aeb1df146756 164 {
mbed_official 76:aeb1df146756 165 /* Disable the Selected IRQ Channels -------------------------------------*/
mbed_official 76:aeb1df146756 166 NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
mbed_official 76:aeb1df146756 167 (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
mbed_official 76:aeb1df146756 168 }
mbed_official 76:aeb1df146756 169 }
mbed_official 76:aeb1df146756 170
mbed_official 76:aeb1df146756 171 /**
mbed_official 76:aeb1df146756 172 * @brief Sets the vector table location and Offset.
mbed_official 76:aeb1df146756 173 * @param NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory.
mbed_official 76:aeb1df146756 174 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 175 * @arg NVIC_VectTab_RAM: Vector Table in internal SRAM.
mbed_official 76:aeb1df146756 176 * @arg NVIC_VectTab_FLASH: Vector Table in internal FLASH.
mbed_official 76:aeb1df146756 177 * @param Offset: Vector Table base offset field. This value must be a multiple of 0x200.
mbed_official 76:aeb1df146756 178 * @retval None
mbed_official 76:aeb1df146756 179 */
mbed_official 76:aeb1df146756 180 void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
mbed_official 76:aeb1df146756 181 {
mbed_official 76:aeb1df146756 182 /* Check the parameters */
mbed_official 76:aeb1df146756 183 assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
mbed_official 76:aeb1df146756 184 assert_param(IS_NVIC_OFFSET(Offset));
mbed_official 76:aeb1df146756 185
mbed_official 76:aeb1df146756 186 SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
mbed_official 76:aeb1df146756 187 }
mbed_official 76:aeb1df146756 188
mbed_official 76:aeb1df146756 189 /**
mbed_official 76:aeb1df146756 190 * @brief Selects the condition for the system to enter low power mode.
mbed_official 76:aeb1df146756 191 * @param LowPowerMode: Specifies the new mode for the system to enter low power mode.
mbed_official 76:aeb1df146756 192 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 193 * @arg NVIC_LP_SEVONPEND: Low Power SEV on Pend.
mbed_official 76:aeb1df146756 194 * @arg NVIC_LP_SLEEPDEEP: Low Power DEEPSLEEP request.
mbed_official 76:aeb1df146756 195 * @arg NVIC_LP_SLEEPONEXIT: Low Power Sleep on Exit.
mbed_official 76:aeb1df146756 196 * @param NewState: new state of LP condition.
mbed_official 76:aeb1df146756 197 * This parameter can be: ENABLE or DISABLE.
mbed_official 76:aeb1df146756 198 * @retval None
mbed_official 76:aeb1df146756 199 */
mbed_official 76:aeb1df146756 200 void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState)
mbed_official 76:aeb1df146756 201 {
mbed_official 76:aeb1df146756 202 /* Check the parameters */
mbed_official 76:aeb1df146756 203 assert_param(IS_NVIC_LP(LowPowerMode));
mbed_official 76:aeb1df146756 204 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 76:aeb1df146756 205
mbed_official 76:aeb1df146756 206 if (NewState != DISABLE)
mbed_official 76:aeb1df146756 207 {
mbed_official 76:aeb1df146756 208 SCB->SCR |= LowPowerMode;
mbed_official 76:aeb1df146756 209 }
mbed_official 76:aeb1df146756 210 else
mbed_official 76:aeb1df146756 211 {
mbed_official 76:aeb1df146756 212 SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
mbed_official 76:aeb1df146756 213 }
mbed_official 76:aeb1df146756 214 }
mbed_official 76:aeb1df146756 215
mbed_official 76:aeb1df146756 216 /**
mbed_official 76:aeb1df146756 217 * @brief Configures the SysTick clock source.
mbed_official 76:aeb1df146756 218 * @param SysTick_CLKSource: specifies the SysTick clock source.
mbed_official 76:aeb1df146756 219 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 220 * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source.
mbed_official 76:aeb1df146756 221 * @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source.
mbed_official 76:aeb1df146756 222 * @retval None
mbed_official 76:aeb1df146756 223 */
mbed_official 76:aeb1df146756 224 void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
mbed_official 76:aeb1df146756 225 {
mbed_official 76:aeb1df146756 226 /* Check the parameters */
mbed_official 76:aeb1df146756 227 assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
mbed_official 76:aeb1df146756 228
mbed_official 76:aeb1df146756 229 if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
mbed_official 76:aeb1df146756 230 {
mbed_official 76:aeb1df146756 231 SysTick->CTRL |= SysTick_CLKSource_HCLK;
mbed_official 76:aeb1df146756 232 }
mbed_official 76:aeb1df146756 233 else
mbed_official 76:aeb1df146756 234 {
mbed_official 76:aeb1df146756 235 SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
mbed_official 76:aeb1df146756 236 }
mbed_official 76:aeb1df146756 237 }
mbed_official 76:aeb1df146756 238
mbed_official 76:aeb1df146756 239 /**
mbed_official 76:aeb1df146756 240 * @}
mbed_official 76:aeb1df146756 241 */
mbed_official 76:aeb1df146756 242
mbed_official 76:aeb1df146756 243 /**
mbed_official 76:aeb1df146756 244 * @}
mbed_official 76:aeb1df146756 245 */
mbed_official 76:aeb1df146756 246
mbed_official 76:aeb1df146756 247 /**
mbed_official 76:aeb1df146756 248 * @}
mbed_official 76:aeb1df146756 249 */
mbed_official 76:aeb1df146756 250
mbed_official 76:aeb1df146756 251 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/