Committer:
Sergunb
Date:
Mon Sep 04 12:04:13 2017 +0000
Revision:
0:8f0d870509fe
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergunb 0:8f0d870509fe 1 /**
Sergunb 0:8f0d870509fe 2 ******************************************************************************
Sergunb 0:8f0d870509fe 3 * @file misc.c
Sergunb 0:8f0d870509fe 4 * @author MCD Application Team
Sergunb 0:8f0d870509fe 5 * @version V3.5.0
Sergunb 0:8f0d870509fe 6 * @date 11-March-2011
Sergunb 0:8f0d870509fe 7 * @brief This file provides all the miscellaneous firmware functions (add-on
Sergunb 0:8f0d870509fe 8 * to CMSIS functions).
Sergunb 0:8f0d870509fe 9 ******************************************************************************
Sergunb 0:8f0d870509fe 10 * @attention
Sergunb 0:8f0d870509fe 11 *
Sergunb 0:8f0d870509fe 12 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
Sergunb 0:8f0d870509fe 13 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
Sergunb 0:8f0d870509fe 14 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
Sergunb 0:8f0d870509fe 15 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
Sergunb 0:8f0d870509fe 16 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
Sergunb 0:8f0d870509fe 17 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
Sergunb 0:8f0d870509fe 18 *
Sergunb 0:8f0d870509fe 19 * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
Sergunb 0:8f0d870509fe 20 ******************************************************************************
Sergunb 0:8f0d870509fe 21 */
Sergunb 0:8f0d870509fe 22
Sergunb 0:8f0d870509fe 23 /* Includes ------------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 24 #include "misc.h"
Sergunb 0:8f0d870509fe 25
Sergunb 0:8f0d870509fe 26 /** @addtogroup STM32F10x_StdPeriph_Driver
Sergunb 0:8f0d870509fe 27 * @{
Sergunb 0:8f0d870509fe 28 */
Sergunb 0:8f0d870509fe 29
Sergunb 0:8f0d870509fe 30 /** @defgroup MISC
Sergunb 0:8f0d870509fe 31 * @brief MISC driver modules
Sergunb 0:8f0d870509fe 32 * @{
Sergunb 0:8f0d870509fe 33 */
Sergunb 0:8f0d870509fe 34
Sergunb 0:8f0d870509fe 35 /** @defgroup MISC_Private_TypesDefinitions
Sergunb 0:8f0d870509fe 36 * @{
Sergunb 0:8f0d870509fe 37 */
Sergunb 0:8f0d870509fe 38
Sergunb 0:8f0d870509fe 39 /**
Sergunb 0:8f0d870509fe 40 * @}
Sergunb 0:8f0d870509fe 41 */
Sergunb 0:8f0d870509fe 42
Sergunb 0:8f0d870509fe 43 /** @defgroup MISC_Private_Defines
Sergunb 0:8f0d870509fe 44 * @{
Sergunb 0:8f0d870509fe 45 */
Sergunb 0:8f0d870509fe 46
Sergunb 0:8f0d870509fe 47 #define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000)
Sergunb 0:8f0d870509fe 48 /**
Sergunb 0:8f0d870509fe 49 * @}
Sergunb 0:8f0d870509fe 50 */
Sergunb 0:8f0d870509fe 51
Sergunb 0:8f0d870509fe 52 /** @defgroup MISC_Private_Macros
Sergunb 0:8f0d870509fe 53 * @{
Sergunb 0:8f0d870509fe 54 */
Sergunb 0:8f0d870509fe 55
Sergunb 0:8f0d870509fe 56 /**
Sergunb 0:8f0d870509fe 57 * @}
Sergunb 0:8f0d870509fe 58 */
Sergunb 0:8f0d870509fe 59
Sergunb 0:8f0d870509fe 60 /** @defgroup MISC_Private_Variables
Sergunb 0:8f0d870509fe 61 * @{
Sergunb 0:8f0d870509fe 62 */
Sergunb 0:8f0d870509fe 63
Sergunb 0:8f0d870509fe 64 /**
Sergunb 0:8f0d870509fe 65 * @}
Sergunb 0:8f0d870509fe 66 */
Sergunb 0:8f0d870509fe 67
Sergunb 0:8f0d870509fe 68 /** @defgroup MISC_Private_FunctionPrototypes
Sergunb 0:8f0d870509fe 69 * @{
Sergunb 0:8f0d870509fe 70 */
Sergunb 0:8f0d870509fe 71
Sergunb 0:8f0d870509fe 72 /**
Sergunb 0:8f0d870509fe 73 * @}
Sergunb 0:8f0d870509fe 74 */
Sergunb 0:8f0d870509fe 75
Sergunb 0:8f0d870509fe 76 /** @defgroup MISC_Private_Functions
Sergunb 0:8f0d870509fe 77 * @{
Sergunb 0:8f0d870509fe 78 */
Sergunb 0:8f0d870509fe 79
Sergunb 0:8f0d870509fe 80 /**
Sergunb 0:8f0d870509fe 81 * @brief Configures the priority grouping: pre-emption priority and subpriority.
Sergunb 0:8f0d870509fe 82 * @param NVIC_PriorityGroup: specifies the priority grouping bits length.
Sergunb 0:8f0d870509fe 83 * This parameter can be one of the following values:
Sergunb 0:8f0d870509fe 84 * @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority
Sergunb 0:8f0d870509fe 85 * 4 bits for subpriority
Sergunb 0:8f0d870509fe 86 * @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority
Sergunb 0:8f0d870509fe 87 * 3 bits for subpriority
Sergunb 0:8f0d870509fe 88 * @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority
Sergunb 0:8f0d870509fe 89 * 2 bits for subpriority
Sergunb 0:8f0d870509fe 90 * @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority
Sergunb 0:8f0d870509fe 91 * 1 bits for subpriority
Sergunb 0:8f0d870509fe 92 * @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority
Sergunb 0:8f0d870509fe 93 * 0 bits for subpriority
Sergunb 0:8f0d870509fe 94 * @retval None
Sergunb 0:8f0d870509fe 95 */
Sergunb 0:8f0d870509fe 96 void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
Sergunb 0:8f0d870509fe 97 {
Sergunb 0:8f0d870509fe 98 /* Check the parameters */
Sergunb 0:8f0d870509fe 99 assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
Sergunb 0:8f0d870509fe 100
Sergunb 0:8f0d870509fe 101 /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
Sergunb 0:8f0d870509fe 102 SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
Sergunb 0:8f0d870509fe 103 }
Sergunb 0:8f0d870509fe 104
Sergunb 0:8f0d870509fe 105 /**
Sergunb 0:8f0d870509fe 106 * @brief Initializes the NVIC peripheral according to the specified
Sergunb 0:8f0d870509fe 107 * parameters in the NVIC_InitStruct.
Sergunb 0:8f0d870509fe 108 * @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains
Sergunb 0:8f0d870509fe 109 * the configuration information for the specified NVIC peripheral.
Sergunb 0:8f0d870509fe 110 * @retval None
Sergunb 0:8f0d870509fe 111 */
Sergunb 0:8f0d870509fe 112 void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
Sergunb 0:8f0d870509fe 113 {
Sergunb 0:8f0d870509fe 114 uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
Sergunb 0:8f0d870509fe 115
Sergunb 0:8f0d870509fe 116 /* Check the parameters */
Sergunb 0:8f0d870509fe 117 assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
Sergunb 0:8f0d870509fe 118 assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));
Sergunb 0:8f0d870509fe 119 assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
Sergunb 0:8f0d870509fe 120
Sergunb 0:8f0d870509fe 121 if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
Sergunb 0:8f0d870509fe 122 {
Sergunb 0:8f0d870509fe 123 /* Compute the Corresponding IRQ Priority --------------------------------*/
Sergunb 0:8f0d870509fe 124 tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
Sergunb 0:8f0d870509fe 125 tmppre = (0x4 - tmppriority);
Sergunb 0:8f0d870509fe 126 tmpsub = tmpsub >> tmppriority;
Sergunb 0:8f0d870509fe 127
Sergunb 0:8f0d870509fe 128 tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
Sergunb 0:8f0d870509fe 129 tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
Sergunb 0:8f0d870509fe 130 tmppriority = tmppriority << 0x04;
Sergunb 0:8f0d870509fe 131
Sergunb 0:8f0d870509fe 132 NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
Sergunb 0:8f0d870509fe 133
Sergunb 0:8f0d870509fe 134 /* Enable the Selected IRQ Channels --------------------------------------*/
Sergunb 0:8f0d870509fe 135 NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
Sergunb 0:8f0d870509fe 136 (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
Sergunb 0:8f0d870509fe 137 }
Sergunb 0:8f0d870509fe 138 else
Sergunb 0:8f0d870509fe 139 {
Sergunb 0:8f0d870509fe 140 /* Disable the Selected IRQ Channels -------------------------------------*/
Sergunb 0:8f0d870509fe 141 NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
Sergunb 0:8f0d870509fe 142 (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
Sergunb 0:8f0d870509fe 143 }
Sergunb 0:8f0d870509fe 144 }
Sergunb 0:8f0d870509fe 145
Sergunb 0:8f0d870509fe 146 /**
Sergunb 0:8f0d870509fe 147 * @brief Sets the vector table location and Offset.
Sergunb 0:8f0d870509fe 148 * @param NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory.
Sergunb 0:8f0d870509fe 149 * This parameter can be one of the following values:
Sergunb 0:8f0d870509fe 150 * @arg NVIC_VectTab_RAM
Sergunb 0:8f0d870509fe 151 * @arg NVIC_VectTab_FLASH
Sergunb 0:8f0d870509fe 152 * @param Offset: Vector Table base offset field. This value must be a multiple
Sergunb 0:8f0d870509fe 153 * of 0x200.
Sergunb 0:8f0d870509fe 154 * @retval None
Sergunb 0:8f0d870509fe 155 */
Sergunb 0:8f0d870509fe 156 void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
Sergunb 0:8f0d870509fe 157 {
Sergunb 0:8f0d870509fe 158 /* Check the parameters */
Sergunb 0:8f0d870509fe 159 assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
Sergunb 0:8f0d870509fe 160 assert_param(IS_NVIC_OFFSET(Offset));
Sergunb 0:8f0d870509fe 161
Sergunb 0:8f0d870509fe 162 SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
Sergunb 0:8f0d870509fe 163 }
Sergunb 0:8f0d870509fe 164
Sergunb 0:8f0d870509fe 165 /**
Sergunb 0:8f0d870509fe 166 * @brief Selects the condition for the system to enter low power mode.
Sergunb 0:8f0d870509fe 167 * @param LowPowerMode: Specifies the new mode for the system to enter low power mode.
Sergunb 0:8f0d870509fe 168 * This parameter can be one of the following values:
Sergunb 0:8f0d870509fe 169 * @arg NVIC_LP_SEVONPEND
Sergunb 0:8f0d870509fe 170 * @arg NVIC_LP_SLEEPDEEP
Sergunb 0:8f0d870509fe 171 * @arg NVIC_LP_SLEEPONEXIT
Sergunb 0:8f0d870509fe 172 * @param NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE.
Sergunb 0:8f0d870509fe 173 * @retval None
Sergunb 0:8f0d870509fe 174 */
Sergunb 0:8f0d870509fe 175 void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState)
Sergunb 0:8f0d870509fe 176 {
Sergunb 0:8f0d870509fe 177 /* Check the parameters */
Sergunb 0:8f0d870509fe 178 assert_param(IS_NVIC_LP(LowPowerMode));
Sergunb 0:8f0d870509fe 179 assert_param(IS_FUNCTIONAL_STATE(NewState));
Sergunb 0:8f0d870509fe 180
Sergunb 0:8f0d870509fe 181 if (NewState != DISABLE)
Sergunb 0:8f0d870509fe 182 {
Sergunb 0:8f0d870509fe 183 SCB->SCR |= LowPowerMode;
Sergunb 0:8f0d870509fe 184 }
Sergunb 0:8f0d870509fe 185 else
Sergunb 0:8f0d870509fe 186 {
Sergunb 0:8f0d870509fe 187 SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
Sergunb 0:8f0d870509fe 188 }
Sergunb 0:8f0d870509fe 189 }
Sergunb 0:8f0d870509fe 190
Sergunb 0:8f0d870509fe 191 /**
Sergunb 0:8f0d870509fe 192 * @brief Configures the SysTick clock source.
Sergunb 0:8f0d870509fe 193 * @param SysTick_CLKSource: specifies the SysTick clock source.
Sergunb 0:8f0d870509fe 194 * This parameter can be one of the following values:
Sergunb 0:8f0d870509fe 195 * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source.
Sergunb 0:8f0d870509fe 196 * @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source.
Sergunb 0:8f0d870509fe 197 * @retval None
Sergunb 0:8f0d870509fe 198 */
Sergunb 0:8f0d870509fe 199 void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
Sergunb 0:8f0d870509fe 200 {
Sergunb 0:8f0d870509fe 201 /* Check the parameters */
Sergunb 0:8f0d870509fe 202 assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
Sergunb 0:8f0d870509fe 203 if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
Sergunb 0:8f0d870509fe 204 {
Sergunb 0:8f0d870509fe 205 SysTick->CTRL |= SysTick_CLKSource_HCLK;
Sergunb 0:8f0d870509fe 206 }
Sergunb 0:8f0d870509fe 207 else
Sergunb 0:8f0d870509fe 208 {
Sergunb 0:8f0d870509fe 209 SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
Sergunb 0:8f0d870509fe 210 }
Sergunb 0:8f0d870509fe 211 }
Sergunb 0:8f0d870509fe 212
Sergunb 0:8f0d870509fe 213 /**
Sergunb 0:8f0d870509fe 214 * @}
Sergunb 0:8f0d870509fe 215 */
Sergunb 0:8f0d870509fe 216
Sergunb 0:8f0d870509fe 217 /**
Sergunb 0:8f0d870509fe 218 * @}
Sergunb 0:8f0d870509fe 219 */
Sergunb 0:8f0d870509fe 220
Sergunb 0:8f0d870509fe 221 /**
Sergunb 0:8f0d870509fe 222 * @}
Sergunb 0:8f0d870509fe 223 */
Sergunb 0:8f0d870509fe 224
Sergunb 0:8f0d870509fe 225 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/