Committer:
Ciesarik3
Date:
Mon Nov 12 18:36:18 2018 +0000
Revision:
0:fb1547f2354e
crc;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ciesarik3 0:fb1547f2354e 1 /**
Ciesarik3 0:fb1547f2354e 2 ******************************************************************************
Ciesarik3 0:fb1547f2354e 3 * @file system_stm32l0xx.c
Ciesarik3 0:fb1547f2354e 4 * @author MCD Application Team
Ciesarik3 0:fb1547f2354e 5 * @brief CMSIS Cortex-M0+ Device Peripheral Access Layer System Source File.
Ciesarik3 0:fb1547f2354e 6 *
Ciesarik3 0:fb1547f2354e 7 * This file provides two functions and one global variable to be called from
Ciesarik3 0:fb1547f2354e 8 * user application:
Ciesarik3 0:fb1547f2354e 9 * - SystemInit(): This function is called at startup just after reset and
Ciesarik3 0:fb1547f2354e 10 * before branch to main program. This call is made inside
Ciesarik3 0:fb1547f2354e 11 * the "startup_stm32l0xx.s" file.
Ciesarik3 0:fb1547f2354e 12 *
Ciesarik3 0:fb1547f2354e 13 * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
Ciesarik3 0:fb1547f2354e 14 * by the user application to setup the SysTick
Ciesarik3 0:fb1547f2354e 15 * timer or configure other parameters.
Ciesarik3 0:fb1547f2354e 16 *
Ciesarik3 0:fb1547f2354e 17 * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
Ciesarik3 0:fb1547f2354e 18 * be called whenever the core clock is changed
Ciesarik3 0:fb1547f2354e 19 * during program execution.
Ciesarik3 0:fb1547f2354e 20 *
Ciesarik3 0:fb1547f2354e 21 *
Ciesarik3 0:fb1547f2354e 22 ******************************************************************************
Ciesarik3 0:fb1547f2354e 23 * @attention
Ciesarik3 0:fb1547f2354e 24 *
Ciesarik3 0:fb1547f2354e 25 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
Ciesarik3 0:fb1547f2354e 26 *
Ciesarik3 0:fb1547f2354e 27 * Redistribution and use in source and binary forms, with or without modification,
Ciesarik3 0:fb1547f2354e 28 * are permitted provided that the following conditions are met:
Ciesarik3 0:fb1547f2354e 29 * 1. Redistributions of source code must retain the above copyright notice,
Ciesarik3 0:fb1547f2354e 30 * this list of conditions and the following disclaimer.
Ciesarik3 0:fb1547f2354e 31 * 2. Redistributions in binary form must reproduce the above copyright notice,
Ciesarik3 0:fb1547f2354e 32 * this list of conditions and the following disclaimer in the documentation
Ciesarik3 0:fb1547f2354e 33 * and/or other materials provided with the distribution.
Ciesarik3 0:fb1547f2354e 34 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Ciesarik3 0:fb1547f2354e 35 * may be used to endorse or promote products derived from this software
Ciesarik3 0:fb1547f2354e 36 * without specific prior written permission.
Ciesarik3 0:fb1547f2354e 37 *
Ciesarik3 0:fb1547f2354e 38 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Ciesarik3 0:fb1547f2354e 39 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Ciesarik3 0:fb1547f2354e 40 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Ciesarik3 0:fb1547f2354e 41 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Ciesarik3 0:fb1547f2354e 42 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Ciesarik3 0:fb1547f2354e 43 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Ciesarik3 0:fb1547f2354e 44 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Ciesarik3 0:fb1547f2354e 45 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Ciesarik3 0:fb1547f2354e 46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Ciesarik3 0:fb1547f2354e 47 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Ciesarik3 0:fb1547f2354e 48 *
Ciesarik3 0:fb1547f2354e 49 ******************************************************************************
Ciesarik3 0:fb1547f2354e 50 */
Ciesarik3 0:fb1547f2354e 51
Ciesarik3 0:fb1547f2354e 52 /** @addtogroup CMSIS
Ciesarik3 0:fb1547f2354e 53 * @{
Ciesarik3 0:fb1547f2354e 54 */
Ciesarik3 0:fb1547f2354e 55
Ciesarik3 0:fb1547f2354e 56 /** @addtogroup stm32l0xx_system
Ciesarik3 0:fb1547f2354e 57 * @{
Ciesarik3 0:fb1547f2354e 58 */
Ciesarik3 0:fb1547f2354e 59
Ciesarik3 0:fb1547f2354e 60 /** @addtogroup STM32L0xx_System_Private_Includes
Ciesarik3 0:fb1547f2354e 61 * @{
Ciesarik3 0:fb1547f2354e 62 */
Ciesarik3 0:fb1547f2354e 63
Ciesarik3 0:fb1547f2354e 64 #include "stm32l0xx.h"
Ciesarik3 0:fb1547f2354e 65
Ciesarik3 0:fb1547f2354e 66 #if !defined (HSE_VALUE)
Ciesarik3 0:fb1547f2354e 67 #define HSE_VALUE ((uint32_t)8000000U) /*!< Value of the External oscillator in Hz */
Ciesarik3 0:fb1547f2354e 68 #endif /* HSE_VALUE */
Ciesarik3 0:fb1547f2354e 69
Ciesarik3 0:fb1547f2354e 70 #if !defined (MSI_VALUE)
Ciesarik3 0:fb1547f2354e 71 #define MSI_VALUE ((uint32_t)2000000U) /*!< Value of the Internal oscillator in Hz*/
Ciesarik3 0:fb1547f2354e 72 #endif /* MSI_VALUE */
Ciesarik3 0:fb1547f2354e 73
Ciesarik3 0:fb1547f2354e 74 #if !defined (HSI_VALUE)
Ciesarik3 0:fb1547f2354e 75 #define HSI_VALUE ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/
Ciesarik3 0:fb1547f2354e 76 #endif /* HSI_VALUE */
Ciesarik3 0:fb1547f2354e 77
Ciesarik3 0:fb1547f2354e 78
Ciesarik3 0:fb1547f2354e 79 /**
Ciesarik3 0:fb1547f2354e 80 * @}
Ciesarik3 0:fb1547f2354e 81 */
Ciesarik3 0:fb1547f2354e 82
Ciesarik3 0:fb1547f2354e 83 /** @addtogroup STM32L0xx_System_Private_TypesDefinitions
Ciesarik3 0:fb1547f2354e 84 * @{
Ciesarik3 0:fb1547f2354e 85 */
Ciesarik3 0:fb1547f2354e 86
Ciesarik3 0:fb1547f2354e 87 /**
Ciesarik3 0:fb1547f2354e 88 * @}
Ciesarik3 0:fb1547f2354e 89 */
Ciesarik3 0:fb1547f2354e 90
Ciesarik3 0:fb1547f2354e 91 /** @addtogroup STM32L0xx_System_Private_Defines
Ciesarik3 0:fb1547f2354e 92 * @{
Ciesarik3 0:fb1547f2354e 93 */
Ciesarik3 0:fb1547f2354e 94 /************************* Miscellaneous Configuration ************************/
Ciesarik3 0:fb1547f2354e 95
Ciesarik3 0:fb1547f2354e 96 /*!< Uncomment the following line if you need to relocate your vector Table in
Ciesarik3 0:fb1547f2354e 97 Internal SRAM. */
Ciesarik3 0:fb1547f2354e 98 /* #define VECT_TAB_SRAM */
Ciesarik3 0:fb1547f2354e 99 #define VECT_TAB_OFFSET 0x00U /*!< Vector Table base offset field.
Ciesarik3 0:fb1547f2354e 100 This value must be a multiple of 0x200. */
Ciesarik3 0:fb1547f2354e 101 /******************************************************************************/
Ciesarik3 0:fb1547f2354e 102 /**
Ciesarik3 0:fb1547f2354e 103 * @}
Ciesarik3 0:fb1547f2354e 104 */
Ciesarik3 0:fb1547f2354e 105
Ciesarik3 0:fb1547f2354e 106 /** @addtogroup STM32L0xx_System_Private_Macros
Ciesarik3 0:fb1547f2354e 107 * @{
Ciesarik3 0:fb1547f2354e 108 */
Ciesarik3 0:fb1547f2354e 109
Ciesarik3 0:fb1547f2354e 110 /**
Ciesarik3 0:fb1547f2354e 111 * @}
Ciesarik3 0:fb1547f2354e 112 */
Ciesarik3 0:fb1547f2354e 113
Ciesarik3 0:fb1547f2354e 114 /** @addtogroup STM32L0xx_System_Private_Variables
Ciesarik3 0:fb1547f2354e 115 * @{
Ciesarik3 0:fb1547f2354e 116 */
Ciesarik3 0:fb1547f2354e 117 /* This variable is updated in three ways:
Ciesarik3 0:fb1547f2354e 118 1) by calling CMSIS function SystemCoreClockUpdate()
Ciesarik3 0:fb1547f2354e 119 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
Ciesarik3 0:fb1547f2354e 120 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
Ciesarik3 0:fb1547f2354e 121 Note: If you use this function to configure the system clock; then there
Ciesarik3 0:fb1547f2354e 122 is no need to call the 2 first functions listed above, since SystemCoreClock
Ciesarik3 0:fb1547f2354e 123 variable is updated automatically.
Ciesarik3 0:fb1547f2354e 124 */
Ciesarik3 0:fb1547f2354e 125 uint32_t SystemCoreClock = 2000000U;
Ciesarik3 0:fb1547f2354e 126 const uint8_t AHBPrescTable[16] = {0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U, 6U, 7U, 8U, 9U};
Ciesarik3 0:fb1547f2354e 127 const uint8_t APBPrescTable[8] = {0U, 0U, 0U, 0U, 1U, 2U, 3U, 4U};
Ciesarik3 0:fb1547f2354e 128 const uint8_t PLLMulTable[9] = {3U, 4U, 6U, 8U, 12U, 16U, 24U, 32U, 48U};
Ciesarik3 0:fb1547f2354e 129
Ciesarik3 0:fb1547f2354e 130 /**
Ciesarik3 0:fb1547f2354e 131 * @}
Ciesarik3 0:fb1547f2354e 132 */
Ciesarik3 0:fb1547f2354e 133
Ciesarik3 0:fb1547f2354e 134 /** @addtogroup STM32L0xx_System_Private_FunctionPrototypes
Ciesarik3 0:fb1547f2354e 135 * @{
Ciesarik3 0:fb1547f2354e 136 */
Ciesarik3 0:fb1547f2354e 137
Ciesarik3 0:fb1547f2354e 138 /**
Ciesarik3 0:fb1547f2354e 139 * @}
Ciesarik3 0:fb1547f2354e 140 */
Ciesarik3 0:fb1547f2354e 141
Ciesarik3 0:fb1547f2354e 142 /** @addtogroup STM32L0xx_System_Private_Functions
Ciesarik3 0:fb1547f2354e 143 * @{
Ciesarik3 0:fb1547f2354e 144 */
Ciesarik3 0:fb1547f2354e 145
Ciesarik3 0:fb1547f2354e 146 /**
Ciesarik3 0:fb1547f2354e 147 * @brief Setup the microcontroller system.
Ciesarik3 0:fb1547f2354e 148 * @param None
Ciesarik3 0:fb1547f2354e 149 * @retval None
Ciesarik3 0:fb1547f2354e 150 */
Ciesarik3 0:fb1547f2354e 151 void SystemInit (void)
Ciesarik3 0:fb1547f2354e 152 {
Ciesarik3 0:fb1547f2354e 153 /*!< Set MSION bit */
Ciesarik3 0:fb1547f2354e 154 RCC->CR |= (uint32_t)0x00000100U;
Ciesarik3 0:fb1547f2354e 155
Ciesarik3 0:fb1547f2354e 156 /*!< Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], MCOSEL[2:0] and MCOPRE[2:0] bits */
Ciesarik3 0:fb1547f2354e 157 RCC->CFGR &= (uint32_t) 0x88FF400CU;
Ciesarik3 0:fb1547f2354e 158
Ciesarik3 0:fb1547f2354e 159 /*!< Reset HSION, HSIDIVEN, HSEON, CSSON and PLLON bits */
Ciesarik3 0:fb1547f2354e 160 RCC->CR &= (uint32_t)0xFEF6FFF6U;
Ciesarik3 0:fb1547f2354e 161
Ciesarik3 0:fb1547f2354e 162 /*!< Reset HSI48ON bit */
Ciesarik3 0:fb1547f2354e 163 RCC->CRRCR &= (uint32_t)0xFFFFFFFEU;
Ciesarik3 0:fb1547f2354e 164
Ciesarik3 0:fb1547f2354e 165 /*!< Reset HSEBYP bit */
Ciesarik3 0:fb1547f2354e 166 RCC->CR &= (uint32_t)0xFFFBFFFFU;
Ciesarik3 0:fb1547f2354e 167
Ciesarik3 0:fb1547f2354e 168 /*!< Reset PLLSRC, PLLMUL[3:0] and PLLDIV[1:0] bits */
Ciesarik3 0:fb1547f2354e 169 RCC->CFGR &= (uint32_t)0xFF02FFFFU;
Ciesarik3 0:fb1547f2354e 170
Ciesarik3 0:fb1547f2354e 171 /*!< Disable all interrupts */
Ciesarik3 0:fb1547f2354e 172 RCC->CIER = 0x00000000U;
Ciesarik3 0:fb1547f2354e 173
Ciesarik3 0:fb1547f2354e 174 /* Configure the Vector Table location add offset address ------------------*/
Ciesarik3 0:fb1547f2354e 175 #ifdef VECT_TAB_SRAM
Ciesarik3 0:fb1547f2354e 176 SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
Ciesarik3 0:fb1547f2354e 177 #else
Ciesarik3 0:fb1547f2354e 178 SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
Ciesarik3 0:fb1547f2354e 179 #endif
Ciesarik3 0:fb1547f2354e 180 }
Ciesarik3 0:fb1547f2354e 181
Ciesarik3 0:fb1547f2354e 182 /**
Ciesarik3 0:fb1547f2354e 183 * @brief Update SystemCoreClock according to Clock Register Values
Ciesarik3 0:fb1547f2354e 184 * The SystemCoreClock variable contains the core clock (HCLK), it can
Ciesarik3 0:fb1547f2354e 185 * be used by the user application to setup the SysTick timer or configure
Ciesarik3 0:fb1547f2354e 186 * other parameters.
Ciesarik3 0:fb1547f2354e 187 *
Ciesarik3 0:fb1547f2354e 188 * @note Each time the core clock (HCLK) changes, this function must be called
Ciesarik3 0:fb1547f2354e 189 * to update SystemCoreClock variable value. Otherwise, any configuration
Ciesarik3 0:fb1547f2354e 190 * based on this variable will be incorrect.
Ciesarik3 0:fb1547f2354e 191 *
Ciesarik3 0:fb1547f2354e 192 * @note - The system frequency computed by this function is not the real
Ciesarik3 0:fb1547f2354e 193 * frequency in the chip. It is calculated based on the predefined
Ciesarik3 0:fb1547f2354e 194 * constant and the selected clock source:
Ciesarik3 0:fb1547f2354e 195 *
Ciesarik3 0:fb1547f2354e 196 * - If SYSCLK source is MSI, SystemCoreClock will contain the MSI
Ciesarik3 0:fb1547f2354e 197 * value as defined by the MSI range.
Ciesarik3 0:fb1547f2354e 198 *
Ciesarik3 0:fb1547f2354e 199 * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
Ciesarik3 0:fb1547f2354e 200 *
Ciesarik3 0:fb1547f2354e 201 * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
Ciesarik3 0:fb1547f2354e 202 *
Ciesarik3 0:fb1547f2354e 203 * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
Ciesarik3 0:fb1547f2354e 204 * or HSI_VALUE(*) multiplied/divided by the PLL factors.
Ciesarik3 0:fb1547f2354e 205 *
Ciesarik3 0:fb1547f2354e 206 * (*) HSI_VALUE is a constant defined in stm32l0xx_hal.h file (default value
Ciesarik3 0:fb1547f2354e 207 * 16 MHz) but the real value may vary depending on the variations
Ciesarik3 0:fb1547f2354e 208 * in voltage and temperature.
Ciesarik3 0:fb1547f2354e 209 *
Ciesarik3 0:fb1547f2354e 210 * (**) HSE_VALUE is a constant defined in stm32l0xx_hal.h file (default value
Ciesarik3 0:fb1547f2354e 211 * 8 MHz), user has to ensure that HSE_VALUE is same as the real
Ciesarik3 0:fb1547f2354e 212 * frequency of the crystal used. Otherwise, this function may
Ciesarik3 0:fb1547f2354e 213 * have wrong result.
Ciesarik3 0:fb1547f2354e 214 *
Ciesarik3 0:fb1547f2354e 215 * - The result of this function could be not correct when using fractional
Ciesarik3 0:fb1547f2354e 216 * value for HSE crystal.
Ciesarik3 0:fb1547f2354e 217 * @param None
Ciesarik3 0:fb1547f2354e 218 * @retval None
Ciesarik3 0:fb1547f2354e 219 */
Ciesarik3 0:fb1547f2354e 220 void SystemCoreClockUpdate (void)
Ciesarik3 0:fb1547f2354e 221 {
Ciesarik3 0:fb1547f2354e 222 uint32_t tmp = 0U, pllmul = 0U, plldiv = 0U, pllsource = 0U, msirange = 0U;
Ciesarik3 0:fb1547f2354e 223
Ciesarik3 0:fb1547f2354e 224 /* Get SYSCLK source -------------------------------------------------------*/
Ciesarik3 0:fb1547f2354e 225 tmp = RCC->CFGR & RCC_CFGR_SWS;
Ciesarik3 0:fb1547f2354e 226
Ciesarik3 0:fb1547f2354e 227 switch (tmp)
Ciesarik3 0:fb1547f2354e 228 {
Ciesarik3 0:fb1547f2354e 229 case 0x00U: /* MSI used as system clock */
Ciesarik3 0:fb1547f2354e 230 msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13U;
Ciesarik3 0:fb1547f2354e 231 SystemCoreClock = (32768U * (1U << (msirange + 1U)));
Ciesarik3 0:fb1547f2354e 232 break;
Ciesarik3 0:fb1547f2354e 233 case 0x04U: /* HSI used as system clock */
Ciesarik3 0:fb1547f2354e 234 SystemCoreClock = HSI_VALUE;
Ciesarik3 0:fb1547f2354e 235 break;
Ciesarik3 0:fb1547f2354e 236 case 0x08U: /* HSE used as system clock */
Ciesarik3 0:fb1547f2354e 237 SystemCoreClock = HSE_VALUE;
Ciesarik3 0:fb1547f2354e 238 break;
Ciesarik3 0:fb1547f2354e 239 case 0x0CU: /* PLL used as system clock */
Ciesarik3 0:fb1547f2354e 240 /* Get PLL clock source and multiplication factor ----------------------*/
Ciesarik3 0:fb1547f2354e 241 pllmul = RCC->CFGR & RCC_CFGR_PLLMUL;
Ciesarik3 0:fb1547f2354e 242 plldiv = RCC->CFGR & RCC_CFGR_PLLDIV;
Ciesarik3 0:fb1547f2354e 243 pllmul = PLLMulTable[(pllmul >> 18U)];
Ciesarik3 0:fb1547f2354e 244 plldiv = (plldiv >> 22U) + 1U;
Ciesarik3 0:fb1547f2354e 245
Ciesarik3 0:fb1547f2354e 246 pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
Ciesarik3 0:fb1547f2354e 247
Ciesarik3 0:fb1547f2354e 248 if (pllsource == 0x00U)
Ciesarik3 0:fb1547f2354e 249 {
Ciesarik3 0:fb1547f2354e 250 /* HSI oscillator clock selected as PLL clock entry */
Ciesarik3 0:fb1547f2354e 251 SystemCoreClock = (((HSI_VALUE) * pllmul) / plldiv);
Ciesarik3 0:fb1547f2354e 252 }
Ciesarik3 0:fb1547f2354e 253 else
Ciesarik3 0:fb1547f2354e 254 {
Ciesarik3 0:fb1547f2354e 255 /* HSE selected as PLL clock entry */
Ciesarik3 0:fb1547f2354e 256 SystemCoreClock = (((HSE_VALUE) * pllmul) / plldiv);
Ciesarik3 0:fb1547f2354e 257 }
Ciesarik3 0:fb1547f2354e 258 break;
Ciesarik3 0:fb1547f2354e 259 default: /* MSI used as system clock */
Ciesarik3 0:fb1547f2354e 260 msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13U;
Ciesarik3 0:fb1547f2354e 261 SystemCoreClock = (32768U * (1U << (msirange + 1U)));
Ciesarik3 0:fb1547f2354e 262 break;
Ciesarik3 0:fb1547f2354e 263 }
Ciesarik3 0:fb1547f2354e 264 /* Compute HCLK clock frequency --------------------------------------------*/
Ciesarik3 0:fb1547f2354e 265 /* Get HCLK prescaler */
Ciesarik3 0:fb1547f2354e 266 tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)];
Ciesarik3 0:fb1547f2354e 267 /* HCLK clock frequency */
Ciesarik3 0:fb1547f2354e 268 SystemCoreClock >>= tmp;
Ciesarik3 0:fb1547f2354e 269 }
Ciesarik3 0:fb1547f2354e 270
Ciesarik3 0:fb1547f2354e 271
Ciesarik3 0:fb1547f2354e 272
Ciesarik3 0:fb1547f2354e 273 /**
Ciesarik3 0:fb1547f2354e 274 * @}
Ciesarik3 0:fb1547f2354e 275 */
Ciesarik3 0:fb1547f2354e 276
Ciesarik3 0:fb1547f2354e 277 /**
Ciesarik3 0:fb1547f2354e 278 * @}
Ciesarik3 0:fb1547f2354e 279 */
Ciesarik3 0:fb1547f2354e 280
Ciesarik3 0:fb1547f2354e 281 /**
Ciesarik3 0:fb1547f2354e 282 * @}
Ciesarik3 0:fb1547f2354e 283 */
Ciesarik3 0:fb1547f2354e 284
Ciesarik3 0:fb1547f2354e 285 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/