mbed library sources

Dependents:   frdm_kl05z_gpio_test

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Wed May 07 13:15:08 2014 +0100
Revision:
181:a4cbdfbbd2f4
Synchronized with git revision 7751e759576c6fd68deccb81ea82bac19ed41745

Full URL: https://github.com/mbedmicro/mbed/commit/7751e759576c6fd68deccb81ea82bac19ed41745/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 181:a4cbdfbbd2f4 1 /**
mbed_official 181:a4cbdfbbd2f4 2 ******************************************************************************
mbed_official 181:a4cbdfbbd2f4 3 * @file stm32l0xx_hal_flash_ramfunc.c
mbed_official 181:a4cbdfbbd2f4 4 * @author MCD Application Team
mbed_official 181:a4cbdfbbd2f4 5 * @version V1.0.0
mbed_official 181:a4cbdfbbd2f4 6 * @date 22-April-2014
mbed_official 181:a4cbdfbbd2f4 7 * @brief FLASH RAMFUNC driver.
mbed_official 181:a4cbdfbbd2f4 8 * This file provides a Flash firmware functions which should be
mbed_official 181:a4cbdfbbd2f4 9 * executed from internal SRAM
mbed_official 181:a4cbdfbbd2f4 10 * + FLASH HalfPage Programming
mbed_official 181:a4cbdfbbd2f4 11 * + FLASH Power Down in Run mode
mbed_official 181:a4cbdfbbd2f4 12 *
mbed_official 181:a4cbdfbbd2f4 13 * @verbatim
mbed_official 181:a4cbdfbbd2f4 14
mbed_official 181:a4cbdfbbd2f4 15 *** ARM Compiler ***
mbed_official 181:a4cbdfbbd2f4 16 --------------------
mbed_official 181:a4cbdfbbd2f4 17 [..] RAM functions are defined using the toolchain options.
mbed_official 181:a4cbdfbbd2f4 18 Functions that are be executed in RAM should reside in a separate
mbed_official 181:a4cbdfbbd2f4 19 source module. Using the 'Options for File' dialog you can simply change
mbed_official 181:a4cbdfbbd2f4 20 the 'Code / Const' area of a module to a memory space in physical RAM.
mbed_official 181:a4cbdfbbd2f4 21 Available memory areas are declared in the 'Target' tab of the
mbed_official 181:a4cbdfbbd2f4 22 Options for Target' dialog.
mbed_official 181:a4cbdfbbd2f4 23
mbed_official 181:a4cbdfbbd2f4 24 *** ICCARM Compiler ***
mbed_official 181:a4cbdfbbd2f4 25 -----------------------
mbed_official 181:a4cbdfbbd2f4 26 [..] RAM functions are defined using a specific toolchain keyword "__ramfunc".
mbed_official 181:a4cbdfbbd2f4 27
mbed_official 181:a4cbdfbbd2f4 28 *** GNU Compiler ***
mbed_official 181:a4cbdfbbd2f4 29 --------------------
mbed_official 181:a4cbdfbbd2f4 30 [..] RAM functions are defined using a specific toolchain attribute
mbed_official 181:a4cbdfbbd2f4 31 "__attribute__((section(".RamFunc")))".
mbed_official 181:a4cbdfbbd2f4 32
mbed_official 181:a4cbdfbbd2f4 33 @endverbatim
mbed_official 181:a4cbdfbbd2f4 34 ******************************************************************************
mbed_official 181:a4cbdfbbd2f4 35 * @attention
mbed_official 181:a4cbdfbbd2f4 36 *
mbed_official 181:a4cbdfbbd2f4 37 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 181:a4cbdfbbd2f4 38 *
mbed_official 181:a4cbdfbbd2f4 39 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 181:a4cbdfbbd2f4 40 * are permitted provided that the following conditions are met:
mbed_official 181:a4cbdfbbd2f4 41 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 181:a4cbdfbbd2f4 42 * this list of conditions and the following disclaimer.
mbed_official 181:a4cbdfbbd2f4 43 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 181:a4cbdfbbd2f4 44 * this list of conditions and the following disclaimer in the documentation
mbed_official 181:a4cbdfbbd2f4 45 * and/or other materials provided with the distribution.
mbed_official 181:a4cbdfbbd2f4 46 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 181:a4cbdfbbd2f4 47 * may be used to endorse or promote products derived from this software
mbed_official 181:a4cbdfbbd2f4 48 * without specific prior written permission.
mbed_official 181:a4cbdfbbd2f4 49 *
mbed_official 181:a4cbdfbbd2f4 50 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 181:a4cbdfbbd2f4 51 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 181:a4cbdfbbd2f4 52 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 181:a4cbdfbbd2f4 53 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 181:a4cbdfbbd2f4 54 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 181:a4cbdfbbd2f4 55 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 181:a4cbdfbbd2f4 56 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 181:a4cbdfbbd2f4 57 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 181:a4cbdfbbd2f4 58 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 181:a4cbdfbbd2f4 59 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 181:a4cbdfbbd2f4 60 *
mbed_official 181:a4cbdfbbd2f4 61 ******************************************************************************
mbed_official 181:a4cbdfbbd2f4 62 */
mbed_official 181:a4cbdfbbd2f4 63
mbed_official 181:a4cbdfbbd2f4 64 /* Includes ------------------------------------------------------------------*/
mbed_official 181:a4cbdfbbd2f4 65 #include "stm32l0xx_hal.h"
mbed_official 181:a4cbdfbbd2f4 66 /** @addtogroup STM32L0XX_HAL_Driver
mbed_official 181:a4cbdfbbd2f4 67 * @{
mbed_official 181:a4cbdfbbd2f4 68 */
mbed_official 181:a4cbdfbbd2f4 69
mbed_official 181:a4cbdfbbd2f4 70 /** @defgroup FLASH_RAMFUNC Driver
mbed_official 181:a4cbdfbbd2f4 71 * @brief FLASH functions executed from RAM
mbed_official 181:a4cbdfbbd2f4 72 * @{
mbed_official 181:a4cbdfbbd2f4 73 */
mbed_official 181:a4cbdfbbd2f4 74
mbed_official 181:a4cbdfbbd2f4 75 #ifdef HAL_FLASH_MODULE_ENABLED
mbed_official 181:a4cbdfbbd2f4 76
mbed_official 181:a4cbdfbbd2f4 77 /* Private typedef -----------------------------------------------------------*/
mbed_official 181:a4cbdfbbd2f4 78 /* Private define ------------------------------------------------------------*/
mbed_official 181:a4cbdfbbd2f4 79 /* Private macro -------------------------------------------------------------*/
mbed_official 181:a4cbdfbbd2f4 80 /* Private variables ---------------------------------------------------------*/
mbed_official 181:a4cbdfbbd2f4 81 /* Private function prototypes -----------------------------------------------*/
mbed_official 181:a4cbdfbbd2f4 82 static __RAM_FUNC FLASH_Program_HalfPage(uint32_t Address, uint32_t *Data);
mbed_official 181:a4cbdfbbd2f4 83
mbed_official 181:a4cbdfbbd2f4 84 /* Private functions ---------------------------------------------------------*/
mbed_official 181:a4cbdfbbd2f4 85
mbed_official 181:a4cbdfbbd2f4 86 /** @defgroup FLASH_RAMFUNC_Private_Functions
mbed_official 181:a4cbdfbbd2f4 87 * @{
mbed_official 181:a4cbdfbbd2f4 88 */
mbed_official 181:a4cbdfbbd2f4 89
mbed_official 181:a4cbdfbbd2f4 90 /** @defgroup FLASH_RAMFUNC_Group1 Peripheral features functions
mbed_official 181:a4cbdfbbd2f4 91 * @brief Data transfers functions
mbed_official 181:a4cbdfbbd2f4 92 *
mbed_official 181:a4cbdfbbd2f4 93 @verbatim
mbed_official 181:a4cbdfbbd2f4 94 ===============================================================================
mbed_official 181:a4cbdfbbd2f4 95 ##### ramfunc functions #####
mbed_official 181:a4cbdfbbd2f4 96 ===============================================================================
mbed_official 181:a4cbdfbbd2f4 97 [..]
mbed_official 181:a4cbdfbbd2f4 98 This subsection provides a set of functions that should be executed from RAM
mbed_official 181:a4cbdfbbd2f4 99 transfers.
mbed_official 181:a4cbdfbbd2f4 100
mbed_official 181:a4cbdfbbd2f4 101 @endverbatim
mbed_official 181:a4cbdfbbd2f4 102 * @{
mbed_official 181:a4cbdfbbd2f4 103 */
mbed_official 181:a4cbdfbbd2f4 104
mbed_official 181:a4cbdfbbd2f4 105 /**
mbed_official 181:a4cbdfbbd2f4 106 * @brief Program a half page word at a specified address,
mbed_official 181:a4cbdfbbd2f4 107 * @note This function should be executed from RAM
mbed_official 181:a4cbdfbbd2f4 108 * @param Address: specifies the address to be programmed,
mbed_official 181:a4cbdfbbd2f4 109 * the address should be half page aligned.
mbed_official 181:a4cbdfbbd2f4 110 * @param *Data: specifies the buffer of data to be programmed,
mbed_official 181:a4cbdfbbd2f4 111 * the size of the buffer is 16 words.
mbed_official 181:a4cbdfbbd2f4 112 *
mbed_official 181:a4cbdfbbd2f4 113 * @retval HAL_StatusTypeDef HAL Status
mbed_official 181:a4cbdfbbd2f4 114 */
mbed_official 181:a4cbdfbbd2f4 115 __RAM_FUNC FLASH_HalfPageProgram(uint32_t Address, uint32_t *Data)
mbed_official 181:a4cbdfbbd2f4 116 {
mbed_official 181:a4cbdfbbd2f4 117 HAL_StatusTypeDef status = HAL_OK;
mbed_official 181:a4cbdfbbd2f4 118 uint32_t timeout = 0xFFFFFFFF;
mbed_official 181:a4cbdfbbd2f4 119 /*Program word (32-bit) at a specified address.*/
mbed_official 181:a4cbdfbbd2f4 120 FLASH_Program_HalfPage(Address, Data);
mbed_official 181:a4cbdfbbd2f4 121
mbed_official 181:a4cbdfbbd2f4 122 /* Wait for a FLASH operation to complete or a TIMEOUT to occur */
mbed_official 181:a4cbdfbbd2f4 123 while(((FLASH->SR & FLASH_FLAG_BSY) != 0x00) && (timeout != 0x00))
mbed_official 181:a4cbdfbbd2f4 124 {
mbed_official 181:a4cbdfbbd2f4 125 timeout--;
mbed_official 181:a4cbdfbbd2f4 126 }
mbed_official 181:a4cbdfbbd2f4 127
mbed_official 181:a4cbdfbbd2f4 128 /* Reset PROG bit */
mbed_official 181:a4cbdfbbd2f4 129 FLASH->PECR &= ~FLASH_PECR_PROG;
mbed_official 181:a4cbdfbbd2f4 130 FLASH->PECR &= ~FLASH_PECR_FPRG;
mbed_official 181:a4cbdfbbd2f4 131 return status;
mbed_official 181:a4cbdfbbd2f4 132 }
mbed_official 181:a4cbdfbbd2f4 133
mbed_official 181:a4cbdfbbd2f4 134 /**
mbed_official 181:a4cbdfbbd2f4 135 * @brief Program a half page in program memory.
mbed_official 181:a4cbdfbbd2f4 136 * @param Address: The Half page address in program memory to be written.
mbed_official 181:a4cbdfbbd2f4 137 * @param Data:
mbed_official 181:a4cbdfbbd2f4 138 * @retval None
mbed_official 181:a4cbdfbbd2f4 139 */
mbed_official 181:a4cbdfbbd2f4 140 static __RAM_FUNC FLASH_Program_HalfPage(uint32_t Address, uint32_t *Data)
mbed_official 181:a4cbdfbbd2f4 141 {
mbed_official 181:a4cbdfbbd2f4 142 HAL_StatusTypeDef status = HAL_OK;
mbed_official 181:a4cbdfbbd2f4 143 uint32_t i =0;
mbed_official 181:a4cbdfbbd2f4 144
mbed_official 181:a4cbdfbbd2f4 145 /* Set PROG bit */
mbed_official 181:a4cbdfbbd2f4 146 FLASH->PECR |= FLASH_PECR_PROG;
mbed_official 181:a4cbdfbbd2f4 147
mbed_official 181:a4cbdfbbd2f4 148 /* Set FPRG bit */
mbed_official 181:a4cbdfbbd2f4 149 FLASH->PECR |= FLASH_PECR_FPRG;
mbed_official 181:a4cbdfbbd2f4 150
mbed_official 181:a4cbdfbbd2f4 151 *(__IO uint32_t*)Address = Data[0];
mbed_official 181:a4cbdfbbd2f4 152
mbed_official 181:a4cbdfbbd2f4 153 for(i = 1; i <= 15; i++)
mbed_official 181:a4cbdfbbd2f4 154 {
mbed_official 181:a4cbdfbbd2f4 155 *(__IO uint32_t*)(Address + 4) = Data[i];
mbed_official 181:a4cbdfbbd2f4 156 }
mbed_official 181:a4cbdfbbd2f4 157 return status;
mbed_official 181:a4cbdfbbd2f4 158 }
mbed_official 181:a4cbdfbbd2f4 159
mbed_official 181:a4cbdfbbd2f4 160 /**
mbed_official 181:a4cbdfbbd2f4 161 * @brief Enable the Power down in Run Mode
mbed_official 181:a4cbdfbbd2f4 162 * @note This fuction should be called and executed from SRAM memory
mbed_official 181:a4cbdfbbd2f4 163 * @param None
mbed_official 181:a4cbdfbbd2f4 164 * @retval None
mbed_official 181:a4cbdfbbd2f4 165 */
mbed_official 181:a4cbdfbbd2f4 166 __RAM_FUNC FLASH_EnableRunPowerDown(void)
mbed_official 181:a4cbdfbbd2f4 167 {
mbed_official 181:a4cbdfbbd2f4 168 /* Enable the Power Down in Run mode*/
mbed_official 181:a4cbdfbbd2f4 169 __HAL_FLASH_POWER_DOWN_ENABLE();
mbed_official 181:a4cbdfbbd2f4 170
mbed_official 181:a4cbdfbbd2f4 171 return HAL_OK;
mbed_official 181:a4cbdfbbd2f4 172
mbed_official 181:a4cbdfbbd2f4 173 }
mbed_official 181:a4cbdfbbd2f4 174
mbed_official 181:a4cbdfbbd2f4 175 /**
mbed_official 181:a4cbdfbbd2f4 176 * @brief Disable the Power down in Run Mode
mbed_official 181:a4cbdfbbd2f4 177 * @note This fuction should be called and executed from SRAM memory
mbed_official 181:a4cbdfbbd2f4 178 * @param None
mbed_official 181:a4cbdfbbd2f4 179 * @retval None
mbed_official 181:a4cbdfbbd2f4 180 */
mbed_official 181:a4cbdfbbd2f4 181 __RAM_FUNC FLASH_DisableRunPowerDown(void)
mbed_official 181:a4cbdfbbd2f4 182 {
mbed_official 181:a4cbdfbbd2f4 183 /* Disable the Power Down in Run mode*/
mbed_official 181:a4cbdfbbd2f4 184 __HAL_FLASH_POWER_DOWN_DISABLE();
mbed_official 181:a4cbdfbbd2f4 185
mbed_official 181:a4cbdfbbd2f4 186 return HAL_OK;
mbed_official 181:a4cbdfbbd2f4 187 }
mbed_official 181:a4cbdfbbd2f4 188
mbed_official 181:a4cbdfbbd2f4 189
mbed_official 181:a4cbdfbbd2f4 190 /**
mbed_official 181:a4cbdfbbd2f4 191 * @}
mbed_official 181:a4cbdfbbd2f4 192 */
mbed_official 181:a4cbdfbbd2f4 193
mbed_official 181:a4cbdfbbd2f4 194 /**
mbed_official 181:a4cbdfbbd2f4 195 * @}
mbed_official 181:a4cbdfbbd2f4 196 */
mbed_official 181:a4cbdfbbd2f4 197 #endif /* HAL_FLASH_MODULE_ENABLED */
mbed_official 181:a4cbdfbbd2f4 198
mbed_official 181:a4cbdfbbd2f4 199
mbed_official 181:a4cbdfbbd2f4 200
mbed_official 181:a4cbdfbbd2f4 201 /**
mbed_official 181:a4cbdfbbd2f4 202 * @}
mbed_official 181:a4cbdfbbd2f4 203 */
mbed_official 181:a4cbdfbbd2f4 204
mbed_official 181:a4cbdfbbd2f4 205 /**
mbed_official 181:a4cbdfbbd2f4 206 * @}
mbed_official 181:a4cbdfbbd2f4 207 */
mbed_official 181:a4cbdfbbd2f4 208
mbed_official 181:a4cbdfbbd2f4 209
mbed_official 181:a4cbdfbbd2f4 210 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
mbed_official 181:a4cbdfbbd2f4 211
mbed_official 181:a4cbdfbbd2f4 212