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:
Wed Feb 26 09:45:12 2014 +0000
Revision:
106:ced8cbb51063
Parent:
87:085cde657901
Child:
226:b062af740e40
Synchronized with git revision 4222735eff5868389433f0e9271976b39c8115cd

Full URL: https://github.com/mbedmicro/mbed/commit/4222735eff5868389433f0e9271976b39c8115cd/

[NUCLEO_xxx] Update STM32CubeF4 driver V1.0.0 + update license

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_ll_fsmc.c
mbed_official 87:085cde657901 4 * @author MCD Application Team
mbed_official 106:ced8cbb51063 5 * @version V1.0.0
mbed_official 106:ced8cbb51063 6 * @date 18-February-2014
mbed_official 87:085cde657901 7 * @brief FSMC Low Layer HAL module driver.
mbed_official 87:085cde657901 8 *
mbed_official 87:085cde657901 9 * This file provides firmware functions to manage the following
mbed_official 87:085cde657901 10 * functionalities of the Flexible Static Memory Controller (FSMC) peripheral memories:
mbed_official 87:085cde657901 11 * + Initialization/de-initialization functions
mbed_official 87:085cde657901 12 * + Peripheral Control functions
mbed_official 87:085cde657901 13 * + Peripheral State functions
mbed_official 87:085cde657901 14 *
mbed_official 87:085cde657901 15 @verbatim
mbed_official 87:085cde657901 16 ==============================================================================
mbed_official 87:085cde657901 17 ##### FSMC peripheral features #####
mbed_official 87:085cde657901 18 ==============================================================================
mbed_official 87:085cde657901 19 [..] The Flexible static memory controller (FSMC) includes two memory controllers:
mbed_official 87:085cde657901 20 (+) The NOR/PSRAM memory controller
mbed_official 87:085cde657901 21 (+) The NAND/PC Card memory controller
mbed_official 87:085cde657901 22
mbed_official 87:085cde657901 23 [..] The FSMC functional block makes the interface with synchronous and asynchronous static
mbed_official 87:085cde657901 24 memories, SDRAM memories, and 16-bit PC memory cards. Its main purposes are:
mbed_official 87:085cde657901 25 (+) to translate AHB transactions into the appropriate external device protocol.
mbed_official 87:085cde657901 26 (+) to meet the access time requirements of the external memory devices.
mbed_official 87:085cde657901 27
mbed_official 87:085cde657901 28 [..] All external memories share the addresses, data and control signals with the controller.
mbed_official 87:085cde657901 29 Each external device is accessed by means of a unique Chip Select. The FSMC performs
mbed_official 87:085cde657901 30 only one access at a time to an external device.
mbed_official 87:085cde657901 31 The main features of the FSMC controller are the following:
mbed_official 87:085cde657901 32 (+) Interface with static-memory mapped devices including:
mbed_official 87:085cde657901 33 (++) Static random access memory (SRAM).
mbed_official 87:085cde657901 34 (++) Read-only memory (ROM).
mbed_official 87:085cde657901 35 (++) NOR Flash memory/OneNAND Flash memory.
mbed_official 87:085cde657901 36 (++) PSRAM (4 memory banks).
mbed_official 87:085cde657901 37 (++) 16-bit PC Card compatible devices.
mbed_official 87:085cde657901 38 (++) Two banks of NAND Flash memory with ECC hardware to check up to 8 Kbytes of
mbed_official 87:085cde657901 39 data.
mbed_official 87:085cde657901 40 (+) Independent Chip Select control for each memory bank.
mbed_official 87:085cde657901 41 (+) Independent configuration for each memory bank.
mbed_official 87:085cde657901 42
mbed_official 87:085cde657901 43 @endverbatim
mbed_official 87:085cde657901 44 ******************************************************************************
mbed_official 87:085cde657901 45 * @attention
mbed_official 87:085cde657901 46 *
mbed_official 87:085cde657901 47 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 87:085cde657901 48 *
mbed_official 87:085cde657901 49 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 87:085cde657901 50 * are permitted provided that the following conditions are met:
mbed_official 87:085cde657901 51 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 87:085cde657901 52 * this list of conditions and the following disclaimer.
mbed_official 87:085cde657901 53 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 87:085cde657901 54 * this list of conditions and the following disclaimer in the documentation
mbed_official 87:085cde657901 55 * and/or other materials provided with the distribution.
mbed_official 87:085cde657901 56 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 87:085cde657901 57 * may be used to endorse or promote products derived from this software
mbed_official 87:085cde657901 58 * without specific prior written permission.
mbed_official 87:085cde657901 59 *
mbed_official 87:085cde657901 60 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 87:085cde657901 61 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 87:085cde657901 62 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 87:085cde657901 63 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 87:085cde657901 64 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 87:085cde657901 65 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 87:085cde657901 66 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 87:085cde657901 67 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 87:085cde657901 68 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 87:085cde657901 69 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 87:085cde657901 70 *
mbed_official 87:085cde657901 71 ******************************************************************************
mbed_official 87:085cde657901 72 */
mbed_official 87:085cde657901 73
mbed_official 87:085cde657901 74 /* Includes ------------------------------------------------------------------*/
mbed_official 87:085cde657901 75 #include "stm32f4xx_hal.h"
mbed_official 87:085cde657901 76
mbed_official 87:085cde657901 77 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 87:085cde657901 78 * @{
mbed_official 87:085cde657901 79 */
mbed_official 87:085cde657901 80
mbed_official 87:085cde657901 81 /** @defgroup FSMC
mbed_official 87:085cde657901 82 * @brief FSMC driver modules
mbed_official 87:085cde657901 83 * @{
mbed_official 87:085cde657901 84 */
mbed_official 87:085cde657901 85
mbed_official 87:085cde657901 86 #if defined (HAL_SRAM_MODULE_ENABLED) || defined(HAL_NOR_MODULE_ENABLED) || defined(HAL_NAND_MODULE_ENABLED) || defined(HAL_PCCARD_MODULE_ENABLED)
mbed_official 87:085cde657901 87
mbed_official 87:085cde657901 88 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)
mbed_official 87:085cde657901 89
mbed_official 87:085cde657901 90 /* Private typedef -----------------------------------------------------------*/
mbed_official 87:085cde657901 91 /* Private define ------------------------------------------------------------*/
mbed_official 87:085cde657901 92 /* Private macro -------------------------------------------------------------*/
mbed_official 87:085cde657901 93 /* Private variables ---------------------------------------------------------*/
mbed_official 87:085cde657901 94 /* Private function prototypes -----------------------------------------------*/
mbed_official 87:085cde657901 95 /* Private functions ---------------------------------------------------------*/
mbed_official 87:085cde657901 96
mbed_official 87:085cde657901 97 /** @defgroup FSMC_Private_Functions
mbed_official 87:085cde657901 98 * @{
mbed_official 87:085cde657901 99 */
mbed_official 87:085cde657901 100
mbed_official 87:085cde657901 101 /** @defgroup FSMC_NORSRAM Controller functions
mbed_official 87:085cde657901 102 * @brief NORSRAM Controller functions
mbed_official 87:085cde657901 103 *
mbed_official 87:085cde657901 104 @verbatim
mbed_official 87:085cde657901 105 ==============================================================================
mbed_official 87:085cde657901 106 ##### How to use NORSRAM device driver #####
mbed_official 87:085cde657901 107 ==============================================================================
mbed_official 87:085cde657901 108
mbed_official 87:085cde657901 109 [..]
mbed_official 87:085cde657901 110 This driver contains a set of APIs to interface with the FSMC NORSRAM banks in order
mbed_official 87:085cde657901 111 to run the NORSRAM external devices.
mbed_official 87:085cde657901 112
mbed_official 87:085cde657901 113 (+) FSMC NORSRAM bank reset using the function FSMC_NORSRAM_DeInit()
mbed_official 87:085cde657901 114 (+) FSMC NORSRAM bank control configuration using the function FSMC_NORSRAM_Init()
mbed_official 87:085cde657901 115 (+) FSMC NORSRAM bank timing configuration using the function FSMC_NORSRAM_Timing_Init()
mbed_official 87:085cde657901 116 (+) FSMC NORSRAM bank extended timing configuration using the function
mbed_official 87:085cde657901 117 FSMC_NORSRAM_Extended_Timing_Init()
mbed_official 87:085cde657901 118 (+) FSMC NORSRAM bank enable/disable write operation using the functions
mbed_official 87:085cde657901 119 FSMC_NORSRAM_WriteOperation_Enable()/FSMC_NORSRAM_WriteOperation_Disable()
mbed_official 87:085cde657901 120
mbed_official 87:085cde657901 121 @endverbatim
mbed_official 87:085cde657901 122 * @{
mbed_official 87:085cde657901 123 */
mbed_official 87:085cde657901 124
mbed_official 87:085cde657901 125 /** @defgroup HAL_FSMC_NORSRAM_Group1 Initialization/de-initialization functions
mbed_official 87:085cde657901 126 * @brief Initialization and Configuration functions
mbed_official 87:085cde657901 127 *
mbed_official 87:085cde657901 128 @verbatim
mbed_official 87:085cde657901 129 ==============================================================================
mbed_official 87:085cde657901 130 ##### Initialization and de_initialization functions #####
mbed_official 87:085cde657901 131 ==============================================================================
mbed_official 87:085cde657901 132 [..]
mbed_official 87:085cde657901 133 This section provides functions allowing to:
mbed_official 87:085cde657901 134 (+) Initialize and configure the FSMC NORSRAM interface
mbed_official 87:085cde657901 135 (+) De-initialize the FSMC NORSRAM interface
mbed_official 87:085cde657901 136 (+) Configure the FSMC clock and associated GPIOs
mbed_official 87:085cde657901 137
mbed_official 87:085cde657901 138 @endverbatim
mbed_official 87:085cde657901 139 * @{
mbed_official 87:085cde657901 140 */
mbed_official 87:085cde657901 141
mbed_official 87:085cde657901 142 /**
mbed_official 87:085cde657901 143 * @brief Initialize the FSMC_NORSRAM device according to the specified
mbed_official 87:085cde657901 144 * control parameters in the FSMC_NORSRAM_InitTypeDef
mbed_official 87:085cde657901 145 * @param Device: Pointer to NORSRAM device instance
mbed_official 87:085cde657901 146 * @param Init: Pointer to NORSRAM Initialization structure
mbed_official 87:085cde657901 147 * @retval HAL status
mbed_official 87:085cde657901 148 */
mbed_official 87:085cde657901 149 HAL_StatusTypeDef FSMC_NORSRAM_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_InitTypeDef* Init)
mbed_official 87:085cde657901 150 {
mbed_official 87:085cde657901 151 uint32_t tmpr = 0;
mbed_official 87:085cde657901 152
mbed_official 87:085cde657901 153 /* Check the parameters */
mbed_official 87:085cde657901 154 assert_param(IS_FSMC_NORSRAM_BANK(Init->NSBank));
mbed_official 87:085cde657901 155 assert_param(IS_FSMC_MUX(Init->DataAddressMux));
mbed_official 87:085cde657901 156 assert_param(IS_FSMC_MEMORY(Init->MemoryType));
mbed_official 87:085cde657901 157 assert_param(IS_FSMC_NORSRAM_MEMORY_WIDTH(Init->MemoryDataWidth));
mbed_official 87:085cde657901 158 assert_param(IS_FSMC_BURSTMODE(Init->BurstAccessMode));
mbed_official 87:085cde657901 159 assert_param(IS_FSMC_WAIT_POLARITY(Init->WaitSignalPolarity));
mbed_official 87:085cde657901 160 assert_param(IS_FSMC_WRAP_MODE(Init->WrapMode));
mbed_official 87:085cde657901 161 assert_param(IS_FSMC_WAIT_SIGNAL_ACTIVE(Init->WaitSignalActive));
mbed_official 87:085cde657901 162 assert_param(IS_FSMC_WRITE_OPERATION(Init->WriteOperation));
mbed_official 87:085cde657901 163 assert_param(IS_FSMC_WAITE_SIGNAL(Init->WaitSignal));
mbed_official 87:085cde657901 164 assert_param(IS_FSMC_EXTENDED_MODE(Init->ExtendedMode));
mbed_official 87:085cde657901 165 assert_param(IS_FSMC_ASYNWAIT(Init->AsynchronousWait));
mbed_official 87:085cde657901 166 assert_param(IS_FSMC_WRITE_BURST(Init->WriteBurst));
mbed_official 87:085cde657901 167
mbed_official 106:ced8cbb51063 168 /* Set NORSRAM device control parameters */
mbed_official 87:085cde657901 169 tmpr = (uint32_t)(Init->DataAddressMux |\
mbed_official 87:085cde657901 170 Init->MemoryType |\
mbed_official 87:085cde657901 171 Init->MemoryDataWidth |\
mbed_official 87:085cde657901 172 Init->BurstAccessMode |\
mbed_official 87:085cde657901 173 Init->WaitSignalPolarity |\
mbed_official 87:085cde657901 174 Init->WrapMode |\
mbed_official 87:085cde657901 175 Init->WaitSignalActive |\
mbed_official 87:085cde657901 176 Init->WriteOperation |\
mbed_official 87:085cde657901 177 Init->WaitSignal |\
mbed_official 87:085cde657901 178 Init->ExtendedMode |\
mbed_official 87:085cde657901 179 Init->AsynchronousWait |\
mbed_official 87:085cde657901 180 Init->WriteBurst
mbed_official 87:085cde657901 181 );
mbed_official 87:085cde657901 182
mbed_official 87:085cde657901 183 if(Init->MemoryType == FSMC_MEMORY_TYPE_NOR)
mbed_official 87:085cde657901 184 {
mbed_official 87:085cde657901 185 tmpr |= (uint32_t)FSMC_NORSRAM_FLASH_ACCESS_ENABLE;
mbed_official 87:085cde657901 186 }
mbed_official 87:085cde657901 187
mbed_official 87:085cde657901 188 Device->BTCR[Init->NSBank] = tmpr;
mbed_official 87:085cde657901 189
mbed_official 87:085cde657901 190 return HAL_OK;
mbed_official 87:085cde657901 191 }
mbed_official 87:085cde657901 192
mbed_official 87:085cde657901 193
mbed_official 87:085cde657901 194 /**
mbed_official 87:085cde657901 195 * @brief DeInitialize the FSMC_NORSRAM peripheral
mbed_official 87:085cde657901 196 * @param Device: Pointer to NORSRAM device instance
mbed_official 87:085cde657901 197 * @param ExDevice: Pointer to NORSRAM extended mode device instance
mbed_official 87:085cde657901 198 * @param Bank: NORSRAM bank number
mbed_official 87:085cde657901 199 * @retval HAL status
mbed_official 87:085cde657901 200 */
mbed_official 87:085cde657901 201 HAL_StatusTypeDef FSMC_NORSRAM_DeInit(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_EXTENDED_TypeDef *ExDevice, uint32_t Bank)
mbed_official 87:085cde657901 202 {
mbed_official 87:085cde657901 203 /* Check the parameters */
mbed_official 87:085cde657901 204 assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
mbed_official 87:085cde657901 205 assert_param(IS_FSMC_NORSRAM_EXTENDED_DEVICE(ExDevice));
mbed_official 87:085cde657901 206
mbed_official 87:085cde657901 207 /* Disable the FSMC_NORSRAM device */
mbed_official 87:085cde657901 208 __FSMC_NORSRAM_DISABLE(Device, Bank);
mbed_official 87:085cde657901 209
mbed_official 87:085cde657901 210 /* De-initialize the FSMC_NORSRAM device */
mbed_official 87:085cde657901 211 /* FSMC_NORSRAM_BANK1 */
mbed_official 87:085cde657901 212 if(Bank == FSMC_NORSRAM_BANK1)
mbed_official 87:085cde657901 213 {
mbed_official 87:085cde657901 214 Device->BTCR[Bank] = 0x000030DB;
mbed_official 87:085cde657901 215 }
mbed_official 87:085cde657901 216 /* FSMC_NORSRAM_BANK2, FSMC_NORSRAM_BANK3 or FSMC_NORSRAM_BANK4 */
mbed_official 87:085cde657901 217 else
mbed_official 87:085cde657901 218 {
mbed_official 87:085cde657901 219 Device->BTCR[Bank] = 0x000030D2;
mbed_official 87:085cde657901 220 }
mbed_official 87:085cde657901 221
mbed_official 87:085cde657901 222 Device->BTCR[Bank + 1] = 0x0FFFFFFF;
mbed_official 87:085cde657901 223 ExDevice->BWTR[Bank] = 0x0FFFFFFF;
mbed_official 87:085cde657901 224
mbed_official 87:085cde657901 225 return HAL_OK;
mbed_official 87:085cde657901 226 }
mbed_official 87:085cde657901 227
mbed_official 87:085cde657901 228
mbed_official 87:085cde657901 229 /**
mbed_official 87:085cde657901 230 * @brief Initialize the FSMC_NORSRAM Timing according to the specified
mbed_official 87:085cde657901 231 * parameters in the FSMC_NORSRAM_TimingTypeDef
mbed_official 87:085cde657901 232 * @param Device: Pointer to NORSRAM device instance
mbed_official 87:085cde657901 233 * @param Timing: Pointer to NORSRAM Timing structure
mbed_official 87:085cde657901 234 * @param Bank: NORSRAM bank number
mbed_official 87:085cde657901 235 * @retval HAL status
mbed_official 87:085cde657901 236 */
mbed_official 87:085cde657901 237 HAL_StatusTypeDef FSMC_NORSRAM_Timing_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank)
mbed_official 87:085cde657901 238 {
mbed_official 87:085cde657901 239 uint32_t tmpr = 0;
mbed_official 87:085cde657901 240
mbed_official 87:085cde657901 241 /* Check the parameters */
mbed_official 87:085cde657901 242 assert_param(IS_FSMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
mbed_official 87:085cde657901 243 assert_param(IS_FSMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
mbed_official 87:085cde657901 244 assert_param(IS_FSMC_DATASETUP_TIME(Timing->DataSetupTime));
mbed_official 87:085cde657901 245 assert_param(IS_FSMC_TURNAROUND_TIME(Timing->BusTurnAroundDuration));
mbed_official 87:085cde657901 246 assert_param(IS_FSMC_CLK_DIV(Timing->CLKDivision));
mbed_official 87:085cde657901 247 assert_param(IS_FSMC_DATA_LATENCY(Timing->DataLatency));
mbed_official 87:085cde657901 248 assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode));
mbed_official 87:085cde657901 249
mbed_official 87:085cde657901 250 /* Set FSMC_NORSRAM device timing parameters */
mbed_official 87:085cde657901 251 tmpr = (uint32_t)(Timing->AddressSetupTime |\
mbed_official 87:085cde657901 252 ((Timing->AddressHoldTime) << 4) |\
mbed_official 87:085cde657901 253 ((Timing->DataSetupTime) << 8) |\
mbed_official 87:085cde657901 254 ((Timing->BusTurnAroundDuration) << 16) |\
mbed_official 87:085cde657901 255 (((Timing->CLKDivision)-1) << 20) |\
mbed_official 87:085cde657901 256 (((Timing->DataLatency)-2) << 24) |\
mbed_official 87:085cde657901 257 (Timing->AccessMode)
mbed_official 87:085cde657901 258 );
mbed_official 87:085cde657901 259
mbed_official 87:085cde657901 260 Device->BTCR[Bank + 1] = tmpr;
mbed_official 87:085cde657901 261
mbed_official 87:085cde657901 262 return HAL_OK;
mbed_official 87:085cde657901 263 }
mbed_official 87:085cde657901 264
mbed_official 87:085cde657901 265 /**
mbed_official 87:085cde657901 266 * @brief Initialize the FSMC_NORSRAM Extended mode Timing according to the specified
mbed_official 87:085cde657901 267 * parameters in the FSMC_NORSRAM_TimingTypeDef
mbed_official 87:085cde657901 268 * @param Device: Pointer to NORSRAM device instance
mbed_official 87:085cde657901 269 * @param Timing: Pointer to NORSRAM Timing structure
mbed_official 87:085cde657901 270 * @param Bank: NORSRAM bank number
mbed_official 87:085cde657901 271 * @retval HAL status
mbed_official 87:085cde657901 272 */
mbed_official 87:085cde657901 273 HAL_StatusTypeDef FSMC_NORSRAM_Extended_Timing_Init(FSMC_NORSRAM_EXTENDED_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode)
mbed_official 87:085cde657901 274 {
mbed_official 87:085cde657901 275 /* Set NORSRAM device timing register for write configuration, if extended mode is used */
mbed_official 87:085cde657901 276 if(ExtendedMode == FSMC_EXTENDED_MODE_ENABLE)
mbed_official 87:085cde657901 277 {
mbed_official 87:085cde657901 278 /* Check the parameters */
mbed_official 87:085cde657901 279 assert_param(IS_FSMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
mbed_official 87:085cde657901 280 assert_param(IS_FSMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
mbed_official 87:085cde657901 281 assert_param(IS_FSMC_DATASETUP_TIME(Timing->DataSetupTime));
mbed_official 87:085cde657901 282 assert_param(IS_FSMC_TURNAROUND_TIME(Timing->BusTurnAroundDuration));
mbed_official 87:085cde657901 283 assert_param(IS_FSMC_CLK_DIV(Timing->CLKDivision));
mbed_official 87:085cde657901 284 assert_param(IS_FSMC_DATA_LATENCY(Timing->DataLatency));
mbed_official 87:085cde657901 285 assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode));
mbed_official 87:085cde657901 286
mbed_official 87:085cde657901 287 Device->BWTR[Bank] = (uint32_t)(Timing->AddressSetupTime |\
mbed_official 87:085cde657901 288 ((Timing->AddressHoldTime) << 4) |\
mbed_official 87:085cde657901 289 ((Timing->DataSetupTime) << 8) |\
mbed_official 87:085cde657901 290 ((Timing->BusTurnAroundDuration) << 16) |\
mbed_official 87:085cde657901 291 (((Timing->CLKDivision)-1) << 20) |\
mbed_official 87:085cde657901 292 (((Timing->DataLatency)-2) << 24) |\
mbed_official 87:085cde657901 293 (Timing->AccessMode));
mbed_official 87:085cde657901 294 }
mbed_official 87:085cde657901 295 else
mbed_official 87:085cde657901 296 {
mbed_official 87:085cde657901 297 Device->BWTR[Bank] = 0x0FFFFFFF;
mbed_official 87:085cde657901 298 }
mbed_official 87:085cde657901 299
mbed_official 87:085cde657901 300 return HAL_OK;
mbed_official 87:085cde657901 301 }
mbed_official 87:085cde657901 302
mbed_official 87:085cde657901 303
mbed_official 87:085cde657901 304 /**
mbed_official 87:085cde657901 305 * @}
mbed_official 87:085cde657901 306 */
mbed_official 87:085cde657901 307
mbed_official 87:085cde657901 308
mbed_official 87:085cde657901 309 /** @defgroup HAL_FSMC_NORSRAM_Group3 Control functions
mbed_official 87:085cde657901 310 * @brief management functions
mbed_official 87:085cde657901 311 *
mbed_official 87:085cde657901 312 @verbatim
mbed_official 87:085cde657901 313 ==============================================================================
mbed_official 87:085cde657901 314 ##### FSMC_NORSRAM Control functions #####
mbed_official 106:ced8cbb51063 315 ==============================================================================
mbed_official 87:085cde657901 316 [..]
mbed_official 87:085cde657901 317 This subsection provides a set of functions allowing to control dynamically
mbed_official 87:085cde657901 318 the FSMC NORSRAM interface.
mbed_official 87:085cde657901 319
mbed_official 87:085cde657901 320 @endverbatim
mbed_official 87:085cde657901 321 * @{
mbed_official 87:085cde657901 322 */
mbed_official 87:085cde657901 323
mbed_official 87:085cde657901 324 /**
mbed_official 87:085cde657901 325 * @brief Enables dynamically FSMC_NORSRAM write operation.
mbed_official 87:085cde657901 326 * @param Device: Pointer to NORSRAM device instance
mbed_official 87:085cde657901 327 * @param Bank: NORSRAM bank number
mbed_official 87:085cde657901 328 * @retval HAL status
mbed_official 87:085cde657901 329 */
mbed_official 87:085cde657901 330 HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Enable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
mbed_official 87:085cde657901 331 {
mbed_official 87:085cde657901 332 /* Enable write operation */
mbed_official 87:085cde657901 333 Device->BTCR[Bank] |= FSMC_WRITE_OPERATION_ENABLE;
mbed_official 87:085cde657901 334
mbed_official 87:085cde657901 335 return HAL_OK;
mbed_official 87:085cde657901 336 }
mbed_official 87:085cde657901 337
mbed_official 87:085cde657901 338 /**
mbed_official 87:085cde657901 339 * @brief Disables dynamically FSMC_NORSRAM write operation.
mbed_official 87:085cde657901 340 * @param Device: Pointer to NORSRAM device instance
mbed_official 87:085cde657901 341 * @param Bank: NORSRAM bank number
mbed_official 87:085cde657901 342 * @retval HAL status
mbed_official 87:085cde657901 343 */
mbed_official 87:085cde657901 344 HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Disable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
mbed_official 87:085cde657901 345 {
mbed_official 87:085cde657901 346 /* Disable write operation */
mbed_official 87:085cde657901 347 Device->BTCR[Bank] &= ~FSMC_WRITE_OPERATION_ENABLE;
mbed_official 87:085cde657901 348
mbed_official 87:085cde657901 349 return HAL_OK;
mbed_official 87:085cde657901 350 }
mbed_official 87:085cde657901 351
mbed_official 87:085cde657901 352 /**
mbed_official 87:085cde657901 353 * @}
mbed_official 87:085cde657901 354 */
mbed_official 87:085cde657901 355
mbed_official 87:085cde657901 356 /**
mbed_official 87:085cde657901 357 * @}
mbed_official 87:085cde657901 358 */
mbed_official 87:085cde657901 359
mbed_official 87:085cde657901 360 /** @defgroup FSMC_PCCARD Controller functions
mbed_official 87:085cde657901 361 * @brief PCCARD Controller functions
mbed_official 87:085cde657901 362 *
mbed_official 87:085cde657901 363 @verbatim
mbed_official 87:085cde657901 364 ==============================================================================
mbed_official 87:085cde657901 365 ##### How to use NAND device driver #####
mbed_official 87:085cde657901 366 ==============================================================================
mbed_official 87:085cde657901 367 [..]
mbed_official 87:085cde657901 368 This driver contains a set of APIs to interface with the FSMC NAND banks in order
mbed_official 87:085cde657901 369 to run the NAND external devices.
mbed_official 87:085cde657901 370
mbed_official 87:085cde657901 371 (+) FSMC NAND bank reset using the function FSMC_NAND_DeInit()
mbed_official 87:085cde657901 372 (+) FSMC NAND bank control configuration using the function FSMC_NAND_Init()
mbed_official 87:085cde657901 373 (+) FSMC NAND bank common space timing configuration using the function
mbed_official 87:085cde657901 374 FSMC_NAND_CommonSpace_Timing_Init()
mbed_official 87:085cde657901 375 (+) FSMC NAND bank attribute space timing configuration using the function
mbed_official 87:085cde657901 376 FSMC_NAND_AttributeSpace_Timing_Init()
mbed_official 87:085cde657901 377 (+) FSMC NAND bank enable/disable ECC correction feature using the functions
mbed_official 87:085cde657901 378 FSMC_NAND_ECC_Enable()/FSMC_NAND_ECC_Disable()
mbed_official 87:085cde657901 379 (+) FSMC NAND bank get ECC correction code using the function FSMC_NAND_GetECC()
mbed_official 87:085cde657901 380
mbed_official 87:085cde657901 381 @endverbatim
mbed_official 87:085cde657901 382 * @{
mbed_official 87:085cde657901 383 */
mbed_official 87:085cde657901 384
mbed_official 87:085cde657901 385 /** @defgroup HAL_FSMC_NAND_Group1 Initialization/de-initialization functions
mbed_official 87:085cde657901 386 * @brief Initialization and Configuration functions
mbed_official 87:085cde657901 387 *
mbed_official 87:085cde657901 388 @verbatim
mbed_official 87:085cde657901 389 ==============================================================================
mbed_official 87:085cde657901 390 ##### Initialization and de_initialization functions #####
mbed_official 87:085cde657901 391 ==============================================================================
mbed_official 87:085cde657901 392 [..]
mbed_official 87:085cde657901 393 This section provides functions allowing to:
mbed_official 87:085cde657901 394 (+) Initialize and configure the FSMC NAND interface
mbed_official 87:085cde657901 395 (+) De-initialize the FSMC NAND interface
mbed_official 87:085cde657901 396 (+) Configure the FSMC clock and associated GPIOs
mbed_official 87:085cde657901 397
mbed_official 87:085cde657901 398 @endverbatim
mbed_official 87:085cde657901 399 * @{
mbed_official 87:085cde657901 400 */
mbed_official 87:085cde657901 401
mbed_official 87:085cde657901 402 /**
mbed_official 87:085cde657901 403 * @brief Initializes the FSMC_NAND device according to the specified
mbed_official 87:085cde657901 404 * control parameters in the FSMC_NAND_HandleTypeDef
mbed_official 87:085cde657901 405 * @param Device: Pointer to NAND device instance
mbed_official 87:085cde657901 406 * @param Init: Pointer to NAND Initialization structure
mbed_official 87:085cde657901 407 * @retval HAL status
mbed_official 87:085cde657901 408 */
mbed_official 87:085cde657901 409 HAL_StatusTypeDef FSMC_NAND_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_InitTypeDef *Init)
mbed_official 87:085cde657901 410 {
mbed_official 87:085cde657901 411 uint32_t tmppcr = 0;
mbed_official 87:085cde657901 412
mbed_official 87:085cde657901 413 /* Check the parameters */
mbed_official 87:085cde657901 414 assert_param(IS_FSMC_NAND_BANK(Init->NandBank));
mbed_official 87:085cde657901 415 assert_param(IS_FSMC_WAIT_FEATURE(Init->Waitfeature));
mbed_official 87:085cde657901 416 assert_param(IS_FSMC_NAND_MEMORY_WIDTH(Init->MemoryDataWidth));
mbed_official 87:085cde657901 417 assert_param(IS_FSMC_ECC_STATE(Init->EccComputation));
mbed_official 87:085cde657901 418 assert_param(IS_FSMC_ECCPAGE_SIZE(Init->ECCPageSize));
mbed_official 87:085cde657901 419 assert_param(IS_FSMC_TCLR_TIME(Init->TCLRSetupTime));
mbed_official 87:085cde657901 420 assert_param(IS_FSMC_TAR_TIME(Init->TARSetupTime));
mbed_official 87:085cde657901 421
mbed_official 87:085cde657901 422 /* Set NAND device control parameters */
mbed_official 87:085cde657901 423 tmppcr = (uint32_t)(Init->Waitfeature |\
mbed_official 87:085cde657901 424 FSMC_PCR_MEMORY_TYPE_NAND |\
mbed_official 87:085cde657901 425 Init->MemoryDataWidth |\
mbed_official 87:085cde657901 426 Init->EccComputation |\
mbed_official 87:085cde657901 427 Init->ECCPageSize |\
mbed_official 87:085cde657901 428 ((Init->TCLRSetupTime) << 9) |\
mbed_official 87:085cde657901 429 ((Init->TARSetupTime) << 13)
mbed_official 87:085cde657901 430 );
mbed_official 87:085cde657901 431
mbed_official 87:085cde657901 432 if(Init->NandBank == FSMC_NAND_BANK2)
mbed_official 87:085cde657901 433 {
mbed_official 87:085cde657901 434 /* NAND bank 2 registers configuration */
mbed_official 87:085cde657901 435 Device->PCR2 = tmppcr;
mbed_official 87:085cde657901 436 }
mbed_official 87:085cde657901 437 else
mbed_official 87:085cde657901 438 {
mbed_official 87:085cde657901 439 /* NAND bank 3 registers configuration */
mbed_official 87:085cde657901 440 Device->PCR3 = tmppcr;
mbed_official 87:085cde657901 441 }
mbed_official 87:085cde657901 442
mbed_official 87:085cde657901 443 return HAL_OK;
mbed_official 87:085cde657901 444
mbed_official 87:085cde657901 445 }
mbed_official 87:085cde657901 446
mbed_official 87:085cde657901 447 /**
mbed_official 87:085cde657901 448 * @brief Initializes the FSMC_NAND Common space Timing according to the specified
mbed_official 87:085cde657901 449 * parameters in the FSMC_NAND_PCC_TimingTypeDef
mbed_official 87:085cde657901 450 * @param Device: Pointer to NAND device instance
mbed_official 87:085cde657901 451 * @param Timing: Pointer to NAND timing structure
mbed_official 87:085cde657901 452 * @param Bank: NAND bank number
mbed_official 87:085cde657901 453 * @retval HAL status
mbed_official 87:085cde657901 454 */
mbed_official 87:085cde657901 455 HAL_StatusTypeDef FSMC_NAND_CommonSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
mbed_official 87:085cde657901 456 {
mbed_official 87:085cde657901 457 uint32_t tmppmem = 0;
mbed_official 87:085cde657901 458
mbed_official 87:085cde657901 459 /* Check the parameters */
mbed_official 87:085cde657901 460 assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
mbed_official 87:085cde657901 461 assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
mbed_official 87:085cde657901 462 assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
mbed_official 87:085cde657901 463 assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
mbed_official 87:085cde657901 464
mbed_official 87:085cde657901 465 /* Set FSMC_NAND device timing parameters */
mbed_official 87:085cde657901 466 tmppmem = (uint32_t)(Timing->SetupTime |\
mbed_official 87:085cde657901 467 ((Timing->WaitSetupTime) << 8) |\
mbed_official 87:085cde657901 468 ((Timing->HoldSetupTime) << 16) |\
mbed_official 87:085cde657901 469 ((Timing->HiZSetupTime) << 24)
mbed_official 87:085cde657901 470 );
mbed_official 87:085cde657901 471
mbed_official 87:085cde657901 472 if(Bank == FSMC_NAND_BANK2)
mbed_official 87:085cde657901 473 {
mbed_official 87:085cde657901 474 /* NAND bank 2 registers configuration */
mbed_official 87:085cde657901 475 Device->PMEM2 = tmppmem;
mbed_official 87:085cde657901 476 }
mbed_official 87:085cde657901 477 else
mbed_official 87:085cde657901 478 {
mbed_official 87:085cde657901 479 /* NAND bank 3 registers configuration */
mbed_official 87:085cde657901 480 Device->PMEM3 = tmppmem;
mbed_official 87:085cde657901 481 }
mbed_official 87:085cde657901 482
mbed_official 87:085cde657901 483 return HAL_OK;
mbed_official 87:085cde657901 484 }
mbed_official 87:085cde657901 485
mbed_official 87:085cde657901 486 /**
mbed_official 87:085cde657901 487 * @brief Initializes the FSMC_NAND Attribute space Timing according to the specified
mbed_official 87:085cde657901 488 * parameters in the FSMC_NAND_PCC_TimingTypeDef
mbed_official 87:085cde657901 489 * @param Device: Pointer to NAND device instance
mbed_official 87:085cde657901 490 * @param Timing: Pointer to NAND timing structure
mbed_official 87:085cde657901 491 * @param Bank: NAND bank number
mbed_official 87:085cde657901 492 * @retval HAL status
mbed_official 87:085cde657901 493 */
mbed_official 87:085cde657901 494 HAL_StatusTypeDef FSMC_NAND_AttributeSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
mbed_official 87:085cde657901 495 {
mbed_official 87:085cde657901 496 uint32_t tmppatt = 0;
mbed_official 87:085cde657901 497
mbed_official 87:085cde657901 498 /* Check the parameters */
mbed_official 87:085cde657901 499 assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
mbed_official 87:085cde657901 500 assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
mbed_official 87:085cde657901 501 assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
mbed_official 87:085cde657901 502 assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
mbed_official 87:085cde657901 503
mbed_official 87:085cde657901 504 /* Set FSMC_NAND device timing parameters */
mbed_official 87:085cde657901 505 tmppatt = (uint32_t)(Timing->SetupTime |\
mbed_official 87:085cde657901 506 ((Timing->WaitSetupTime) << 8) |\
mbed_official 87:085cde657901 507 ((Timing->HoldSetupTime) << 16) |\
mbed_official 87:085cde657901 508 ((Timing->HiZSetupTime) << 24)
mbed_official 87:085cde657901 509 );
mbed_official 87:085cde657901 510
mbed_official 87:085cde657901 511 if(Bank == FSMC_NAND_BANK2)
mbed_official 87:085cde657901 512 {
mbed_official 87:085cde657901 513 /* NAND bank 2 registers configuration */
mbed_official 87:085cde657901 514 Device->PATT2 = tmppatt;
mbed_official 87:085cde657901 515 }
mbed_official 87:085cde657901 516 else
mbed_official 87:085cde657901 517 {
mbed_official 87:085cde657901 518 /* NAND bank 3 registers configuration */
mbed_official 87:085cde657901 519 Device->PATT3 = tmppatt;
mbed_official 87:085cde657901 520 }
mbed_official 87:085cde657901 521
mbed_official 87:085cde657901 522 return HAL_OK;
mbed_official 87:085cde657901 523 }
mbed_official 87:085cde657901 524
mbed_official 87:085cde657901 525
mbed_official 87:085cde657901 526 /**
mbed_official 87:085cde657901 527 * @brief DeInitializes the FSMC_NAND device
mbed_official 87:085cde657901 528 * @param Device: Pointer to NAND device instance
mbed_official 87:085cde657901 529 * @param Bank: NAND bank number
mbed_official 87:085cde657901 530 * @retval HAL status
mbed_official 87:085cde657901 531 */
mbed_official 87:085cde657901 532 HAL_StatusTypeDef FSMC_NAND_DeInit(FSMC_NAND_TypeDef *Device, uint32_t Bank)
mbed_official 87:085cde657901 533 {
mbed_official 87:085cde657901 534 /* Disable the NAND Bank */
mbed_official 87:085cde657901 535 __FSMC_NAND_DISABLE(Device, Bank);
mbed_official 87:085cde657901 536
mbed_official 87:085cde657901 537 /* De-initialize the NAND Bank */
mbed_official 87:085cde657901 538 if(Bank == FSMC_NAND_BANK2)
mbed_official 87:085cde657901 539 {
mbed_official 87:085cde657901 540 /* Set the FSMC_NAND_BANK2 registers to their reset values */
mbed_official 87:085cde657901 541 Device->PCR2 = 0x00000018;
mbed_official 87:085cde657901 542 Device->SR2 = 0x00000040;
mbed_official 87:085cde657901 543 Device->PMEM2 = 0xFCFCFCFC;
mbed_official 87:085cde657901 544 Device->PATT2 = 0xFCFCFCFC;
mbed_official 87:085cde657901 545 }
mbed_official 87:085cde657901 546 /* FSMC_Bank3_NAND */
mbed_official 87:085cde657901 547 else
mbed_official 87:085cde657901 548 {
mbed_official 87:085cde657901 549 /* Set the FSMC_NAND_BANK3 registers to their reset values */
mbed_official 87:085cde657901 550 Device->PCR3 = 0x00000018;
mbed_official 87:085cde657901 551 Device->SR3 = 0x00000040;
mbed_official 87:085cde657901 552 Device->PMEM3 = 0xFCFCFCFC;
mbed_official 87:085cde657901 553 Device->PATT3 = 0xFCFCFCFC;
mbed_official 87:085cde657901 554 }
mbed_official 87:085cde657901 555
mbed_official 87:085cde657901 556 return HAL_OK;
mbed_official 87:085cde657901 557 }
mbed_official 87:085cde657901 558
mbed_official 87:085cde657901 559 /**
mbed_official 87:085cde657901 560 * @}
mbed_official 87:085cde657901 561 */
mbed_official 87:085cde657901 562
mbed_official 87:085cde657901 563
mbed_official 87:085cde657901 564 /** @defgroup HAL_FSMC_NAND_Group3 Control functions
mbed_official 87:085cde657901 565 * @brief management functions
mbed_official 87:085cde657901 566 *
mbed_official 87:085cde657901 567 @verbatim
mbed_official 87:085cde657901 568 ==============================================================================
mbed_official 87:085cde657901 569 ##### FSMC_NAND Control functions #####
mbed_official 87:085cde657901 570 ==============================================================================
mbed_official 87:085cde657901 571 [..]
mbed_official 87:085cde657901 572 This subsection provides a set of functions allowing to control dynamically
mbed_official 87:085cde657901 573 the FSMC NAND interface.
mbed_official 87:085cde657901 574
mbed_official 87:085cde657901 575 @endverbatim
mbed_official 87:085cde657901 576 * @{
mbed_official 87:085cde657901 577 */
mbed_official 87:085cde657901 578
mbed_official 87:085cde657901 579
mbed_official 87:085cde657901 580 /**
mbed_official 87:085cde657901 581 * @brief Enables dynamically FSMC_NAND ECC feature.
mbed_official 87:085cde657901 582 * @param Device: Pointer to NAND device instance
mbed_official 87:085cde657901 583 * @param Bank: NAND bank number
mbed_official 87:085cde657901 584 * @retval HAL status
mbed_official 87:085cde657901 585 */
mbed_official 87:085cde657901 586 HAL_StatusTypeDef FSMC_NAND_ECC_Enable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
mbed_official 87:085cde657901 587 {
mbed_official 87:085cde657901 588 /* Enable ECC feature */
mbed_official 87:085cde657901 589 if(Bank == FSMC_NAND_BANK2)
mbed_official 87:085cde657901 590 {
mbed_official 87:085cde657901 591 Device->PCR2 |= FSMC_PCR2_ECCEN;
mbed_official 87:085cde657901 592 }
mbed_official 87:085cde657901 593 else
mbed_official 87:085cde657901 594 {
mbed_official 87:085cde657901 595 Device->PCR3 |= FSMC_PCR3_ECCEN;
mbed_official 87:085cde657901 596 }
mbed_official 87:085cde657901 597
mbed_official 87:085cde657901 598 return HAL_OK;
mbed_official 87:085cde657901 599 }
mbed_official 87:085cde657901 600
mbed_official 87:085cde657901 601
mbed_official 87:085cde657901 602 /**
mbed_official 87:085cde657901 603 * @brief Disables dynamically FSMC_NAND ECC feature.
mbed_official 87:085cde657901 604 * @param Device: Pointer to NAND device instance
mbed_official 87:085cde657901 605 * @param Bank: NAND bank number
mbed_official 87:085cde657901 606 * @retval HAL status
mbed_official 87:085cde657901 607 */
mbed_official 87:085cde657901 608 HAL_StatusTypeDef FSMC_NAND_ECC_Disable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
mbed_official 87:085cde657901 609 {
mbed_official 87:085cde657901 610 /* Disable ECC feature */
mbed_official 87:085cde657901 611 if(Bank == FSMC_NAND_BANK2)
mbed_official 87:085cde657901 612 {
mbed_official 87:085cde657901 613 Device->PCR2 &= ~FSMC_PCR2_ECCEN;
mbed_official 87:085cde657901 614 }
mbed_official 87:085cde657901 615 else
mbed_official 87:085cde657901 616 {
mbed_official 87:085cde657901 617 Device->PCR3 &= ~FSMC_PCR3_ECCEN;
mbed_official 87:085cde657901 618 }
mbed_official 87:085cde657901 619
mbed_official 87:085cde657901 620 return HAL_OK;
mbed_official 87:085cde657901 621 }
mbed_official 87:085cde657901 622
mbed_official 87:085cde657901 623 /**
mbed_official 87:085cde657901 624 * @brief Disables dynamically FSMC_NAND ECC feature.
mbed_official 87:085cde657901 625 * @param Device: Pointer to NAND device instance
mbed_official 87:085cde657901 626 * @param ECCval: Pointer to ECC value
mbed_official 87:085cde657901 627 * @param Bank: NAND bank number
mbed_official 87:085cde657901 628 * @param Timeout: Timeout wait value
mbed_official 87:085cde657901 629 * @retval HAL status
mbed_official 87:085cde657901 630 */
mbed_official 87:085cde657901 631 HAL_StatusTypeDef FSMC_NAND_GetECC(FSMC_NAND_TypeDef *Device, uint32_t *ECCval, uint32_t Bank, uint32_t Timeout)
mbed_official 87:085cde657901 632 {
mbed_official 87:085cde657901 633 uint32_t timeout = 0;
mbed_official 87:085cde657901 634
mbed_official 87:085cde657901 635 /* Check the parameters */
mbed_official 87:085cde657901 636 assert_param(IS_FSMC_NAND_DEVICE(Device));
mbed_official 87:085cde657901 637 assert_param(IS_FSMC_NAND_BANK(Bank));
mbed_official 87:085cde657901 638
mbed_official 87:085cde657901 639 timeout = HAL_GetTick() + Timeout;
mbed_official 87:085cde657901 640
mbed_official 87:085cde657901 641 /* Wait untill FIFO is empty */
mbed_official 87:085cde657901 642 while(__FSMC_NAND_GET_FLAG(Device, Bank, FSMC_FLAG_FEMPT))
mbed_official 87:085cde657901 643 {
mbed_official 87:085cde657901 644 /* Check for the Timeout */
mbed_official 87:085cde657901 645 if(Timeout != HAL_MAX_DELAY)
mbed_official 87:085cde657901 646 {
mbed_official 87:085cde657901 647 if(HAL_GetTick() >= timeout)
mbed_official 87:085cde657901 648 {
mbed_official 87:085cde657901 649 return HAL_TIMEOUT;
mbed_official 87:085cde657901 650 }
mbed_official 87:085cde657901 651 }
mbed_official 87:085cde657901 652 }
mbed_official 87:085cde657901 653
mbed_official 87:085cde657901 654 if(Bank == FSMC_NAND_BANK2)
mbed_official 87:085cde657901 655 {
mbed_official 87:085cde657901 656 /* Get the ECCR2 register value */
mbed_official 87:085cde657901 657 *ECCval = (uint32_t)Device->ECCR2;
mbed_official 87:085cde657901 658 }
mbed_official 87:085cde657901 659 else
mbed_official 87:085cde657901 660 {
mbed_official 87:085cde657901 661 /* Get the ECCR3 register value */
mbed_official 87:085cde657901 662 *ECCval = (uint32_t)Device->ECCR3;
mbed_official 87:085cde657901 663 }
mbed_official 87:085cde657901 664
mbed_official 87:085cde657901 665 return HAL_OK;
mbed_official 87:085cde657901 666 }
mbed_official 87:085cde657901 667
mbed_official 87:085cde657901 668 /**
mbed_official 87:085cde657901 669 * @}
mbed_official 87:085cde657901 670 */
mbed_official 87:085cde657901 671
mbed_official 87:085cde657901 672 /**
mbed_official 87:085cde657901 673 * @}
mbed_official 87:085cde657901 674 */
mbed_official 87:085cde657901 675
mbed_official 87:085cde657901 676 /** @defgroup FSMC_PCCARD Controller functions
mbed_official 87:085cde657901 677 * @brief PCCARD Controller functions
mbed_official 87:085cde657901 678 *
mbed_official 87:085cde657901 679 @verbatim
mbed_official 87:085cde657901 680 ==============================================================================
mbed_official 87:085cde657901 681 ##### How to use PCCARD device driver #####
mbed_official 87:085cde657901 682 ==============================================================================
mbed_official 87:085cde657901 683 [..]
mbed_official 87:085cde657901 684 This driver contains a set of APIs to interface with the FSMC PCCARD bank in order
mbed_official 87:085cde657901 685 to run the PCCARD/compact flash external devices.
mbed_official 87:085cde657901 686
mbed_official 87:085cde657901 687 (+) FSMC PCCARD bank reset using the function FSMC_PCCARD_DeInit()
mbed_official 87:085cde657901 688 (+) FSMC PCCARD bank control configuration using the function FSMC_PCCARD_Init()
mbed_official 87:085cde657901 689 (+) FSMC PCCARD bank common space timing configuration using the function
mbed_official 87:085cde657901 690 FSMC_PCCARD_CommonSpace_Timing_Init()
mbed_official 87:085cde657901 691 (+) FSMC PCCARD bank attribute space timing configuration using the function
mbed_official 87:085cde657901 692 FSMC_PCCARD_AttributeSpace_Timing_Init()
mbed_official 87:085cde657901 693 (+) FSMC PCCARD bank IO space timing configuration using the function
mbed_official 87:085cde657901 694 FSMC_PCCARD_IOSpace_Timing_Init()
mbed_official 87:085cde657901 695
mbed_official 87:085cde657901 696 @endverbatim
mbed_official 87:085cde657901 697 * @{
mbed_official 87:085cde657901 698 */
mbed_official 87:085cde657901 699
mbed_official 87:085cde657901 700 /** @defgroup HAL_FSMC_PCCARD_Group1 Initialization/de-initialization functions
mbed_official 87:085cde657901 701 * @brief Initialization and Configuration functions
mbed_official 87:085cde657901 702 *
mbed_official 87:085cde657901 703 @verbatim
mbed_official 87:085cde657901 704 ==============================================================================
mbed_official 87:085cde657901 705 ##### Initialization and de_initialization functions #####
mbed_official 87:085cde657901 706 ==============================================================================
mbed_official 87:085cde657901 707 [..]
mbed_official 87:085cde657901 708 This section provides functions allowing to:
mbed_official 87:085cde657901 709 (+) Initialize and configure the FSMC PCCARD interface
mbed_official 87:085cde657901 710 (+) De-initialize the FSMC PCCARD interface
mbed_official 87:085cde657901 711 (+) Configure the FSMC clock and associated GPIOs
mbed_official 87:085cde657901 712
mbed_official 87:085cde657901 713 @endverbatim
mbed_official 87:085cde657901 714 * @{
mbed_official 87:085cde657901 715 */
mbed_official 87:085cde657901 716
mbed_official 87:085cde657901 717 /**
mbed_official 87:085cde657901 718 * @brief Initializes the FSMC_PCCARD device according to the specified
mbed_official 87:085cde657901 719 * control parameters in the FSMC_PCCARD_HandleTypeDef
mbed_official 87:085cde657901 720 * @param Device: Pointer to PCCARD device instance
mbed_official 87:085cde657901 721 * @param Init: Pointer to PCCARD Initialization structure
mbed_official 87:085cde657901 722 * @retval HAL status
mbed_official 87:085cde657901 723 */
mbed_official 87:085cde657901 724 HAL_StatusTypeDef FSMC_PCCARD_Init(FSMC_PCCARD_TypeDef *Device, FSMC_PCCARD_InitTypeDef *Init)
mbed_official 87:085cde657901 725 {
mbed_official 87:085cde657901 726 /* Check the parameters */
mbed_official 87:085cde657901 727 assert_param(IS_FSMC_WAIT_FEATURE(Init->Waitfeature));
mbed_official 87:085cde657901 728 assert_param(IS_FSMC_TCLR_TIME(Init->TCLRSetupTime));
mbed_official 87:085cde657901 729 assert_param(IS_FSMC_TAR_TIME(Init->TARSetupTime));
mbed_official 87:085cde657901 730
mbed_official 87:085cde657901 731 /* Set FSMC_PCCARD device control parameters */
mbed_official 87:085cde657901 732 Device->PCR4 = (uint32_t)(Init->Waitfeature |\
mbed_official 87:085cde657901 733 FSMC_NAND_PCC_MEM_BUS_WIDTH_16 |\
mbed_official 87:085cde657901 734 (Init->TCLRSetupTime << 9) |\
mbed_official 87:085cde657901 735 (Init->TARSetupTime << 13));
mbed_official 87:085cde657901 736
mbed_official 87:085cde657901 737 return HAL_OK;
mbed_official 87:085cde657901 738
mbed_official 87:085cde657901 739 }
mbed_official 87:085cde657901 740
mbed_official 87:085cde657901 741 /**
mbed_official 87:085cde657901 742 * @brief Initializes the FSMC_PCCARD Common space Timing according to the specified
mbed_official 87:085cde657901 743 * parameters in the FSMC_NAND_PCC_TimingTypeDef
mbed_official 87:085cde657901 744 * @param Device: Pointer to PCCARD device instance
mbed_official 87:085cde657901 745 * @param Timing: Pointer to PCCARD timing structure
mbed_official 87:085cde657901 746 * @retval HAL status
mbed_official 87:085cde657901 747 */
mbed_official 87:085cde657901 748 HAL_StatusTypeDef FSMC_PCCARD_CommonSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
mbed_official 87:085cde657901 749 {
mbed_official 87:085cde657901 750 /* Check the parameters */
mbed_official 87:085cde657901 751 assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
mbed_official 87:085cde657901 752 assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
mbed_official 87:085cde657901 753 assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
mbed_official 87:085cde657901 754 assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
mbed_official 87:085cde657901 755
mbed_official 87:085cde657901 756 /* Set PCCARD timing parameters */
mbed_official 87:085cde657901 757 Device->PMEM4 = (uint32_t)((Timing->SetupTime |\
mbed_official 87:085cde657901 758 ((Timing->WaitSetupTime) << 8) |\
mbed_official 87:085cde657901 759 (Timing->HoldSetupTime) << 16) |\
mbed_official 87:085cde657901 760 ((Timing->HiZSetupTime) << 24)
mbed_official 87:085cde657901 761 );
mbed_official 87:085cde657901 762
mbed_official 87:085cde657901 763 return HAL_OK;
mbed_official 87:085cde657901 764 }
mbed_official 87:085cde657901 765
mbed_official 87:085cde657901 766 /**
mbed_official 87:085cde657901 767 * @brief Initializes the FSMC_PCCARD Attribute space Timing according to the specified
mbed_official 87:085cde657901 768 * parameters in the FSMC_NAND_PCC_TimingTypeDef
mbed_official 87:085cde657901 769 * @param Device: Pointer to PCCARD device instance
mbed_official 87:085cde657901 770 * @param Timing: Pointer to PCCARD timing structure
mbed_official 87:085cde657901 771 * @retval HAL status
mbed_official 87:085cde657901 772 */
mbed_official 87:085cde657901 773 HAL_StatusTypeDef FSMC_PCCARD_AttributeSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
mbed_official 87:085cde657901 774 {
mbed_official 87:085cde657901 775 /* Check the parameters */
mbed_official 87:085cde657901 776 assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
mbed_official 87:085cde657901 777 assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
mbed_official 87:085cde657901 778 assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
mbed_official 87:085cde657901 779 assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
mbed_official 87:085cde657901 780
mbed_official 87:085cde657901 781 /* Set PCCARD timing parameters */
mbed_official 87:085cde657901 782 Device->PATT4 = (uint32_t)((Timing->SetupTime |\
mbed_official 87:085cde657901 783 ((Timing->WaitSetupTime) << 8) |\
mbed_official 87:085cde657901 784 (Timing->HoldSetupTime) << 16) |\
mbed_official 87:085cde657901 785 ((Timing->HiZSetupTime) << 24)
mbed_official 87:085cde657901 786 );
mbed_official 87:085cde657901 787
mbed_official 87:085cde657901 788 return HAL_OK;
mbed_official 87:085cde657901 789 }
mbed_official 87:085cde657901 790
mbed_official 87:085cde657901 791 /**
mbed_official 87:085cde657901 792 * @brief Initializes the FSMC_PCCARD IO space Timing according to the specified
mbed_official 87:085cde657901 793 * parameters in the FSMC_NAND_PCC_TimingTypeDef
mbed_official 87:085cde657901 794 * @param Device: Pointer to PCCARD device instance
mbed_official 87:085cde657901 795 * @param Timing: Pointer to PCCARD timing structure
mbed_official 87:085cde657901 796 * @retval HAL status
mbed_official 87:085cde657901 797 */
mbed_official 87:085cde657901 798 HAL_StatusTypeDef FSMC_PCCARD_IOSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
mbed_official 87:085cde657901 799 {
mbed_official 87:085cde657901 800 /* Check the parameters */
mbed_official 87:085cde657901 801 assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
mbed_official 87:085cde657901 802 assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
mbed_official 87:085cde657901 803 assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
mbed_official 87:085cde657901 804 assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
mbed_official 87:085cde657901 805
mbed_official 87:085cde657901 806 /* Set FSMC_PCCARD device timing parameters */
mbed_official 87:085cde657901 807 Device->PIO4 = (uint32_t)((Timing->SetupTime |\
mbed_official 87:085cde657901 808 ((Timing->WaitSetupTime) << 8) |\
mbed_official 87:085cde657901 809 (Timing->HoldSetupTime) << 16) |\
mbed_official 87:085cde657901 810 ((Timing->HiZSetupTime) << 24)
mbed_official 87:085cde657901 811 );
mbed_official 87:085cde657901 812
mbed_official 87:085cde657901 813 return HAL_OK;
mbed_official 87:085cde657901 814 }
mbed_official 87:085cde657901 815
mbed_official 87:085cde657901 816 /**
mbed_official 87:085cde657901 817 * @brief DeInitializes the FSMC_PCCARD device
mbed_official 87:085cde657901 818 * @param Device: Pointer to PCCARD device instance
mbed_official 87:085cde657901 819 * @retval HAL status
mbed_official 87:085cde657901 820 */
mbed_official 87:085cde657901 821 HAL_StatusTypeDef FSMC_PCCARD_DeInit(FSMC_PCCARD_TypeDef *Device)
mbed_official 87:085cde657901 822 {
mbed_official 87:085cde657901 823 /* Disable the FSMC_PCCARD device */
mbed_official 87:085cde657901 824 __FSMC_PCCARD_DISABLE(Device);
mbed_official 87:085cde657901 825
mbed_official 87:085cde657901 826 /* De-initialize the FSMC_PCCARD device */
mbed_official 87:085cde657901 827 Device->PCR4 = 0x00000018;
mbed_official 87:085cde657901 828 Device->SR4 = 0x00000000;
mbed_official 87:085cde657901 829 Device->PMEM4 = 0xFCFCFCFC;
mbed_official 87:085cde657901 830 Device->PATT4 = 0xFCFCFCFC;
mbed_official 87:085cde657901 831 Device->PIO4 = 0xFCFCFCFC;
mbed_official 87:085cde657901 832
mbed_official 87:085cde657901 833 return HAL_OK;
mbed_official 87:085cde657901 834 }
mbed_official 87:085cde657901 835
mbed_official 87:085cde657901 836 /**
mbed_official 87:085cde657901 837 * @}
mbed_official 87:085cde657901 838 */
mbed_official 87:085cde657901 839
mbed_official 87:085cde657901 840 /**
mbed_official 87:085cde657901 841 * @}
mbed_official 87:085cde657901 842 */
mbed_official 87:085cde657901 843
mbed_official 87:085cde657901 844 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */
mbed_official 87:085cde657901 845
mbed_official 87:085cde657901 846 #endif /* HAL_FSMC_MODULE_ENABLED */
mbed_official 87:085cde657901 847
mbed_official 87:085cde657901 848 /**
mbed_official 87:085cde657901 849 * @}
mbed_official 87:085cde657901 850 */
mbed_official 87:085cde657901 851
mbed_official 87:085cde657901 852 /**
mbed_official 87:085cde657901 853 * @}
mbed_official 87:085cde657901 854 */
mbed_official 87:085cde657901 855
mbed_official 87:085cde657901 856 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/