mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

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:
Sat Feb 08 19:45:06 2014 +0000
Revision:
87:085cde657901
Child:
106:ced8cbb51063
Synchronized with git revision 9272cdeb45ec7e6077641536509413da8fd2ebc2

Full URL: https://github.com/mbedmicro/mbed/commit/9272cdeb45ec7e6077641536509413da8fd2ebc2/

Add NUCLEO_F401RE, improvements

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 87:085cde657901 1 /**
mbed_official 87:085cde657901 2 ******************************************************************************
mbed_official 87:085cde657901 3 * @file stm32f4xx_hal_sram.c
mbed_official 87:085cde657901 4 * @author MCD Application Team
mbed_official 87:085cde657901 5 * @version V1.0.0RC2
mbed_official 87:085cde657901 6 * @date 04-February-2014
mbed_official 87:085cde657901 7 * @brief SRAM HAL module driver.
mbed_official 87:085cde657901 8 * This file provides a generic firmware to drive SRAM memories
mbed_official 87:085cde657901 9 * mounted as external device.
mbed_official 87:085cde657901 10 *
mbed_official 87:085cde657901 11 @verbatim
mbed_official 87:085cde657901 12 ==============================================================================
mbed_official 87:085cde657901 13 ##### How to use this driver #####
mbed_official 87:085cde657901 14 ==============================================================================
mbed_official 87:085cde657901 15 [..]
mbed_official 87:085cde657901 16 This driver is a generic layered driver which contains a set of APIs used to
mbed_official 87:085cde657901 17 control SRAM memories. It uses the FMC layer functions to interface
mbed_official 87:085cde657901 18 with SRAM devices.
mbed_official 87:085cde657901 19 The following sequence should be followed to configure the FMC/FSMC to interface
mbed_official 87:085cde657901 20 with SRAM/PSRAM memories:
mbed_official 87:085cde657901 21
mbed_official 87:085cde657901 22 (#) Declare a SRAM_HandleTypeDef handle structure, for example:
mbed_official 87:085cde657901 23 SRAM_HandleTypeDef hsram; and:
mbed_official 87:085cde657901 24
mbed_official 87:085cde657901 25 (++) Fill the SRAM_HandleTypeDef handle "Init" field with the allowed
mbed_official 87:085cde657901 26 values of the structure member.
mbed_official 87:085cde657901 27
mbed_official 87:085cde657901 28 (++) Fill the SRAM_HandleTypeDef handle "Instance" field with a predefined
mbed_official 87:085cde657901 29 base register instance for NOR or SRAM device
mbed_official 87:085cde657901 30
mbed_official 87:085cde657901 31 (++) Fill the SRAM_HandleTypeDef handle "Extended" field with a predefined
mbed_official 87:085cde657901 32 base register instance for NOR or SRAM extended mode
mbed_official 87:085cde657901 33
mbed_official 87:085cde657901 34 (#) Declare two FMC_NORSRAM_TimingTypeDef structures, for both normal and extended
mbed_official 87:085cde657901 35 mode timings; for example:
mbed_official 87:085cde657901 36 FMC_NORSRAM_TimingTypeDef Timing and FMC_NORSRAM_TimingTypeDef ExTiming;
mbed_official 87:085cde657901 37 and fill its fields with the allowed values of the structure member.
mbed_official 87:085cde657901 38
mbed_official 87:085cde657901 39 (#) Initialize the SRAM Controller by calling the function HAL_SRAM_Init(). This function
mbed_official 87:085cde657901 40 performs the following sequence:
mbed_official 87:085cde657901 41
mbed_official 87:085cde657901 42 (##) MSP hardware layer configuration using the function HAL_SRAM_MspInit()
mbed_official 87:085cde657901 43 (##) Control register configuration using the FMC NORSRAM interface function
mbed_official 87:085cde657901 44 FMC_NORSRAM_Init()
mbed_official 87:085cde657901 45 (##) Timing register configuration using the FMC NORSRAM interface function
mbed_official 87:085cde657901 46 FMC_NORSRAM_Timing_Init()
mbed_official 87:085cde657901 47 (##) Extended mode Timing register configuration using the FMC NORSRAM interface function
mbed_official 87:085cde657901 48 FMC_NORSRAM_Extended_Timing_Init()
mbed_official 87:085cde657901 49 (##) Enable the SRAM device using the macro __FMC_NORSRAM_ENABLE()
mbed_official 87:085cde657901 50
mbed_official 87:085cde657901 51 (#) At this stage you can perform read/write accesses from/to the memory connected
mbed_official 87:085cde657901 52 to the NOR/SRAM Bank. You can perform either polling or DMA transfer using the
mbed_official 87:085cde657901 53 following APIs:
mbed_official 87:085cde657901 54 (++) HAL_SRAM_Read()/HAL_SRAM_Write() for polling read/write access
mbed_official 87:085cde657901 55 (++) HAL_SRAM_Read_DMA()/HAL_SRAM_Write_DMA() for DMA read/write transfer
mbed_official 87:085cde657901 56
mbed_official 87:085cde657901 57 (#) You can also control the SRAM device by calling the control APIs HAL_SRAM_WriteOperation_Enable()/
mbed_official 87:085cde657901 58 HAL_SRAM_WriteOperation_Disable() to respectively enable/disable the SRAM write operation
mbed_official 87:085cde657901 59
mbed_official 87:085cde657901 60 (#) You can continuously monitor the SRAM device HAL state by calling the function
mbed_official 87:085cde657901 61 HAL_SRAM_GetState()
mbed_official 87:085cde657901 62
mbed_official 87:085cde657901 63 @endverbatim
mbed_official 87:085cde657901 64 ******************************************************************************
mbed_official 87:085cde657901 65 * @attention
mbed_official 87:085cde657901 66 *
mbed_official 87:085cde657901 67 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 87:085cde657901 68 *
mbed_official 87:085cde657901 69 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 87:085cde657901 70 * are permitted provided that the following conditions are met:
mbed_official 87:085cde657901 71 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 87:085cde657901 72 * this list of conditions and the following disclaimer.
mbed_official 87:085cde657901 73 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 87:085cde657901 74 * this list of conditions and the following disclaimer in the documentation
mbed_official 87:085cde657901 75 * and/or other materials provided with the distribution.
mbed_official 87:085cde657901 76 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 87:085cde657901 77 * may be used to endorse or promote products derived from this software
mbed_official 87:085cde657901 78 * without specific prior written permission.
mbed_official 87:085cde657901 79 *
mbed_official 87:085cde657901 80 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 87:085cde657901 81 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 87:085cde657901 82 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 87:085cde657901 83 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 87:085cde657901 84 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 87:085cde657901 85 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 87:085cde657901 86 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 87:085cde657901 87 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 87:085cde657901 88 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 87:085cde657901 89 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 87:085cde657901 90 *
mbed_official 87:085cde657901 91 ******************************************************************************
mbed_official 87:085cde657901 92 */
mbed_official 87:085cde657901 93
mbed_official 87:085cde657901 94 /* Includes ------------------------------------------------------------------*/
mbed_official 87:085cde657901 95 #include "stm32f4xx_hal.h"
mbed_official 87:085cde657901 96
mbed_official 87:085cde657901 97 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 87:085cde657901 98 * @{
mbed_official 87:085cde657901 99 */
mbed_official 87:085cde657901 100
mbed_official 87:085cde657901 101 /** @defgroup SRAM
mbed_official 87:085cde657901 102 * @brief SRAM driver modules
mbed_official 87:085cde657901 103 * @{
mbed_official 87:085cde657901 104 */
mbed_official 87:085cde657901 105 #ifdef HAL_SRAM_MODULE_ENABLED
mbed_official 87:085cde657901 106
mbed_official 87:085cde657901 107 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
mbed_official 87:085cde657901 108
mbed_official 87:085cde657901 109 /* Private typedef -----------------------------------------------------------*/
mbed_official 87:085cde657901 110 /* Private define ------------------------------------------------------------*/
mbed_official 87:085cde657901 111 /* Private macro -------------------------------------------------------------*/
mbed_official 87:085cde657901 112 /* Private variables ---------------------------------------------------------*/
mbed_official 87:085cde657901 113 /* Private function prototypes -----------------------------------------------*/
mbed_official 87:085cde657901 114
mbed_official 87:085cde657901 115 /* Private functions ---------------------------------------------------------*/
mbed_official 87:085cde657901 116
mbed_official 87:085cde657901 117 /** @defgroup SRAM_Private_Functions
mbed_official 87:085cde657901 118 * @{
mbed_official 87:085cde657901 119 */
mbed_official 87:085cde657901 120
mbed_official 87:085cde657901 121 /** @defgroup SRAM_Group1 Initialization and de-initialization functions
mbed_official 87:085cde657901 122 * @brief Initialization and Configuration functions
mbed_official 87:085cde657901 123 *
mbed_official 87:085cde657901 124 @verbatim
mbed_official 87:085cde657901 125 ==============================================================================
mbed_official 87:085cde657901 126 ##### SRAM Initialization and de_initialization functions #####
mbed_official 87:085cde657901 127 ==============================================================================
mbed_official 87:085cde657901 128 [..] This section provides functions allowing to initialize/de-initialize
mbed_official 87:085cde657901 129 the SRAM memory
mbed_official 87:085cde657901 130
mbed_official 87:085cde657901 131 @endverbatim
mbed_official 87:085cde657901 132 * @{
mbed_official 87:085cde657901 133 */
mbed_official 87:085cde657901 134
mbed_official 87:085cde657901 135 /**
mbed_official 87:085cde657901 136 * @brief Performs the SRAM device initialization sequence
mbed_official 87:085cde657901 137 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 138 * @param Timing: Pointer to SRAM control timing structure
mbed_official 87:085cde657901 139 * @param ExtTiming: Pointer to SRAM extended mode timing structure
mbed_official 87:085cde657901 140 * @retval HAL status
mbed_official 87:085cde657901 141 */
mbed_official 87:085cde657901 142 HAL_StatusTypeDef HAL_SRAM_Init(SRAM_HandleTypeDef *hsram, FMC_NORSRAM_TimingTypeDef *Timing, FMC_NORSRAM_TimingTypeDef *ExtTiming)
mbed_official 87:085cde657901 143 {
mbed_official 87:085cde657901 144 /* Check the SRAM handle parameter */
mbed_official 87:085cde657901 145 if(hsram == NULL)
mbed_official 87:085cde657901 146 {
mbed_official 87:085cde657901 147 return HAL_ERROR;
mbed_official 87:085cde657901 148 }
mbed_official 87:085cde657901 149
mbed_official 87:085cde657901 150 if(hsram->State == HAL_SRAM_STATE_RESET)
mbed_official 87:085cde657901 151 {
mbed_official 87:085cde657901 152 /* Initialize the low level hardware (MSP) */
mbed_official 87:085cde657901 153 HAL_SRAM_MspInit(hsram);
mbed_official 87:085cde657901 154 }
mbed_official 87:085cde657901 155
mbed_official 87:085cde657901 156 /* Initialize SRAM control Interface */
mbed_official 87:085cde657901 157 FMC_NORSRAM_Init(hsram->Instance, &(hsram->Init));
mbed_official 87:085cde657901 158
mbed_official 87:085cde657901 159 /* Initialize SRAM timing Interface */
mbed_official 87:085cde657901 160 FMC_NORSRAM_Timing_Init(hsram->Instance, Timing, hsram->Init.NSBank);
mbed_official 87:085cde657901 161
mbed_official 87:085cde657901 162 /* Initialize SRAM extended mode timing Interface */
mbed_official 87:085cde657901 163 FMC_NORSRAM_Extended_Timing_Init(hsram->Extended, ExtTiming, hsram->Init.NSBank, hsram->Init.ExtendedMode);
mbed_official 87:085cde657901 164
mbed_official 87:085cde657901 165 /* Enable the NORSRAM device */
mbed_official 87:085cde657901 166 __FMC_NORSRAM_ENABLE(hsram->Instance, hsram->Init.NSBank);
mbed_official 87:085cde657901 167
mbed_official 87:085cde657901 168 return HAL_OK;
mbed_official 87:085cde657901 169 }
mbed_official 87:085cde657901 170
mbed_official 87:085cde657901 171 /**
mbed_official 87:085cde657901 172 * @brief Performs the SRAM device De-initialization sequence.
mbed_official 87:085cde657901 173 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 174 * @retval HAL status
mbed_official 87:085cde657901 175 */
mbed_official 87:085cde657901 176 HAL_StatusTypeDef HAL_SRAM_DeInit(SRAM_HandleTypeDef *hsram)
mbed_official 87:085cde657901 177 {
mbed_official 87:085cde657901 178 /* De-Initialize the low level hardware (MSP) */
mbed_official 87:085cde657901 179 HAL_SRAM_MspDeInit(hsram);
mbed_official 87:085cde657901 180
mbed_official 87:085cde657901 181 /* Configure the SRAM registers with their reset values */
mbed_official 87:085cde657901 182 FMC_NORSRAM_DeInit(hsram->Instance, hsram->Extended, hsram->Init.NSBank);
mbed_official 87:085cde657901 183
mbed_official 87:085cde657901 184 return HAL_OK;
mbed_official 87:085cde657901 185 }
mbed_official 87:085cde657901 186
mbed_official 87:085cde657901 187 /**
mbed_official 87:085cde657901 188 * @brief SRAM MSP Init.
mbed_official 87:085cde657901 189 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 190 * @retval None
mbed_official 87:085cde657901 191 */
mbed_official 87:085cde657901 192 __weak void HAL_SRAM_MspInit(SRAM_HandleTypeDef *hsram)
mbed_official 87:085cde657901 193 {
mbed_official 87:085cde657901 194 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 195 the HAL_SRAM_MspInit could be implemented in the user file
mbed_official 87:085cde657901 196 */
mbed_official 87:085cde657901 197 }
mbed_official 87:085cde657901 198
mbed_official 87:085cde657901 199 /**
mbed_official 87:085cde657901 200 * @brief SRAM MSP DeInit.
mbed_official 87:085cde657901 201 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 202 * @retval None
mbed_official 87:085cde657901 203 */
mbed_official 87:085cde657901 204 __weak void HAL_SRAM_MspDeInit(SRAM_HandleTypeDef *hsram)
mbed_official 87:085cde657901 205 {
mbed_official 87:085cde657901 206 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 207 the HAL_SRAM_MspDeInit could be implemented in the user file
mbed_official 87:085cde657901 208 */
mbed_official 87:085cde657901 209 }
mbed_official 87:085cde657901 210
mbed_official 87:085cde657901 211 /**
mbed_official 87:085cde657901 212 * @brief DMA transfer complete callback.
mbed_official 87:085cde657901 213 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 214 * @retval none
mbed_official 87:085cde657901 215 */
mbed_official 87:085cde657901 216 __weak void HAL_SRAM_DMA_XferCpltCallback(DMA_HandleTypeDef *hdma)
mbed_official 87:085cde657901 217 {
mbed_official 87:085cde657901 218 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 219 the HAL_SRAM_DMA_XferCpltCallback could be implemented in the user file
mbed_official 87:085cde657901 220 */
mbed_official 87:085cde657901 221 }
mbed_official 87:085cde657901 222
mbed_official 87:085cde657901 223 /**
mbed_official 87:085cde657901 224 * @brief DMA transfer complete error callback.
mbed_official 87:085cde657901 225 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 226 * @retval none
mbed_official 87:085cde657901 227 */
mbed_official 87:085cde657901 228 __weak void HAL_SRAM_DMA_XferErrorCallback(DMA_HandleTypeDef *hdma)
mbed_official 87:085cde657901 229 {
mbed_official 87:085cde657901 230 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 231 the HAL_SRAM_DMA_XferErrorCallback could be implemented in the user file
mbed_official 87:085cde657901 232 */
mbed_official 87:085cde657901 233 }
mbed_official 87:085cde657901 234
mbed_official 87:085cde657901 235 /**
mbed_official 87:085cde657901 236 * @}
mbed_official 87:085cde657901 237 */
mbed_official 87:085cde657901 238
mbed_official 87:085cde657901 239 /** @defgroup SRAM_Group2 Input and Output functions
mbed_official 87:085cde657901 240 * @brief Input Output and memory control functions
mbed_official 87:085cde657901 241 *
mbed_official 87:085cde657901 242 @verbatim
mbed_official 87:085cde657901 243 ==============================================================================
mbed_official 87:085cde657901 244 ##### SRAM Input and Output functions #####
mbed_official 87:085cde657901 245 ==============================================================================
mbed_official 87:085cde657901 246 [..]
mbed_official 87:085cde657901 247 This section provides functions allowing to use and control the SRAM memory
mbed_official 87:085cde657901 248
mbed_official 87:085cde657901 249 @endverbatim
mbed_official 87:085cde657901 250 * @{
mbed_official 87:085cde657901 251 */
mbed_official 87:085cde657901 252
mbed_official 87:085cde657901 253 /**
mbed_official 87:085cde657901 254 * @brief Reads 8-bit buffer from SRAM memory.
mbed_official 87:085cde657901 255 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 256 * @param pAddress: Pointer to read start address
mbed_official 87:085cde657901 257 * @param pDstBuffer: Pointer to destination buffer
mbed_official 87:085cde657901 258 * @param BufferSize: Size of the buffer to read from memory
mbed_official 87:085cde657901 259 * @retval HAL status
mbed_official 87:085cde657901 260 */
mbed_official 87:085cde657901 261 HAL_StatusTypeDef HAL_SRAM_Read_8b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint8_t *pDstBuffer, uint32_t BufferSize)
mbed_official 87:085cde657901 262 {
mbed_official 87:085cde657901 263 __IO uint8_t * pSramAddress = (uint8_t *)pAddress;
mbed_official 87:085cde657901 264
mbed_official 87:085cde657901 265 /* Process Locked */
mbed_official 87:085cde657901 266 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 267
mbed_official 87:085cde657901 268 /* Update the SRAM controller state */
mbed_official 87:085cde657901 269 hsram->State = HAL_SRAM_STATE_BUSY;
mbed_official 87:085cde657901 270
mbed_official 87:085cde657901 271 /* Read data from memory */
mbed_official 87:085cde657901 272 for(; BufferSize != 0; BufferSize--)
mbed_official 87:085cde657901 273 {
mbed_official 87:085cde657901 274 *pDstBuffer = *(__IO uint8_t *)pSramAddress;
mbed_official 87:085cde657901 275 pDstBuffer++;
mbed_official 87:085cde657901 276 pSramAddress++;
mbed_official 87:085cde657901 277 }
mbed_official 87:085cde657901 278
mbed_official 87:085cde657901 279 /* Update the SRAM controller state */
mbed_official 87:085cde657901 280 hsram->State = HAL_SRAM_STATE_READY;
mbed_official 87:085cde657901 281
mbed_official 87:085cde657901 282 /* Process unlocked */
mbed_official 87:085cde657901 283 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 284
mbed_official 87:085cde657901 285 return HAL_OK;
mbed_official 87:085cde657901 286 }
mbed_official 87:085cde657901 287
mbed_official 87:085cde657901 288 /**
mbed_official 87:085cde657901 289 * @brief Writes 8-bit buffer to SRAM memory.
mbed_official 87:085cde657901 290 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 291 * @param pAddress: Pointer to write start address
mbed_official 87:085cde657901 292 * @param pSrcBuffer: Pointer to source buffer to write
mbed_official 87:085cde657901 293 * @param BufferSize: Size of the buffer to write to memory
mbed_official 87:085cde657901 294 * @retval HAL status
mbed_official 87:085cde657901 295 */
mbed_official 87:085cde657901 296 HAL_StatusTypeDef HAL_SRAM_Write_8b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint8_t *pSrcBuffer, uint32_t BufferSize)
mbed_official 87:085cde657901 297 {
mbed_official 87:085cde657901 298 __IO uint8_t * pSramAddress = (uint8_t *)pAddress;
mbed_official 87:085cde657901 299
mbed_official 87:085cde657901 300 /* Check the SRAM controller state */
mbed_official 87:085cde657901 301 if(hsram->State == HAL_SRAM_STATE_PROTECTED)
mbed_official 87:085cde657901 302 {
mbed_official 87:085cde657901 303 return HAL_ERROR;
mbed_official 87:085cde657901 304 }
mbed_official 87:085cde657901 305
mbed_official 87:085cde657901 306 /* Process Locked */
mbed_official 87:085cde657901 307 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 308
mbed_official 87:085cde657901 309 /* Update the SRAM controller state */
mbed_official 87:085cde657901 310 hsram->State = HAL_SRAM_STATE_BUSY;
mbed_official 87:085cde657901 311
mbed_official 87:085cde657901 312 /* Write data to memory */
mbed_official 87:085cde657901 313 for(; BufferSize != 0; BufferSize--)
mbed_official 87:085cde657901 314 {
mbed_official 87:085cde657901 315 *(__IO uint8_t *)pSramAddress = *pSrcBuffer;
mbed_official 87:085cde657901 316 pSrcBuffer++;
mbed_official 87:085cde657901 317 pSramAddress++;
mbed_official 87:085cde657901 318 }
mbed_official 87:085cde657901 319
mbed_official 87:085cde657901 320 /* Update the SRAM controller state */
mbed_official 87:085cde657901 321 hsram->State = HAL_SRAM_STATE_READY;
mbed_official 87:085cde657901 322
mbed_official 87:085cde657901 323 /* Process unlocked */
mbed_official 87:085cde657901 324 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 325
mbed_official 87:085cde657901 326 return HAL_OK;
mbed_official 87:085cde657901 327 }
mbed_official 87:085cde657901 328
mbed_official 87:085cde657901 329 /**
mbed_official 87:085cde657901 330 * @brief Reads 16-bit buffer from SRAM memory.
mbed_official 87:085cde657901 331 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 332 * @param pAddress: Pointer to read start address
mbed_official 87:085cde657901 333 * @param pDstBuffer: Pointer to destination buffer
mbed_official 87:085cde657901 334 * @param BufferSize: Size of the buffer to read from memory
mbed_official 87:085cde657901 335 * @retval HAL status
mbed_official 87:085cde657901 336 */
mbed_official 87:085cde657901 337 HAL_StatusTypeDef HAL_SRAM_Read_16b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint16_t *pDstBuffer, uint32_t BufferSize)
mbed_official 87:085cde657901 338 {
mbed_official 87:085cde657901 339 __IO uint16_t * pSramAddress = (uint16_t *)pAddress;
mbed_official 87:085cde657901 340
mbed_official 87:085cde657901 341 /* Process Locked */
mbed_official 87:085cde657901 342 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 343
mbed_official 87:085cde657901 344 /* Update the SRAM controller state */
mbed_official 87:085cde657901 345 hsram->State = HAL_SRAM_STATE_BUSY;
mbed_official 87:085cde657901 346
mbed_official 87:085cde657901 347 /* Read data from memory */
mbed_official 87:085cde657901 348 for(; BufferSize != 0; BufferSize--)
mbed_official 87:085cde657901 349 {
mbed_official 87:085cde657901 350 *pDstBuffer = *(__IO uint16_t *)pSramAddress;
mbed_official 87:085cde657901 351 pDstBuffer++;
mbed_official 87:085cde657901 352 pSramAddress++;
mbed_official 87:085cde657901 353 }
mbed_official 87:085cde657901 354
mbed_official 87:085cde657901 355 /* Update the SRAM controller state */
mbed_official 87:085cde657901 356 hsram->State = HAL_SRAM_STATE_READY;
mbed_official 87:085cde657901 357
mbed_official 87:085cde657901 358 /* Process unlocked */
mbed_official 87:085cde657901 359 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 360
mbed_official 87:085cde657901 361 return HAL_OK;
mbed_official 87:085cde657901 362 }
mbed_official 87:085cde657901 363
mbed_official 87:085cde657901 364 /**
mbed_official 87:085cde657901 365 * @brief Writes 16-bit buffer to SRAM memory.
mbed_official 87:085cde657901 366 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 367 * @param pAddress: Pointer to write start address
mbed_official 87:085cde657901 368 * @param pSrcBuffer: Pointer to source buffer to write
mbed_official 87:085cde657901 369 * @param BufferSize: Size of the buffer to write to memory
mbed_official 87:085cde657901 370 * @retval HAL status
mbed_official 87:085cde657901 371 */
mbed_official 87:085cde657901 372 HAL_StatusTypeDef HAL_SRAM_Write_16b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint16_t *pSrcBuffer, uint32_t BufferSize)
mbed_official 87:085cde657901 373 {
mbed_official 87:085cde657901 374 __IO uint16_t * pSramAddress = (uint16_t *)pAddress;
mbed_official 87:085cde657901 375
mbed_official 87:085cde657901 376 /* Check the SRAM controller state */
mbed_official 87:085cde657901 377 if(hsram->State == HAL_SRAM_STATE_PROTECTED)
mbed_official 87:085cde657901 378 {
mbed_official 87:085cde657901 379 return HAL_ERROR;
mbed_official 87:085cde657901 380 }
mbed_official 87:085cde657901 381
mbed_official 87:085cde657901 382 /* Process Locked */
mbed_official 87:085cde657901 383 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 384
mbed_official 87:085cde657901 385 /* Update the SRAM controller state */
mbed_official 87:085cde657901 386 hsram->State = HAL_SRAM_STATE_BUSY;
mbed_official 87:085cde657901 387
mbed_official 87:085cde657901 388 /* Write data to memory */
mbed_official 87:085cde657901 389 for(; BufferSize != 0; BufferSize--)
mbed_official 87:085cde657901 390 {
mbed_official 87:085cde657901 391 *(__IO uint16_t *)pSramAddress = *pSrcBuffer;
mbed_official 87:085cde657901 392 pSrcBuffer++;
mbed_official 87:085cde657901 393 pSramAddress++;
mbed_official 87:085cde657901 394 }
mbed_official 87:085cde657901 395
mbed_official 87:085cde657901 396 /* Update the SRAM controller state */
mbed_official 87:085cde657901 397 hsram->State = HAL_SRAM_STATE_READY;
mbed_official 87:085cde657901 398
mbed_official 87:085cde657901 399 /* Process unlocked */
mbed_official 87:085cde657901 400 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 401
mbed_official 87:085cde657901 402 return HAL_OK;
mbed_official 87:085cde657901 403 }
mbed_official 87:085cde657901 404
mbed_official 87:085cde657901 405 /**
mbed_official 87:085cde657901 406 * @brief Reads 32-bit buffer from SRAM memory.
mbed_official 87:085cde657901 407 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 408 * @param pAddress: Pointer to read start address
mbed_official 87:085cde657901 409 * @param pDstBuffer: Pointer to destination buffer
mbed_official 87:085cde657901 410 * @param BufferSize: Size of the buffer to read from memory
mbed_official 87:085cde657901 411 * @retval HAL status
mbed_official 87:085cde657901 412 */
mbed_official 87:085cde657901 413 HAL_StatusTypeDef HAL_SRAM_Read_32b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint32_t *pDstBuffer, uint32_t BufferSize)
mbed_official 87:085cde657901 414 {
mbed_official 87:085cde657901 415 /* Process Locked */
mbed_official 87:085cde657901 416 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 417
mbed_official 87:085cde657901 418 /* Update the SRAM controller state */
mbed_official 87:085cde657901 419 hsram->State = HAL_SRAM_STATE_BUSY;
mbed_official 87:085cde657901 420
mbed_official 87:085cde657901 421 /* Read data from memory */
mbed_official 87:085cde657901 422 for(; BufferSize != 0; BufferSize--)
mbed_official 87:085cde657901 423 {
mbed_official 87:085cde657901 424 *pDstBuffer = *(__IO uint32_t *)pAddress;
mbed_official 87:085cde657901 425 pDstBuffer++;
mbed_official 87:085cde657901 426 pAddress++;
mbed_official 87:085cde657901 427 }
mbed_official 87:085cde657901 428
mbed_official 87:085cde657901 429 /* Update the SRAM controller state */
mbed_official 87:085cde657901 430 hsram->State = HAL_SRAM_STATE_READY;
mbed_official 87:085cde657901 431
mbed_official 87:085cde657901 432 /* Process unlocked */
mbed_official 87:085cde657901 433 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 434
mbed_official 87:085cde657901 435 return HAL_OK;
mbed_official 87:085cde657901 436 }
mbed_official 87:085cde657901 437
mbed_official 87:085cde657901 438 /**
mbed_official 87:085cde657901 439 * @brief Writes 32-bit buffer to SRAM memory.
mbed_official 87:085cde657901 440 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 441 * @param pAddress: Pointer to write start address
mbed_official 87:085cde657901 442 * @param pSrcBuffer: Pointer to source buffer to write
mbed_official 87:085cde657901 443 * @param BufferSize: Size of the buffer to write to memory
mbed_official 87:085cde657901 444 * @retval HAL status
mbed_official 87:085cde657901 445 */
mbed_official 87:085cde657901 446 HAL_StatusTypeDef HAL_SRAM_Write_32b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint32_t *pSrcBuffer, uint32_t BufferSize)
mbed_official 87:085cde657901 447 {
mbed_official 87:085cde657901 448 /* Check the SRAM controller state */
mbed_official 87:085cde657901 449 if(hsram->State == HAL_SRAM_STATE_PROTECTED)
mbed_official 87:085cde657901 450 {
mbed_official 87:085cde657901 451 return HAL_ERROR;
mbed_official 87:085cde657901 452 }
mbed_official 87:085cde657901 453
mbed_official 87:085cde657901 454 /* Process Locked */
mbed_official 87:085cde657901 455 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 456
mbed_official 87:085cde657901 457 /* Update the SRAM controller state */
mbed_official 87:085cde657901 458 hsram->State = HAL_SRAM_STATE_BUSY;
mbed_official 87:085cde657901 459
mbed_official 87:085cde657901 460 /* Write data to memory */
mbed_official 87:085cde657901 461 for(; BufferSize != 0; BufferSize--)
mbed_official 87:085cde657901 462 {
mbed_official 87:085cde657901 463 *(__IO uint32_t *)pAddress = *pSrcBuffer;
mbed_official 87:085cde657901 464 pSrcBuffer++;
mbed_official 87:085cde657901 465 pAddress++;
mbed_official 87:085cde657901 466 }
mbed_official 87:085cde657901 467
mbed_official 87:085cde657901 468 /* Update the SRAM controller state */
mbed_official 87:085cde657901 469 hsram->State = HAL_SRAM_STATE_READY;
mbed_official 87:085cde657901 470
mbed_official 87:085cde657901 471 /* Process unlocked */
mbed_official 87:085cde657901 472 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 473
mbed_official 87:085cde657901 474 return HAL_OK;
mbed_official 87:085cde657901 475 }
mbed_official 87:085cde657901 476
mbed_official 87:085cde657901 477 /**
mbed_official 87:085cde657901 478 * @brief Reads a Words data from the SRAM memory using DMA transfer.
mbed_official 87:085cde657901 479 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 480 * @param pAddress: Pointer to read start address
mbed_official 87:085cde657901 481 * @param pDstBuffer: Pointer to destination buffer
mbed_official 87:085cde657901 482 * @param BufferSize: Size of the buffer to read from memory
mbed_official 87:085cde657901 483 * @retval HAL status
mbed_official 87:085cde657901 484 */
mbed_official 87:085cde657901 485 HAL_StatusTypeDef HAL_SRAM_Read_DMA(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint32_t *pDstBuffer, uint32_t BufferSize)
mbed_official 87:085cde657901 486 {
mbed_official 87:085cde657901 487 /* Process Locked */
mbed_official 87:085cde657901 488 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 489
mbed_official 87:085cde657901 490 /* Update the SRAM controller state */
mbed_official 87:085cde657901 491 hsram->State = HAL_SRAM_STATE_BUSY;
mbed_official 87:085cde657901 492
mbed_official 87:085cde657901 493 /* Configure DMA user callbacks */
mbed_official 87:085cde657901 494 hsram->hdma->XferCpltCallback = HAL_SRAM_DMA_XferCpltCallback;
mbed_official 87:085cde657901 495 hsram->hdma->XferErrorCallback = HAL_SRAM_DMA_XferErrorCallback;
mbed_official 87:085cde657901 496
mbed_official 87:085cde657901 497 /* Enable the DMA Stream */
mbed_official 87:085cde657901 498 HAL_DMA_Start_IT(hsram->hdma, (uint32_t)pAddress, (uint32_t)pDstBuffer, (uint32_t)BufferSize);
mbed_official 87:085cde657901 499
mbed_official 87:085cde657901 500 /* Update the SRAM controller state */
mbed_official 87:085cde657901 501 hsram->State = HAL_SRAM_STATE_READY;
mbed_official 87:085cde657901 502
mbed_official 87:085cde657901 503 /* Process unlocked */
mbed_official 87:085cde657901 504 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 505
mbed_official 87:085cde657901 506 return HAL_OK;
mbed_official 87:085cde657901 507 }
mbed_official 87:085cde657901 508
mbed_official 87:085cde657901 509 /**
mbed_official 87:085cde657901 510 * @brief Writes a Words data buffer to SRAM memory using DMA transfer.
mbed_official 87:085cde657901 511 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 512 * @param pAddress: Pointer to write start address
mbed_official 87:085cde657901 513 * @param pSrcBuffer: Pointer to source buffer to write
mbed_official 87:085cde657901 514 * @param BufferSize: Size of the buffer to write to memory
mbed_official 87:085cde657901 515 * @retval HAL status
mbed_official 87:085cde657901 516 */
mbed_official 87:085cde657901 517 HAL_StatusTypeDef HAL_SRAM_Write_DMA(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint32_t *pSrcBuffer, uint32_t BufferSize)
mbed_official 87:085cde657901 518 {
mbed_official 87:085cde657901 519 /* Check the SRAM controller state */
mbed_official 87:085cde657901 520 if(hsram->State == HAL_SRAM_STATE_PROTECTED)
mbed_official 87:085cde657901 521 {
mbed_official 87:085cde657901 522 return HAL_ERROR;
mbed_official 87:085cde657901 523 }
mbed_official 87:085cde657901 524
mbed_official 87:085cde657901 525 /* Process Locked */
mbed_official 87:085cde657901 526 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 527
mbed_official 87:085cde657901 528 /* Update the SRAM controller state */
mbed_official 87:085cde657901 529 hsram->State = HAL_SRAM_STATE_BUSY;
mbed_official 87:085cde657901 530
mbed_official 87:085cde657901 531 /* Configure DMA user callbacks */
mbed_official 87:085cde657901 532 hsram->hdma->XferCpltCallback = HAL_SRAM_DMA_XferCpltCallback;
mbed_official 87:085cde657901 533 hsram->hdma->XferErrorCallback = HAL_SRAM_DMA_XferErrorCallback;
mbed_official 87:085cde657901 534
mbed_official 87:085cde657901 535 /* Enable the DMA Stream */
mbed_official 87:085cde657901 536 HAL_DMA_Start_IT(hsram->hdma, (uint32_t)pSrcBuffer, (uint32_t)pAddress, (uint32_t)BufferSize);
mbed_official 87:085cde657901 537
mbed_official 87:085cde657901 538 /* Update the SRAM controller state */
mbed_official 87:085cde657901 539 hsram->State = HAL_SRAM_STATE_READY;
mbed_official 87:085cde657901 540
mbed_official 87:085cde657901 541 /* Process unlocked */
mbed_official 87:085cde657901 542 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 543
mbed_official 87:085cde657901 544 return HAL_OK;
mbed_official 87:085cde657901 545 }
mbed_official 87:085cde657901 546
mbed_official 87:085cde657901 547 /**
mbed_official 87:085cde657901 548 * @}
mbed_official 87:085cde657901 549 */
mbed_official 87:085cde657901 550
mbed_official 87:085cde657901 551 /** @defgroup SRAM_Group3 Control functions
mbed_official 87:085cde657901 552 * @brief management functions
mbed_official 87:085cde657901 553 *
mbed_official 87:085cde657901 554 @verbatim
mbed_official 87:085cde657901 555 ==============================================================================
mbed_official 87:085cde657901 556 ##### SRAM Control functions #####
mbed_official 87:085cde657901 557 ==============================================================================
mbed_official 87:085cde657901 558 [..]
mbed_official 87:085cde657901 559 This subsection provides a set of functions allowing to control dynamically
mbed_official 87:085cde657901 560 the SRAM interface.
mbed_official 87:085cde657901 561
mbed_official 87:085cde657901 562 @endverbatim
mbed_official 87:085cde657901 563 * @{
mbed_official 87:085cde657901 564 */
mbed_official 87:085cde657901 565
mbed_official 87:085cde657901 566 /**
mbed_official 87:085cde657901 567 * @brief Enables dynamically SRAM write operation.
mbed_official 87:085cde657901 568 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 569 * @retval HAL status
mbed_official 87:085cde657901 570 */
mbed_official 87:085cde657901 571 HAL_StatusTypeDef HAL_SRAM_WriteOperation_Enable(SRAM_HandleTypeDef *hsram)
mbed_official 87:085cde657901 572 {
mbed_official 87:085cde657901 573 /* Process Locked */
mbed_official 87:085cde657901 574 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 575
mbed_official 87:085cde657901 576 /* Enable write operation */
mbed_official 87:085cde657901 577 FMC_NORSRAM_WriteOperation_Enable(hsram->Instance, hsram->Init.NSBank);
mbed_official 87:085cde657901 578
mbed_official 87:085cde657901 579 /* Update the SRAM controller state */
mbed_official 87:085cde657901 580 hsram->State = HAL_SRAM_STATE_READY;
mbed_official 87:085cde657901 581
mbed_official 87:085cde657901 582 /* Process unlocked */
mbed_official 87:085cde657901 583 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 584
mbed_official 87:085cde657901 585 return HAL_OK;
mbed_official 87:085cde657901 586 }
mbed_official 87:085cde657901 587
mbed_official 87:085cde657901 588 /**
mbed_official 87:085cde657901 589 * @brief Disables dynamically SRAM write operation.
mbed_official 87:085cde657901 590 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 591 * @retval HAL status
mbed_official 87:085cde657901 592 */
mbed_official 87:085cde657901 593 HAL_StatusTypeDef HAL_SRAM_WriteOperation_Disable(SRAM_HandleTypeDef *hsram)
mbed_official 87:085cde657901 594 {
mbed_official 87:085cde657901 595 /* Process Locked */
mbed_official 87:085cde657901 596 __HAL_LOCK(hsram);
mbed_official 87:085cde657901 597
mbed_official 87:085cde657901 598 /* Update the SRAM controller state */
mbed_official 87:085cde657901 599 hsram->State = HAL_SRAM_STATE_BUSY;
mbed_official 87:085cde657901 600
mbed_official 87:085cde657901 601 /* Disable write operation */
mbed_official 87:085cde657901 602 FMC_NORSRAM_WriteOperation_Disable(hsram->Instance, hsram->Init.NSBank);
mbed_official 87:085cde657901 603
mbed_official 87:085cde657901 604 /* Update the SRAM controller state */
mbed_official 87:085cde657901 605 hsram->State = HAL_SRAM_STATE_PROTECTED;
mbed_official 87:085cde657901 606
mbed_official 87:085cde657901 607 /* Process unlocked */
mbed_official 87:085cde657901 608 __HAL_UNLOCK(hsram);
mbed_official 87:085cde657901 609
mbed_official 87:085cde657901 610 return HAL_OK;
mbed_official 87:085cde657901 611 }
mbed_official 87:085cde657901 612
mbed_official 87:085cde657901 613 /**
mbed_official 87:085cde657901 614 * @}
mbed_official 87:085cde657901 615 */
mbed_official 87:085cde657901 616
mbed_official 87:085cde657901 617 /** @defgroup SRAM_Group4 State functions
mbed_official 87:085cde657901 618 * @brief Peripheral State functions
mbed_official 87:085cde657901 619 *
mbed_official 87:085cde657901 620 @verbatim
mbed_official 87:085cde657901 621 ==============================================================================
mbed_official 87:085cde657901 622 ##### SRAM State functions #####
mbed_official 87:085cde657901 623 ==============================================================================
mbed_official 87:085cde657901 624 [..]
mbed_official 87:085cde657901 625 This subsection permits to get in run-time the status of the SRAM controller
mbed_official 87:085cde657901 626 and the data flow.
mbed_official 87:085cde657901 627
mbed_official 87:085cde657901 628 @endverbatim
mbed_official 87:085cde657901 629 * @{
mbed_official 87:085cde657901 630 */
mbed_official 87:085cde657901 631
mbed_official 87:085cde657901 632 /**
mbed_official 87:085cde657901 633 * @brief Returns the SRAM controller state
mbed_official 87:085cde657901 634 * @param hsram: pointer to SRAM handle
mbed_official 87:085cde657901 635 * @retval SRAM controller state
mbed_official 87:085cde657901 636 */
mbed_official 87:085cde657901 637 HAL_SRAM_StateTypeDef HAL_SRAM_GetState(SRAM_HandleTypeDef *hsram)
mbed_official 87:085cde657901 638 {
mbed_official 87:085cde657901 639 return hsram->State;
mbed_official 87:085cde657901 640 }
mbed_official 87:085cde657901 641
mbed_official 87:085cde657901 642 /**
mbed_official 87:085cde657901 643 * @}
mbed_official 87:085cde657901 644 */
mbed_official 87:085cde657901 645
mbed_official 87:085cde657901 646 /**
mbed_official 87:085cde657901 647 * @}
mbed_official 87:085cde657901 648 */
mbed_official 87:085cde657901 649 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */
mbed_official 87:085cde657901 650 #endif /* HAL_SRAM_MODULE_ENABLED */
mbed_official 87:085cde657901 651 /**
mbed_official 87:085cde657901 652 * @}
mbed_official 87:085cde657901 653 */
mbed_official 87:085cde657901 654
mbed_official 87:085cde657901 655 /**
mbed_official 87:085cde657901 656 * @}
mbed_official 87:085cde657901 657 */
mbed_official 87:085cde657901 658
mbed_official 87:085cde657901 659 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/