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:
Mon Sep 28 20:15:09 2015 +0100
Revision:
634:ac7d6880524d
Parent:
632:7687fb9c4f91
Synchronized with git revision 9b7d23d47153c298a6d24de9a415202705889d11

Full URL: https://github.com/mbedmicro/mbed/commit/9b7d23d47153c298a6d24de9a415202705889d11/

Revert "[NUCLEO_F303K8] add support of the STM32F303K8"

Who changed what in which revision?

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