mbed library sources

Dependents:   frdm_kl05z_gpio_test

Fork of mbed-src by mbed official

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****/