Subversion Repositories LedShow

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 9
Line 3... Line 3...
3
  * @file    stm32f1xx_ll_fsmc.c
3
  * @file    stm32f1xx_ll_fsmc.c
4
  * @author  MCD Application Team
4
  * @author  MCD Application Team
5
  * @brief   FSMC Low Layer HAL module driver.
5
  * @brief   FSMC Low Layer HAL module driver.
6
  *
6
  *
7
  *          This file provides firmware functions to manage the following
7
  *          This file provides firmware functions to manage the following
8
  *          functionalities of the Flexible Static Memory Controller (FSMC) peripheral memories:
8
  *          functionalities of the Flexible Memory Controller (FSMC) peripheral memories:
9
  *           + Initialization/de-initialization functions
9
  *           + Initialization/de-initialization functions
10
  *           + Peripheral Control functions
10
  *           + Peripheral Control functions
11
  *           + Peripheral State functions
11
  *           + Peripheral State functions
12
  *
12
  *
13
  @verbatim
13
  @verbatim
14
  =============================================================================
14
  ==============================================================================
15
                        ##### FSMC peripheral features #####
15
                        ##### FSMC peripheral features #####
16
  =============================================================================
16
  ==============================================================================
17
    [..] The Flexible static memory controller (FSMC) includes following memory controllers:
17
  [..] The Flexible memory controller (FSMC) includes following memory controllers:
18
         (+) The NOR/PSRAM memory controller
18
       (+) The NOR/PSRAM memory controller
19
         (+) The PC Card memory controller
19
       (+) The NAND/PC Card memory controller
20
         (+) The NAND memory controller
-
 
21
             (PC Card and NAND controllers available only on STM32F101xE, STM32F103xE, STM32F101xG and STM32F103xG)
-
 
22
 
20
 
23
    [..] The FSMC functional block makes the interface with synchronous and asynchronous static
21
  [..] The FSMC functional block makes the interface with synchronous and asynchronous static
24
         memories and 16-bit PC memory cards. Its main purposes are:
22
       memories and 16-bit PC memory cards. Its main purposes are:
25
         (+) to translate AHB transactions into the appropriate external device protocol.
23
       (+) to translate AHB transactions into the appropriate external device protocol
26
         (+) to meet the access time requirements of the external memory devices.
24
       (+) to meet the access time requirements of the external memory devices
27
 
25
 
28
    [..] All external memories share the addresses, data and control signals with the controller.
26
  [..] All external memories share the addresses, data and control signals with the controller.
29
         Each external device is accessed by means of a unique Chip Select. The FSMC performs
27
       Each external device is accessed by means of a unique Chip Select. The FSMC performs
30
         only one access at a time to an external device.
28
       only one access at a time to an external device.
31
         The main features of the FSMC controller are the following:
29
       The main features of the FSMC controller are the following:
32
          (+) Interface with static-memory mapped devices including:
30
        (+) Interface with static-memory mapped devices including:
33
             (++) Static random access memory (SRAM).
31
           (++) Static random access memory (SRAM)
34
             (++) NOR Flash memory.
32
           (++) Read-only memory (ROM)
-
 
33
           (++) NOR Flash memory/OneNAND Flash memory
35
             (++) PSRAM (4 memory banks).
34
           (++) PSRAM (4 memory banks)
36
             (++) 16-bit PC Card compatible devices.
35
           (++) 16-bit PC Card compatible devices
37
             (++) Two banks of NAND Flash memory with ECC hardware to check up to 8 Kbytes of
36
           (++) Two banks of NAND Flash memory with ECC hardware to check up to 8 Kbytes of
38
                  data.
37
                data
39
          (+) Independent Chip Select control for each memory bank.
38
        (+) Independent Chip Select control for each memory bank
40
          (+) Independent configuration for each memory bank.
39
        (+) Independent configuration for each memory bank
41
       
40
 
42
  @endverbatim
41
  @endverbatim
43
  ******************************************************************************
42
  ******************************************************************************
44
  * @attention
43
  * @attention
45
  *
44
  *
46
  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
45
  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
-
 
46
  * All rights reserved.</center></h2>
47
  *
47
  *
48
  * Redistribution and use in source and binary forms, with or without modification,
48
  * This software component is licensed by ST under BSD 3-Clause license,
49
  * are permitted provided that the following conditions are met:
49
  * the "License"; You may not use this file except in compliance with the
50
  *   1. Redistributions of source code must retain the above copyright notice,
-
 
51
  *      this list of conditions and the following disclaimer.
50
  * License. You may obtain a copy of the License at:
52
  *   2. Redistributions in binary form must reproduce the above copyright notice,
-
 
53
  *      this list of conditions and the following disclaimer in the documentation
-
 
54
  *      and/or other materials provided with the distribution.
51
  *                       opensource.org/licenses/BSD-3-Clause
55
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
-
 
56
  *      may be used to endorse or promote products derived from this software
-
 
57
  *      without specific prior written permission.
-
 
58
  *
-
 
59
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-
 
60
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-
 
61
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-
 
62
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-
 
63
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-
 
64
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-
 
65
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-
 
66
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-
 
67
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-
 
68
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
 
69
  *
52
  *
70
  ******************************************************************************
53
  ******************************************************************************
71
  */
54
  */
72
 
55
 
73
/* Includes ------------------------------------------------------------------*/
56
/* Includes ------------------------------------------------------------------*/
74
#include "stm32f1xx_hal.h"
57
#include "stm32f1xx_hal.h"
75
 
58
 
76
/** @addtogroup STM32F1xx_HAL_Driver
59
/** @addtogroup STM32F1xx_HAL_Driver
77
  * @{
60
  * @{
78
  */
61
  */
-
 
62
#if (((defined HAL_NOR_MODULE_ENABLED || defined HAL_SRAM_MODULE_ENABLED)) || defined HAL_NAND_MODULE_ENABLED || defined HAL_PCCARD_MODULE_ENABLED )
79
 
63
 
80
#if defined(FSMC_BANK1)
-
 
81
 
-
 
82
#if defined(HAL_SRAM_MODULE_ENABLED) || defined(HAL_NOR_MODULE_ENABLED) || defined(HAL_PCCARD_MODULE_ENABLED) || defined(HAL_NAND_MODULE_ENABLED)
-
 
83
 
-
 
84
/** @defgroup FSMC_LL FSMC Low Layer
64
/** @defgroup FSMC_LL  FSMC Low Layer
85
  * @brief FSMC driver modules
65
  * @brief FSMC driver modules
86
  * @{
66
  * @{
87
  */
67
  */
88
 
68
 
89
/* Private typedef -----------------------------------------------------------*/
69
/* Private typedef -----------------------------------------------------------*/
90
/* Private define ------------------------------------------------------------*/
70
/* Private define ------------------------------------------------------------*/
-
 
71
 
-
 
72
/** @defgroup FSMC_LL_Private_Constants FSMC Low Layer Private Constants
-
 
73
  * @{
-
 
74
  */
-
 
75
 
-
 
76
/* ----------------------- FSMC registers bit mask --------------------------- */
-
 
77
 
-
 
78
#if defined FSMC_BANK1
-
 
79
/* --- BCR Register ---*/
-
 
80
/* BCR register clear mask */
-
 
81
 
-
 
82
/* --- BTR Register ---*/
-
 
83
/* BTR register clear mask */
-
 
84
#define BTR_CLEAR_MASK    ((uint32_t)(FSMC_BTRx_ADDSET | FSMC_BTRx_ADDHLD  |\
-
 
85
                                      FSMC_BTRx_DATAST | FSMC_BTRx_BUSTURN |\
-
 
86
                                      FSMC_BTRx_CLKDIV | FSMC_BTRx_DATLAT  |\
-
 
87
                                      FSMC_BTRx_ACCMOD))
-
 
88
 
-
 
89
/* --- BWTR Register ---*/
-
 
90
/* BWTR register clear mask */
-
 
91
#if defined(FSMC_BWTRx_BUSTURN)
-
 
92
#define BWTR_CLEAR_MASK   ((uint32_t)(FSMC_BWTRx_ADDSET | FSMC_BWTRx_ADDHLD  |\
-
 
93
                                      FSMC_BWTRx_DATAST | FSMC_BWTRx_BUSTURN |\
-
 
94
                                      FSMC_BWTRx_ACCMOD))
-
 
95
#else
-
 
96
#define BWTR_CLEAR_MASK   ((uint32_t)(FSMC_BWTRx_ADDSET | FSMC_BWTRx_ADDHLD  |\
-
 
97
                                      FSMC_BWTRx_DATAST | FSMC_BWTRx_ACCMOD))
-
 
98
#endif /* FSMC_BWTRx_BUSTURN */
-
 
99
#endif /* FSMC_BANK1 */
-
 
100
#if defined(FSMC_BANK3)
-
 
101
 
-
 
102
/* --- PCR Register ---*/
-
 
103
/* PCR register clear mask */
-
 
104
#define PCR_CLEAR_MASK    ((uint32_t)(FSMC_PCRx_PWAITEN | FSMC_PCRx_PBKEN  | \
-
 
105
                                      FSMC_PCRx_PTYP    | FSMC_PCRx_PWID   | \
-
 
106
                                      FSMC_PCRx_ECCEN   | FSMC_PCRx_TCLR   | \
-
 
107
                                      FSMC_PCRx_TAR     | FSMC_PCRx_ECCPS))
-
 
108
/* --- PMEM Register ---*/
-
 
109
/* PMEM register clear mask */
-
 
110
#define PMEM_CLEAR_MASK   ((uint32_t)(FSMC_PMEMx_MEMSETx  | FSMC_PMEMx_MEMWAITx |\
-
 
111
                                      FSMC_PMEMx_MEMHOLDx | FSMC_PMEMx_MEMHIZx))
-
 
112
 
-
 
113
/* --- PATT Register ---*/
-
 
114
/* PATT register clear mask */
-
 
115
#define PATT_CLEAR_MASK   ((uint32_t)(FSMC_PATTx_ATTSETx  | FSMC_PATTx_ATTWAITx |\
-
 
116
                                      FSMC_PATTx_ATTHOLDx | FSMC_PATTx_ATTHIZx))
-
 
117
 
-
 
118
#endif /* FSMC_BANK3 */
-
 
119
#if defined(FSMC_BANK4)
-
 
120
/* --- PCR Register ---*/
-
 
121
/* PCR register clear mask */
-
 
122
#define PCR4_CLEAR_MASK   ((uint32_t)(FSMC_PCR4_PWAITEN | FSMC_PCR4_PBKEN  | \
-
 
123
                                      FSMC_PCR4_PTYP    | FSMC_PCR4_PWID   | \
-
 
124
                                      FSMC_PCR4_ECCEN   | FSMC_PCR4_TCLR   | \
-
 
125
                                      FSMC_PCR4_TAR     | FSMC_PCR4_ECCPS))
-
 
126
/* --- PMEM Register ---*/
-
 
127
/* PMEM register clear mask */
-
 
128
#define PMEM4_CLEAR_MASK  ((uint32_t)(FSMC_PMEM4_MEMSET4  | FSMC_PMEM4_MEMWAIT4 |\
-
 
129
                                      FSMC_PMEM4_MEMHOLD4 | FSMC_PMEM4_MEMHIZ4))
-
 
130
 
-
 
131
/* --- PATT Register ---*/
-
 
132
/* PATT register clear mask */
-
 
133
#define PATT4_CLEAR_MASK  ((uint32_t)(FSMC_PATT4_ATTSET4  | FSMC_PATT4_ATTWAIT4 |\
-
 
134
                                      FSMC_PATT4_ATTHOLD4 | FSMC_PATT4_ATTHIZ4))
-
 
135
 
-
 
136
/* --- PIO4 Register ---*/
-
 
137
/* PIO4 register clear mask */
-
 
138
#define PIO4_CLEAR_MASK   ((uint32_t)(FSMC_PIO4_IOSET4  | FSMC_PIO4_IOWAIT4 | \
-
 
139
                                      FSMC_PIO4_IOHOLD4 | FSMC_PIO4_IOHIZ4))
-
 
140
 
-
 
141
#endif /* FSMC_BANK4 */
-
 
142
 
-
 
143
/**
-
 
144
  * @}
-
 
145
  */
-
 
146
 
91
/* Private macro -------------------------------------------------------------*/
147
/* Private macro -------------------------------------------------------------*/
92
/* Private variables ---------------------------------------------------------*/
148
/* Private variables ---------------------------------------------------------*/
93
/* Private function prototypes -----------------------------------------------*/
149
/* Private function prototypes -----------------------------------------------*/
94
/* Exported functions --------------------------------------------------------*/
150
/* Exported functions --------------------------------------------------------*/
95
 
151
 
96
/** @defgroup FSMC_LL_Exported_Functions FSMC Low Layer Exported Functions
152
/** @defgroup FSMC_LL_Exported_Functions FSMC Low Layer Exported Functions
97
  * @{
153
  * @{
98
  */
154
  */
99
 
155
 
-
 
156
#if defined FSMC_BANK1
-
 
157
 
100
/** @defgroup FSMC_NORSRAM FSMC NORSRAM Controller functions
158
/** @defgroup FSMC_LL_Exported_Functions_NORSRAM FSMC Low Layer NOR SRAM Exported Functions
101
  * @brief    NORSRAM Controller functions
159
  * @brief  NORSRAM Controller functions
102
  *
160
  *
103
  @verbatim
161
  @verbatim
104
  ==============================================================================
162
  ==============================================================================
105
                   ##### How to use NORSRAM device driver #####
163
                   ##### How to use NORSRAM device driver #####
106
  ==============================================================================
164
  ==============================================================================
Line 118... Line 176...
118
        FSMC_NORSRAM_WriteOperation_Enable()/FSMC_NORSRAM_WriteOperation_Disable()
176
        FSMC_NORSRAM_WriteOperation_Enable()/FSMC_NORSRAM_WriteOperation_Disable()
119
 
177
 
120
@endverbatim
178
@endverbatim
121
  * @{
179
  * @{
122
  */
180
  */
123
       
181
 
124
/** @addtogroup FSMC_LL_NORSRAM_Private_Functions_Group1
182
/** @defgroup FSMC_LL_NORSRAM_Exported_Functions_Group1 Initialization and de-initialization functions
125
  * @brief    Initialization and Configuration functions
183
  * @brief    Initialization and Configuration functions
126
  *
184
  *
127
  @verbatim
185
  @verbatim
128
  ==============================================================================
186
  ==============================================================================
129
              ##### Initialization and de_initialization functions #####
187
              ##### Initialization and de_initialization functions #####
130
  ==============================================================================
188
  ==============================================================================
Line 139... Line 197...
139
  */
197
  */
140
 
198
 
141
/**
199
/**
142
  * @brief  Initialize the FSMC_NORSRAM device according to the specified
200
  * @brief  Initialize the FSMC_NORSRAM device according to the specified
143
  *         control parameters in the FSMC_NORSRAM_InitTypeDef
201
  *         control parameters in the FSMC_NORSRAM_InitTypeDef
144
  * @param  Device: Pointer to NORSRAM device instance
202
  * @param  Device Pointer to NORSRAM device instance
145
  * @param  Init: Pointer to NORSRAM Initialization structure
203
  * @param  Init Pointer to NORSRAM Initialization structure
146
  * @retval HAL status
204
  * @retval HAL status
147
  */
205
  */
148
HAL_StatusTypeDef  FSMC_NORSRAM_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_InitTypeDef *Init)
206
HAL_StatusTypeDef  FSMC_NORSRAM_Init(FSMC_NORSRAM_TypeDef *Device,
-
 
207
                                    FSMC_NORSRAM_InitTypeDef *Init)
149
{
208
{
-
 
209
  uint32_t flashaccess;
-
 
210
  uint32_t btcr_reg;
-
 
211
  uint32_t mask;
-
 
212
 
150
  /* Check the parameters */
213
  /* Check the parameters */
151
  assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
214
  assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
152
  assert_param(IS_FSMC_NORSRAM_BANK(Init->NSBank));
215
  assert_param(IS_FSMC_NORSRAM_BANK(Init->NSBank));
153
  assert_param(IS_FSMC_MUX(Init->DataAddressMux));
216
  assert_param(IS_FSMC_MUX(Init->DataAddressMux));
154
  assert_param(IS_FSMC_MEMORY(Init->MemoryType));
217
  assert_param(IS_FSMC_MEMORY(Init->MemoryType));
Line 160... Line 223...
160
  assert_param(IS_FSMC_WRITE_OPERATION(Init->WriteOperation));
223
  assert_param(IS_FSMC_WRITE_OPERATION(Init->WriteOperation));
161
  assert_param(IS_FSMC_WAITE_SIGNAL(Init->WaitSignal));
224
  assert_param(IS_FSMC_WAITE_SIGNAL(Init->WaitSignal));
162
  assert_param(IS_FSMC_EXTENDED_MODE(Init->ExtendedMode));
225
  assert_param(IS_FSMC_EXTENDED_MODE(Init->ExtendedMode));
163
  assert_param(IS_FSMC_ASYNWAIT(Init->AsynchronousWait));
226
  assert_param(IS_FSMC_ASYNWAIT(Init->AsynchronousWait));
164
  assert_param(IS_FSMC_WRITE_BURST(Init->WriteBurst));
227
  assert_param(IS_FSMC_WRITE_BURST(Init->WriteBurst));
-
 
228
  assert_param(IS_FSMC_PAGESIZE(Init->PageSize));
165
 
229
 
166
  /* Disable NORSRAM Device */
230
  /* Disable NORSRAM Device */
167
  __FSMC_NORSRAM_DISABLE(Device, Init->NSBank);
231
  __FSMC_NORSRAM_DISABLE(Device, Init->NSBank);
168
 
232
 
169
  /* Set NORSRAM device control parameters */
233
  /* Set NORSRAM device control parameters */
170
  if (Init->MemoryType == FSMC_MEMORY_TYPE_NOR)
234
  if (Init->MemoryType == FSMC_MEMORY_TYPE_NOR)
171
  {
235
  {
172
    MODIFY_REG(Device->BTCR[Init->NSBank], BCR_CLEAR_MASK, (uint32_t)(FSMC_NORSRAM_FLASH_ACCESS_ENABLE
236
    flashaccess = FSMC_NORSRAM_FLASH_ACCESS_ENABLE;
173
               | Init->DataAddressMux
-
 
174
               | Init->MemoryType
-
 
175
               | Init->MemoryDataWidth
-
 
176
               | Init->BurstAccessMode
-
 
177
               | Init->WaitSignalPolarity
-
 
178
               | Init->WrapMode
-
 
179
               | Init->WaitSignalActive
-
 
180
               | Init->WriteOperation
-
 
181
               | Init->WaitSignal
-
 
182
               | Init->ExtendedMode
-
 
183
               | Init->AsynchronousWait
-
 
184
               | Init->WriteBurst
-
 
185
                                                                     )
-
 
186
              );
-
 
187
  }
237
  }
188
  else
238
  else
189
  {
239
  {
190
    MODIFY_REG(Device->BTCR[Init->NSBank], BCR_CLEAR_MASK, (uint32_t)(FSMC_NORSRAM_FLASH_ACCESS_DISABLE
240
    flashaccess = FSMC_NORSRAM_FLASH_ACCESS_DISABLE;
191
               | Init->DataAddressMux
-
 
192
               | Init->MemoryType
-
 
193
               | Init->MemoryDataWidth
-
 
194
               | Init->BurstAccessMode
-
 
195
               | Init->WaitSignalPolarity
-
 
196
               | Init->WrapMode
-
 
197
               | Init->WaitSignalActive
-
 
198
               | Init->WriteOperation
-
 
199
               | Init->WaitSignal
-
 
200
               | Init->ExtendedMode
-
 
201
               | Init->AsynchronousWait
-
 
202
               | Init->WriteBurst
-
 
203
                                                                     )
-
 
204
              );
-
 
205
  }
241
  }
206
 
242
 
-
 
243
  btcr_reg = (flashaccess                   | \
-
 
244
              Init->DataAddressMux          | \
-
 
245
              Init->MemoryType              | \
-
 
246
              Init->MemoryDataWidth         | \
-
 
247
              Init->BurstAccessMode         | \
-
 
248
              Init->WaitSignalPolarity      | \
-
 
249
              Init->WaitSignalActive        | \
-
 
250
              Init->WriteOperation          | \
-
 
251
              Init->WaitSignal              | \
-
 
252
              Init->ExtendedMode            | \
-
 
253
              Init->AsynchronousWait        | \
-
 
254
              Init->WriteBurst);
-
 
255
 
-
 
256
  btcr_reg |= Init->WrapMode;
-
 
257
  btcr_reg |= Init->PageSize;
-
 
258
 
-
 
259
  mask = (FSMC_BCRx_MBKEN                |
-
 
260
          FSMC_BCRx_MUXEN                |
-
 
261
          FSMC_BCRx_MTYP                 |
-
 
262
          FSMC_BCRx_MWID                 |
-
 
263
          FSMC_BCRx_FACCEN               |
-
 
264
          FSMC_BCRx_BURSTEN              |
-
 
265
          FSMC_BCRx_WAITPOL              |
-
 
266
          FSMC_BCRx_WAITCFG              |
-
 
267
          FSMC_BCRx_WREN                 |
-
 
268
          FSMC_BCRx_WAITEN               |
-
 
269
          FSMC_BCRx_EXTMOD               |
-
 
270
          FSMC_BCRx_ASYNCWAIT            |
-
 
271
          FSMC_BCRx_CBURSTRW);
-
 
272
 
-
 
273
  mask |= FSMC_BCRx_WRAPMOD;
-
 
274
  mask |= 0x00070000U; /* CPSIZE to be defined in CMSIS file */
-
 
275
 
-
 
276
  MODIFY_REG(Device->BTCR[Init->NSBank], mask, btcr_reg);
-
 
277
 
-
 
278
 
207
  return HAL_OK;
279
  return HAL_OK;
208
}
280
}
209
 
281
 
210
/**
282
/**
211
  * @brief  DeInitialize the FSMC_NORSRAM peripheral
283
  * @brief  DeInitialize the FSMC_NORSRAM peripheral
212
  * @param  Device: Pointer to NORSRAM device instance
284
  * @param  Device Pointer to NORSRAM device instance
213
  * @param  ExDevice: Pointer to NORSRAM extended mode device instance
285
  * @param  ExDevice Pointer to NORSRAM extended mode device instance
214
  * @param  Bank: NORSRAM bank number  
286
  * @param  Bank NORSRAM bank number
215
  * @retval HAL status
287
  * @retval HAL status
216
  */
288
  */
217
HAL_StatusTypeDef FSMC_NORSRAM_DeInit(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_EXTENDED_TypeDef *ExDevice, uint32_t Bank)
289
HAL_StatusTypeDef FSMC_NORSRAM_DeInit(FSMC_NORSRAM_TypeDef *Device,
-
 
290
                                     FSMC_NORSRAM_EXTENDED_TypeDef *ExDevice, uint32_t Bank)
218
{
291
{
219
  /* Check the parameters */
292
  /* Check the parameters */
220
  assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
293
  assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
221
  assert_param(IS_FSMC_NORSRAM_EXTENDED_DEVICE(ExDevice));
294
  assert_param(IS_FSMC_NORSRAM_EXTENDED_DEVICE(ExDevice));
222
  assert_param(IS_FSMC_NORSRAM_BANK(Bank));
295
  assert_param(IS_FSMC_NORSRAM_BANK(Bank));
Line 224... Line 297...
224
  /* Disable the FSMC_NORSRAM device */
297
  /* Disable the FSMC_NORSRAM device */
225
  __FSMC_NORSRAM_DISABLE(Device, Bank);
298
  __FSMC_NORSRAM_DISABLE(Device, Bank);
226
 
299
 
227
  /* De-initialize the FSMC_NORSRAM device */
300
  /* De-initialize the FSMC_NORSRAM device */
228
  /* FSMC_NORSRAM_BANK1 */
301
  /* FSMC_NORSRAM_BANK1 */
229
  if(Bank == FSMC_NORSRAM_BANK1)
302
  if (Bank == FSMC_NORSRAM_BANK1)
230
  {
303
  {
231
    Device->BTCR[Bank] = 0x000030DBU;
304
    Device->BTCR[Bank] = 0x000030DBU;
232
  }
305
  }
233
  /* FSMC_NORSRAM_BANK2, FSMC_NORSRAM_BANK3 or FSMC_NORSRAM_BANK4 */
306
  /* FSMC_NORSRAM_BANK2, FSMC_NORSRAM_BANK3 or FSMC_NORSRAM_BANK4 */
234
  else
307
  else
235
  {  
308
  {
236
    Device->BTCR[Bank] = 0x000030D2U;
309
    Device->BTCR[Bank] = 0x000030D2U;
237
  }
310
  }
238
 
311
 
239
  Device->BTCR[Bank + 1U] = 0x0FFFFFFFU;
312
  Device->BTCR[Bank + 1U] = 0x0FFFFFFFU;
240
  ExDevice->BWTR[Bank]    = 0x0FFFFFFFU;
313
  ExDevice->BWTR[Bank]   = 0x0FFFFFFFU;
241
   
314
 
242
  return HAL_OK;
315
  return HAL_OK;
243
}
316
}
244
 
317
 
245
 
-
 
246
/**
318
/**
247
  * @brief  Initialize the FSMC_NORSRAM Timing according to the specified
319
  * @brief  Initialize the FSMC_NORSRAM Timing according to the specified
248
  *         parameters in the FSMC_NORSRAM_TimingTypeDef
320
  *         parameters in the FSMC_NORSRAM_TimingTypeDef
249
  * @param  Device: Pointer to NORSRAM device instance
321
  * @param  Device Pointer to NORSRAM device instance
250
  * @param  Timing: Pointer to NORSRAM Timing structure
322
  * @param  Timing Pointer to NORSRAM Timing structure
251
  * @param  Bank: NORSRAM bank number
323
  * @param  Bank NORSRAM bank number
252
  * @retval HAL status
324
  * @retval HAL status
253
  */
325
  */
254
HAL_StatusTypeDef FSMC_NORSRAM_Timing_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank)
326
HAL_StatusTypeDef FSMC_NORSRAM_Timing_Init(FSMC_NORSRAM_TypeDef *Device,
-
 
327
                                          FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank)
255
{
328
{
-
 
329
 
256
  /* Check the parameters */
330
  /* Check the parameters */
257
  assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
331
  assert_param(IS_FSMC_NORSRAM_DEVICE(Device));
258
  assert_param(IS_FSMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
332
  assert_param(IS_FSMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
259
  assert_param(IS_FSMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
333
  assert_param(IS_FSMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
260
  assert_param(IS_FSMC_DATASETUP_TIME(Timing->DataSetupTime));
334
  assert_param(IS_FSMC_DATASETUP_TIME(Timing->DataSetupTime));
Line 263... Line 337...
263
  assert_param(IS_FSMC_DATA_LATENCY(Timing->DataLatency));
337
  assert_param(IS_FSMC_DATA_LATENCY(Timing->DataLatency));
264
  assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode));
338
  assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode));
265
  assert_param(IS_FSMC_NORSRAM_BANK(Bank));
339
  assert_param(IS_FSMC_NORSRAM_BANK(Bank));
266
 
340
 
267
  /* Set FSMC_NORSRAM device timing parameters */
341
  /* Set FSMC_NORSRAM device timing parameters */
268
  MODIFY_REG(Device->BTCR[Bank + 1U],                                                        \
342
  MODIFY_REG(Device->BTCR[Bank + 1U], BTR_CLEAR_MASK, (Timing->AddressSetupTime                                  |
269
             BTR_CLEAR_MASK,                                                                \
-
 
270
             (uint32_t)(Timing->AddressSetupTime                                          | \
-
 
271
                        ((Timing->AddressHoldTime)        << FSMC_BTRx_ADDHLD_Pos)        | \
343
                                                       ((Timing->AddressHoldTime)        << FSMC_BTRx_ADDHLD_Pos)  |
272
                        ((Timing->DataSetupTime)          << FSMC_BTRx_DATAST_Pos)        | \
344
                                                       ((Timing->DataSetupTime)          << FSMC_BTRx_DATAST_Pos)  |
273
                        ((Timing->BusTurnAroundDuration)  << FSMC_BTRx_BUSTURN_Pos)       | \
345
                                                       ((Timing->BusTurnAroundDuration)  << FSMC_BTRx_BUSTURN_Pos) |
274
                        (((Timing->CLKDivision) - 1U)     << FSMC_BTRx_CLKDIV_Pos)        | \
346
                                                       (((Timing->CLKDivision) - 1U)     << FSMC_BTRx_CLKDIV_Pos)  |
275
                        (((Timing->DataLatency) - 2U)     << FSMC_BTRx_DATLAT_Pos)        | \
347
                                                       (((Timing->DataLatency) - 2U)     << FSMC_BTRx_DATLAT_Pos)  |
276
                        (Timing->AccessMode)));
348
                                                       (Timing->AccessMode)));
277
 
349
 
278
  return HAL_OK;
350
  return HAL_OK;
279
}
351
}
280
 
352
 
281
/**
353
/**
282
  * @brief  Initialize the FSMC_NORSRAM Extended mode Timing according to the specified
354
  * @brief  Initialize the FSMC_NORSRAM Extended mode Timing according to the specified
283
  *         parameters in the FSMC_NORSRAM_TimingTypeDef
355
  *         parameters in the FSMC_NORSRAM_TimingTypeDef
284
  * @param  Device: Pointer to NORSRAM device instance
356
  * @param  Device Pointer to NORSRAM device instance
285
  * @param  Timing: Pointer to NORSRAM Timing structure
357
  * @param  Timing Pointer to NORSRAM Timing structure
286
  * @param  Bank: NORSRAM bank number
358
  * @param  Bank NORSRAM bank number
287
  * @param  ExtendedMode FSMC Extended Mode
359
  * @param  ExtendedMode FSMC Extended Mode
288
  *          This parameter can be one of the following values:
360
  *          This parameter can be one of the following values:
289
  *            @arg FSMC_EXTENDED_MODE_DISABLE
361
  *            @arg FSMC_EXTENDED_MODE_DISABLE
290
  *            @arg FSMC_EXTENDED_MODE_ENABLE
362
  *            @arg FSMC_EXTENDED_MODE_ENABLE
291
  * @retval HAL status
363
  * @retval HAL status
292
  */
364
  */
293
HAL_StatusTypeDef  FSMC_NORSRAM_Extended_Timing_Init(FSMC_NORSRAM_EXTENDED_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode)
365
HAL_StatusTypeDef FSMC_NORSRAM_Extended_Timing_Init(FSMC_NORSRAM_EXTENDED_TypeDef *Device,
-
 
366
                                                   FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode)
294
{
367
{
295
  /* Check the parameters */
368
  /* Check the parameters */
296
  assert_param(IS_FSMC_EXTENDED_MODE(ExtendedMode));
369
  assert_param(IS_FSMC_EXTENDED_MODE(ExtendedMode));
297
 
370
 
298
  /* Set NORSRAM device timing register for write configuration, if extended mode is used */
371
  /* Set NORSRAM device timing register for write configuration, if extended mode is used */
299
  if(ExtendedMode == FSMC_EXTENDED_MODE_ENABLE)
372
  if (ExtendedMode == FSMC_EXTENDED_MODE_ENABLE)
300
  {
373
  {
301
    /* Check the parameters */
374
    /* Check the parameters */
302
    assert_param(IS_FSMC_NORSRAM_EXTENDED_DEVICE(Device));
375
    assert_param(IS_FSMC_NORSRAM_EXTENDED_DEVICE(Device));
303
    assert_param(IS_FSMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
376
    assert_param(IS_FSMC_ADDRESS_SETUP_TIME(Timing->AddressSetupTime));
304
    assert_param(IS_FSMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
377
    assert_param(IS_FSMC_ADDRESS_HOLD_TIME(Timing->AddressHoldTime));
Line 312... Line 385...
312
    assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode));
385
    assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode));
313
    assert_param(IS_FSMC_NORSRAM_BANK(Bank));
386
    assert_param(IS_FSMC_NORSRAM_BANK(Bank));
314
 
387
 
315
    /* Set NORSRAM device timing register for write configuration, if extended mode is used */
388
    /* Set NORSRAM device timing register for write configuration, if extended mode is used */
316
#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)
389
#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)
317
    MODIFY_REG(Device->BWTR[Bank],                                                      \
390
    MODIFY_REG(Device->BWTR[Bank], BWTR_CLEAR_MASK, (Timing->AddressSetupTime                                    |
318
               BWTR_CLEAR_MASK,                                                         \
-
 
319
               (uint32_t)(Timing->AddressSetupTime                                    | \
-
 
320
                          ((Timing->AddressHoldTime)        << FSMC_BWTRx_ADDHLD_Pos) | \
391
                                                     ((Timing->AddressHoldTime)        << FSMC_BWTRx_ADDHLD_Pos)  |
321
                          ((Timing->DataSetupTime)          << FSMC_BWTRx_DATAST_Pos) | \
392
                                                     ((Timing->DataSetupTime)          << FSMC_BWTRx_DATAST_Pos)  |
322
                          Timing->AccessMode                                          | \
393
                                                     Timing->AccessMode                                          |
323
                          ((Timing->BusTurnAroundDuration)  << FSMC_BWTRx_BUSTURN_Pos)));
394
                                                     ((Timing->BusTurnAroundDuration)  << FSMC_BWTRx_BUSTURN_Pos)));
324
#else
395
#else
325
    MODIFY_REG(Device->BWTR[Bank],                                                      \
396
    MODIFY_REG(Device->BWTR[Bank], BWTR_CLEAR_MASK, (Timing->AddressSetupTime                                    |
326
               BWTR_CLEAR_MASK,                                                         \
-
 
327
               (uint32_t)(Timing->AddressSetupTime                                    | \
-
 
328
                          ((Timing->AddressHoldTime)  << FSMC_BWTRx_ADDHLD_Pos)       | \
397
                                                     ((Timing->AddressHoldTime)        << FSMC_BWTRx_ADDHLD_Pos)  |
329
                          ((Timing->DataSetupTime)    << FSMC_BWTRx_DATAST_Pos)       | \
398
                                                     ((Timing->DataSetupTime)          << FSMC_BWTRx_DATAST_Pos)  |
330
                          Timing->AccessMode                                          | \
399
                                                     Timing->AccessMode                                          |
331
                          (((Timing->CLKDivision) - 1U)  << FSMC_BTRx_CLKDIV_Pos)     | \
400
                                                     (((Timing->CLKDivision) - 1U)     << FSMC_BTRx_CLKDIV_Pos)   |
332
                          (((Timing->DataLatency) - 2U)  << FSMC_BWTRx_DATLAT_Pos)));
401
                                                     (((Timing->DataLatency) - 2U)     << FSMC_BWTRx_DATLAT_Pos)));
333
#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG */
402
#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG */
334
  }
403
  }
335
  else
404
  else
336
  {
405
  {
337
    Device->BWTR[Bank] = 0x0FFFFFFFU;
406
    Device->BWTR[Bank] = 0x0FFFFFFFU;
Line 341... Line 410...
341
}
410
}
342
/**
411
/**
343
  * @}
412
  * @}
344
  */
413
  */
345
 
414
 
346
/** @defgroup FSMC_NORSRAM_Group2 Control functions
415
/** @addtogroup FSMC_LL_NORSRAM_Private_Functions_Group2
347
  *  @brief   management functions
416
  *  @brief   management functions
348
  *
417
  *
349
@verbatim
418
@verbatim
350
  ==============================================================================
419
  ==============================================================================
351
                      ##### FSMC_NORSRAM Control functions #####
420
                      ##### FSMC_NORSRAM Control functions #####
Line 358... Line 427...
358
  * @{
427
  * @{
359
  */
428
  */
360
 
429
 
361
/**
430
/**
362
  * @brief  Enables dynamically FSMC_NORSRAM write operation.
431
  * @brief  Enables dynamically FSMC_NORSRAM write operation.
363
  * @param  Device: Pointer to NORSRAM device instance
432
  * @param  Device Pointer to NORSRAM device instance
364
  * @param  Bank: NORSRAM bank number
433
  * @param  Bank NORSRAM bank number
365
  * @retval HAL status
434
  * @retval HAL status
366
  */
435
  */
367
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Enable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
436
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Enable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
368
{
437
{
369
  /* Check the parameters */
438
  /* Check the parameters */
Line 376... Line 445...
376
  return HAL_OK;
445
  return HAL_OK;
377
}
446
}
378
 
447
 
379
/**
448
/**
380
  * @brief  Disables dynamically FSMC_NORSRAM write operation.
449
  * @brief  Disables dynamically FSMC_NORSRAM write operation.
381
  * @param  Device: Pointer to NORSRAM device instance
450
  * @param  Device Pointer to NORSRAM device instance
382
  * @param  Bank: NORSRAM bank number
451
  * @param  Bank NORSRAM bank number
383
  * @retval HAL status
452
  * @retval HAL status
384
  */
453
  */
385
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Disable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
454
HAL_StatusTypeDef FSMC_NORSRAM_WriteOperation_Disable(FSMC_NORSRAM_TypeDef *Device, uint32_t Bank)
386
{
455
{
387
  /* Check the parameters */
456
  /* Check the parameters */
Line 391... Line 460...
391
  /* Disable write operation */
460
  /* Disable write operation */
392
  CLEAR_BIT(Device->BTCR[Bank], FSMC_WRITE_OPERATION_ENABLE);
461
  CLEAR_BIT(Device->BTCR[Bank], FSMC_WRITE_OPERATION_ENABLE);
393
 
462
 
394
  return HAL_OK;
463
  return HAL_OK;
395
}
464
}
-
 
465
 
396
/**
466
/**
397
  * @}
467
  * @}
398
  */
468
  */
399
 
469
 
400
/**
470
/**
401
  * @}
471
  * @}
402
  */
472
  */
-
 
473
#endif /* FSMC_BANK1 */
-
 
474
 
-
 
475
#if defined(FSMC_BANK3)
403
 
476
 
404
#if (defined (STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG))
-
 
405
/** @defgroup FSMC_NAND FSMC NAND Controller functions
477
/** @defgroup FSMC_LL_Exported_Functions_NAND FSMC Low Layer NAND Exported Functions
406
  * @brief    NAND Controller functions
478
  * @brief    NAND Controller functions
407
  *
479
  *
408
  @verbatim
480
  @verbatim
409
  ==============================================================================
481
  ==============================================================================
410
                    ##### How to use NAND device driver #####
482
                    ##### How to use NAND device driver #####
Line 425... Line 497...
425
 
497
 
426
@endverbatim
498
@endverbatim
427
  * @{
499
  * @{
428
  */
500
  */
429
 
501
 
430
/** @defgroup FSMC_NAND_Exported_Functions_Group1 Initialization and de-initialization functions
502
/** @defgroup FSMC_LL_NAND_Exported_Functions_Group1 Initialization and de-initialization functions
431
  *  @brief    Initialization and Configuration functions
503
  *  @brief    Initialization and Configuration functions
432
  *
504
  *
433
@verbatim
505
@verbatim
434
  ==============================================================================
506
  ==============================================================================
435
              ##### Initialization and de_initialization functions #####
507
              ##### Initialization and de_initialization functions #####
Line 445... Line 517...
445
  */
517
  */
446
 
518
 
447
/**
519
/**
448
  * @brief  Initializes the FSMC_NAND device according to the specified
520
  * @brief  Initializes the FSMC_NAND device according to the specified
449
  *         control parameters in the FSMC_NAND_HandleTypeDef
521
  *         control parameters in the FSMC_NAND_HandleTypeDef
450
  * @param  Device: Pointer to NAND device instance
522
  * @param  Device Pointer to NAND device instance
451
  * @param  Init: Pointer to NAND Initialization structure
523
  * @param  Init Pointer to NAND Initialization structure
452
  * @retval HAL status
524
  * @retval HAL status
453
  */
525
  */
454
HAL_StatusTypeDef FSMC_NAND_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_InitTypeDef *Init)
526
HAL_StatusTypeDef FSMC_NAND_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_InitTypeDef *Init)
455
{
527
{
456
  /* Check the parameters */
528
  /* Check the parameters */
Line 465... Line 537...
465
 
537
 
466
  /* Set NAND device control parameters */
538
  /* Set NAND device control parameters */
467
  if (Init->NandBank == FSMC_NAND_BANK2)
539
  if (Init->NandBank == FSMC_NAND_BANK2)
468
  {
540
  {
469
    /* NAND bank 2 registers configuration */
541
    /* NAND bank 2 registers configuration */
470
    MODIFY_REG(Device->PCR2, PCR_CLEAR_MASK, (Init->Waitfeature                             |
542
    MODIFY_REG(Device->PCR2, PCR_CLEAR_MASK, (Init->Waitfeature                                      |
471
                                              FSMC_PCR_MEMORY_TYPE_NAND                     |
543
                                              FSMC_PCR_MEMORY_TYPE_NAND                               |
472
                                              Init->MemoryDataWidth                         |
544
                                              Init->MemoryDataWidth                                  |
473
                                              Init->EccComputation                          |
545
                                              Init->EccComputation                                   |
474
                                              Init->ECCPageSize                             |
546
                                              Init->ECCPageSize                                      |
475
                                              ((Init->TCLRSetupTime) << FSMC_PCRx_TCLR_Pos) |
547
                                              ((Init->TCLRSetupTime) << FSMC_PCRx_TCLR_Pos)  |
476
                                              ((Init->TARSetupTime)  << FSMC_PCRx_TAR_Pos)));
548
                                              ((Init->TARSetupTime)  << FSMC_PCRx_TAR_Pos)));
477
  }
549
  }
478
  else
550
  else
479
  {
551
  {
480
    /* NAND bank 3 registers configuration */
552
    /* NAND bank 3 registers configuration */
481
    MODIFY_REG(Device->PCR3, PCR_CLEAR_MASK, (Init->Waitfeature                             |
553
    MODIFY_REG(Device->PCR3, PCR_CLEAR_MASK, (Init->Waitfeature                                      |
482
                                              FSMC_PCR_MEMORY_TYPE_NAND                     |
554
                                              FSMC_PCR_MEMORY_TYPE_NAND                               |
483
                                              Init->MemoryDataWidth                         |
555
                                              Init->MemoryDataWidth                                  |
484
                                              Init->EccComputation                          |
556
                                              Init->EccComputation                                   |
485
                                              Init->ECCPageSize                             |
557
                                              Init->ECCPageSize                                      |
486
                                              ((Init->TCLRSetupTime) << FSMC_PCRx_TCLR_Pos) |
558
                                              ((Init->TCLRSetupTime) << FSMC_PCRx_TCLR_Pos)  |
487
                                              ((Init->TARSetupTime)  << FSMC_PCRx_TAR_Pos)));
559
                                              ((Init->TARSetupTime)  << FSMC_PCRx_TAR_Pos)));
488
  }
560
  }
489
 
561
 
490
  return HAL_OK;
562
  return HAL_OK;
491
}
563
}
492
 
564
 
493
/**
565
/**
494
  * @brief  Initializes the FSMC_NAND Common space Timing according to the specified
566
  * @brief  Initializes the FSMC_NAND Common space Timing according to the specified
495
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
567
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
496
  * @param  Device: Pointer to NAND device instance
568
  * @param  Device Pointer to NAND device instance
497
  * @param  Timing: Pointer to NAND timing structure
569
  * @param  Timing Pointer to NAND timing structure
498
  * @param  Bank: NAND bank number
570
  * @param  Bank NAND bank number
499
  * @retval HAL status
571
  * @retval HAL status
500
  */
572
  */
501
HAL_StatusTypeDef FSMC_NAND_CommonSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
573
HAL_StatusTypeDef FSMC_NAND_CommonSpace_Timing_Init(FSMC_NAND_TypeDef *Device,
-
 
574
                                                   FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
502
{
575
{
503
  /* Check the parameters */
576
  /* Check the parameters */
504
  assert_param(IS_FSMC_NAND_DEVICE(Device));
577
  assert_param(IS_FSMC_NAND_DEVICE(Device));
505
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
578
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
506
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
579
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
507
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
580
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
508
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
581
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
509
  assert_param(IS_FSMC_NAND_BANK(Bank));
582
  assert_param(IS_FSMC_NAND_BANK(Bank));
510
 
583
 
511
  /* Set FMC_NAND device timing parameters */
584
  /* Set FSMC_NAND device timing parameters */
512
  if(Bank == FSMC_NAND_BANK2)
585
  if (Bank == FSMC_NAND_BANK2)
513
  {
586
  {
514
    /* NAND bank 2 registers configuration */
587
    /* NAND bank 2 registers configuration */
515
    MODIFY_REG(Device->PMEM2, PMEM_CLEAR_MASK, (Timing->SetupTime                                         | \
588
    MODIFY_REG(Device->PMEM2, PMEM_CLEAR_MASK, (Timing->SetupTime                                             |
516
                                                ((Timing->WaitSetupTime) << FSMC_PMEMx_MEMWAITx_Pos)      | \
589
                                                ((Timing->WaitSetupTime) << FSMC_PMEMx_MEMWAITx_Pos) |
517
                                                ((Timing->HoldSetupTime) << FSMC_PMEMx_MEMHOLDx_Pos)      | \
590
                                                ((Timing->HoldSetupTime) << FSMC_PMEMx_MEMHOLDx_Pos) |
518
                                                ((Timing->HiZSetupTime)  << FSMC_PMEMx_MEMHIZx_Pos)));
591
                                                ((Timing->HiZSetupTime)  << FSMC_PMEMx_MEMHIZx_Pos)));
519
  }
592
  }
520
  else
593
  else
521
  {
594
  {
522
    /* NAND bank 3 registers configuration */
595
    /* NAND bank 3 registers configuration */
523
    MODIFY_REG(Device->PMEM3, PMEM_CLEAR_MASK, (Timing->SetupTime                                         | \
596
    MODIFY_REG(Device->PMEM3, PMEM_CLEAR_MASK, (Timing->SetupTime                                             |
524
                                                ((Timing->WaitSetupTime) << FSMC_PMEMx_MEMWAITx_Pos)      | \
597
                                                ((Timing->WaitSetupTime) << FSMC_PMEMx_MEMWAITx_Pos) |
525
                                                ((Timing->HoldSetupTime) << FSMC_PMEMx_MEMHOLDx_Pos)      | \
598
                                                ((Timing->HoldSetupTime) << FSMC_PMEMx_MEMHOLDx_Pos) |
526
                                                ((Timing->HiZSetupTime)  << FSMC_PMEMx_MEMHIZx_Pos)));
599
                                                ((Timing->HiZSetupTime)  << FSMC_PMEMx_MEMHIZx_Pos)));
527
  }
600
  }
528
 
601
 
529
  return HAL_OK;
602
  return HAL_OK;
530
}
603
}
531
 
604
 
532
/**
605
/**
533
  * @brief  Initializes the FSMC_NAND Attribute space Timing according to the specified
606
  * @brief  Initializes the FSMC_NAND Attribute space Timing according to the specified
534
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
607
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
535
  * @param  Device: Pointer to NAND device instance
608
  * @param  Device Pointer to NAND device instance
536
  * @param  Timing: Pointer to NAND timing structure
609
  * @param  Timing Pointer to NAND timing structure
537
  * @param  Bank: NAND bank number
610
  * @param  Bank NAND bank number
538
  * @retval HAL status
611
  * @retval HAL status
539
  */
612
  */
540
HAL_StatusTypeDef FSMC_NAND_AttributeSpace_Timing_Init(FSMC_NAND_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
613
HAL_StatusTypeDef FSMC_NAND_AttributeSpace_Timing_Init(FSMC_NAND_TypeDef *Device,
-
 
614
                                                      FSMC_NAND_PCC_TimingTypeDef *Timing, uint32_t Bank)
541
{
615
{
542
  /* Check the parameters */
616
  /* Check the parameters */
543
  assert_param(IS_FSMC_NAND_DEVICE(Device));
617
  assert_param(IS_FSMC_NAND_DEVICE(Device));
544
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
618
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
545
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
619
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
546
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
620
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
547
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
621
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
548
  assert_param(IS_FSMC_NAND_BANK(Bank));
622
  assert_param(IS_FSMC_NAND_BANK(Bank));
549
 
623
 
550
  /* Set FMC_NAND device timing parameters */
624
  /* Set FSMC_NAND device timing parameters */
551
  if(Bank == FSMC_NAND_BANK2)
625
  if (Bank == FSMC_NAND_BANK2)
552
  {
626
  {
553
    /* NAND bank 2 registers configuration */
627
    /* NAND bank 2 registers configuration */
554
    MODIFY_REG(Device->PATT2, PATT_CLEAR_MASK, (Timing->SetupTime                                         | \
628
    MODIFY_REG(Device->PATT2, PATT_CLEAR_MASK, (Timing->SetupTime                                             |
555
                                                ((Timing->WaitSetupTime) << FSMC_PATTx_ATTWAITx_Pos)      | \
629
                                                ((Timing->WaitSetupTime) << FSMC_PATTx_ATTWAITx_Pos) |
556
                                                ((Timing->HoldSetupTime) << FSMC_PATTx_ATTHOLDx_Pos)      | \
630
                                                ((Timing->HoldSetupTime) << FSMC_PATTx_ATTHOLDx_Pos) |
557
                                                ((Timing->HiZSetupTime)  << FSMC_PATTx_ATTHIZx_Pos)));
631
                                                ((Timing->HiZSetupTime)  << FSMC_PATTx_ATTHIZx_Pos)));
558
  }
632
  }
559
  else
633
  else
560
  {
634
  {
561
    /* NAND bank 3 registers configuration */
635
    /* NAND bank 3 registers configuration */
562
    MODIFY_REG(Device->PATT3, PATT_CLEAR_MASK, (Timing->SetupTime                                         | \
636
    MODIFY_REG(Device->PATT3, PATT_CLEAR_MASK, (Timing->SetupTime                                             |
563
                                                ((Timing->WaitSetupTime) << FSMC_PATTx_ATTWAITx_Pos)      | \
637
                                                ((Timing->WaitSetupTime) << FSMC_PATTx_ATTWAITx_Pos) |
564
                                                ((Timing->HoldSetupTime) << FSMC_PATTx_ATTHOLDx_Pos)      | \
638
                                                ((Timing->HoldSetupTime) << FSMC_PATTx_ATTHOLDx_Pos) |
565
                                                ((Timing->HiZSetupTime)  << FSMC_PATTx_ATTHIZx_Pos)));
639
                                                ((Timing->HiZSetupTime)  << FSMC_PATTx_ATTHIZx_Pos)));
566
  }
640
  }
567
 
641
 
568
  return HAL_OK;
642
  return HAL_OK;
569
}
643
}
570
 
644
 
571
 
-
 
572
/**
645
/**
573
  * @brief  DeInitializes the FSMC_NAND device
646
  * @brief  DeInitializes the FSMC_NAND device
574
  * @param  Device: Pointer to NAND device instance
647
  * @param  Device Pointer to NAND device instance
575
  * @param  Bank: NAND bank number
648
  * @param  Bank NAND bank number
576
  * @retval HAL status
649
  * @retval HAL status
577
  */
650
  */
578
HAL_StatusTypeDef FSMC_NAND_DeInit(FSMC_NAND_TypeDef *Device, uint32_t Bank)
651
HAL_StatusTypeDef FSMC_NAND_DeInit(FSMC_NAND_TypeDef *Device, uint32_t Bank)
579
{
652
{
580
  /* Check the parameters */
653
  /* Check the parameters */
Line 583... Line 656...
583
 
656
 
584
  /* Disable the NAND Bank */
657
  /* Disable the NAND Bank */
585
  __FSMC_NAND_DISABLE(Device, Bank);
658
  __FSMC_NAND_DISABLE(Device, Bank);
586
 
659
 
587
  /* De-initialize the NAND Bank */
660
  /* De-initialize the NAND Bank */
588
  if(Bank == FSMC_NAND_BANK2)
661
  if (Bank == FSMC_NAND_BANK2)
589
  {
662
  {
590
    /* Set the FSMC_NAND_BANK2 registers to their reset values */
663
    /* Set the FSMC_NAND_BANK2 registers to their reset values */
591
    WRITE_REG(Device->PCR2,  0x00000018U);
664
    WRITE_REG(Device->PCR2,  0x00000018U);
592
    WRITE_REG(Device->SR2,   0x00000040U);
665
    WRITE_REG(Device->SR2,   0x00000040U);
593
    WRITE_REG(Device->PMEM2, 0xFCFCFCFCU);
666
    WRITE_REG(Device->PMEM2, 0xFCFCFCFCU);
Line 608... Line 681...
608
 
681
 
609
/**
682
/**
610
  * @}
683
  * @}
611
  */
684
  */
612
 
685
 
613
 
-
 
614
/** @defgroup FSMC_NAND_Exported_Functions_Group2 Peripheral Control functions
686
/** @defgroup HAL_FSMC_NAND_Group2 Peripheral Control functions
615
  *  @brief   management functions
687
  *  @brief   management functions
616
  *
688
  *
617
@verbatim
689
@verbatim
618
  ==============================================================================
690
  ==============================================================================
619
                       ##### FSMC_NAND Control functions #####
691
                       ##### FSMC_NAND Control functions #####
Line 624... Line 696...
624
 
696
 
625
@endverbatim
697
@endverbatim
626
  * @{
698
  * @{
627
  */
699
  */
628
 
700
 
-
 
701
 
629
/**
702
/**
630
  * @brief  Enables dynamically FSMC_NAND ECC feature.
703
  * @brief  Enables dynamically FSMC_NAND ECC feature.
631
  * @param  Device: Pointer to NAND device instance
704
  * @param  Device Pointer to NAND device instance
632
  * @param  Bank: NAND bank number
705
  * @param  Bank NAND bank number
633
  * @retval HAL status
706
  * @retval HAL status
634
  */
707
  */
635
HAL_StatusTypeDef FSMC_NAND_ECC_Enable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
708
HAL_StatusTypeDef FSMC_NAND_ECC_Enable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
636
{
709
{
637
  /* Check the parameters */
710
  /* Check the parameters */
638
  assert_param(IS_FSMC_NAND_DEVICE(Device));
711
  assert_param(IS_FSMC_NAND_DEVICE(Device));
639
  assert_param(IS_FSMC_NAND_BANK(Bank));
712
  assert_param(IS_FSMC_NAND_BANK(Bank));
640
 
713
 
641
  /* Enable ECC feature */
714
  /* Enable ECC feature */
642
  if(Bank == FSMC_NAND_BANK2)
715
  if (Bank == FSMC_NAND_BANK2)
643
  {
716
  {
644
    SET_BIT(Device->PCR2, FSMC_PCRx_ECCEN);
717
    SET_BIT(Device->PCR2, FSMC_PCRx_ECCEN);
645
  }
718
  }
646
  else
719
  else
647
  {
720
  {
Line 649... Line 722...
649
  }
722
  }
650
 
723
 
651
  return HAL_OK;
724
  return HAL_OK;
652
}
725
}
653
 
726
 
-
 
727
 
654
/**
728
/**
655
  * @brief  Disables dynamically FSMC_NAND ECC feature.
729
  * @brief  Disables dynamically FSMC_NAND ECC feature.
656
  * @param  Device: Pointer to NAND device instance
730
  * @param  Device Pointer to NAND device instance
657
  * @param  Bank: NAND bank number
731
  * @param  Bank NAND bank number
658
  * @retval HAL status
732
  * @retval HAL status
659
  */
733
  */
660
HAL_StatusTypeDef FSMC_NAND_ECC_Disable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
734
HAL_StatusTypeDef FSMC_NAND_ECC_Disable(FSMC_NAND_TypeDef *Device, uint32_t Bank)
661
{
735
{
662
  /* Check the parameters */
736
  /* Check the parameters */
663
  assert_param(IS_FSMC_NAND_DEVICE(Device));
737
  assert_param(IS_FSMC_NAND_DEVICE(Device));
664
  assert_param(IS_FSMC_NAND_BANK(Bank));
738
  assert_param(IS_FSMC_NAND_BANK(Bank));
665
 
739
 
666
  /* Disable ECC feature */
740
  /* Disable ECC feature */
667
  if(Bank == FSMC_NAND_BANK2)
741
  if (Bank == FSMC_NAND_BANK2)
668
  {
742
  {
669
    CLEAR_BIT(Device->PCR2, FSMC_PCRx_ECCEN);
743
    CLEAR_BIT(Device->PCR2, FSMC_PCRx_ECCEN);
670
  }
744
  }
671
  else
745
  else
672
  {
746
  {
Line 676... Line 750...
676
  return HAL_OK;
750
  return HAL_OK;
677
}
751
}
678
 
752
 
679
/**
753
/**
680
  * @brief  Disables dynamically FSMC_NAND ECC feature.
754
  * @brief  Disables dynamically FSMC_NAND ECC feature.
681
  * @param  Device: Pointer to NAND device instance
755
  * @param  Device Pointer to NAND device instance
682
  * @param  ECCval: Pointer to ECC value
756
  * @param  ECCval Pointer to ECC value
683
  * @param  Bank: NAND bank number
757
  * @param  Bank NAND bank number
684
  * @param  Timeout: Timeout wait value  
758
  * @param  Timeout Timeout wait value
685
  * @retval HAL status
759
  * @retval HAL status
686
  */
760
  */
687
HAL_StatusTypeDef FSMC_NAND_GetECC(FSMC_NAND_TypeDef *Device, uint32_t *ECCval, uint32_t Bank, uint32_t Timeout)
761
HAL_StatusTypeDef FSMC_NAND_GetECC(FSMC_NAND_TypeDef *Device, uint32_t *ECCval, uint32_t Bank,
-
 
762
                                  uint32_t Timeout)
688
{
763
{
689
  uint32_t tickstart = 0U;
764
  uint32_t tickstart;
690
 
765
 
691
  /* Check the parameters */
766
  /* Check the parameters */
692
  assert_param(IS_FSMC_NAND_DEVICE(Device));
767
  assert_param(IS_FSMC_NAND_DEVICE(Device));
693
  assert_param(IS_FSMC_NAND_BANK(Bank));
768
  assert_param(IS_FSMC_NAND_BANK(Bank));
694
 
769
 
695
  /* Get tick */
770
  /* Get tick */
696
  tickstart = HAL_GetTick();
771
  tickstart = HAL_GetTick();
697
 
772
 
698
  /* Wait until FIFO is empty */
773
  /* Wait until FIFO is empty */
699
  while(__FSMC_NAND_GET_FLAG(Device, Bank, FSMC_FLAG_FEMPT) == RESET)
774
  while (__FSMC_NAND_GET_FLAG(Device, Bank, FSMC_FLAG_FEMPT) == RESET)
700
  {
775
  {
701
    /* Check for the Timeout */
776
    /* Check for the Timeout */
702
    if(Timeout != HAL_MAX_DELAY)
777
    if (Timeout != HAL_MAX_DELAY)
703
    {
778
    {
704
      if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout))
779
      if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
705
      {
780
      {
706
        return HAL_TIMEOUT;
781
        return HAL_TIMEOUT;
707
      }
782
      }
708
    }
783
    }
709
  }
784
  }
710
 
785
 
711
  if(Bank == FSMC_NAND_BANK2)
786
  if (Bank == FSMC_NAND_BANK2)
712
  {
787
  {
713
    /* Get the ECCR2 register value */
788
    /* Get the ECCR2 register value */
714
    *ECCval = (uint32_t)Device->ECCR2;
789
    *ECCval = (uint32_t)Device->ECCR2;
715
  }
790
  }
716
  else
791
  else
Line 723... Line 798...
723
}
798
}
724
 
799
 
725
/**
800
/**
726
  * @}
801
  * @}
727
  */
802
  */
-
 
803
#endif /* FSMC_BANK3 */
728
 
804
 
729
/**
-
 
730
  * @}
805
#if defined(FSMC_BANK4)
731
  */
-
 
732
 
806
 
733
/** @defgroup FSMC_PCCARD FSMC PCCARD Controller functions
807
/** @addtogroup FSMC_LL_PCCARD
734
  * @brief    PCCARD Controller functions
808
  * @brief    PCCARD Controller functions
735
  *
809
  *
736
  @verbatim
810
  @verbatim
737
  ==============================================================================
811
  ==============================================================================
738
                    ##### How to use PCCARD device driver #####
812
                    ##### How to use PCCARD device driver #####
Line 747... Line 821...
747
        FSMC_PCCARD_CommonSpace_Timing_Init()
821
        FSMC_PCCARD_CommonSpace_Timing_Init()
748
    (+) FSMC PCCARD bank attribute space timing configuration using the function
822
    (+) FSMC PCCARD bank attribute space timing configuration using the function
749
        FSMC_PCCARD_AttributeSpace_Timing_Init()
823
        FSMC_PCCARD_AttributeSpace_Timing_Init()
750
    (+) FSMC PCCARD bank IO space timing configuration using the function
824
    (+) FSMC PCCARD bank IO space timing configuration using the function
751
        FSMC_PCCARD_IOSpace_Timing_Init()
825
        FSMC_PCCARD_IOSpace_Timing_Init()
752
 
-
 
753
@endverbatim
826
@endverbatim
754
  * @{
827
  * @{
755
  */
828
  */
756
 
829
 
757
/** @defgroup FSMC_PCCARD_Exported_Functions_Group1 Initialization and de-initialization functions
830
/** @addtogroup FSMC_LL_PCCARD_Private_Functions_Group1
758
  *  @brief    Initialization and Configuration functions
831
  *  @brief    Initialization and Configuration functions
759
  *
832
  *
760
@verbatim
833
@verbatim
761
  ==============================================================================
834
  ==============================================================================
762
              ##### Initialization and de_initialization functions #####
835
              ##### Initialization and de_initialization functions #####
Line 772... Line 845...
772
  */
845
  */
773
 
846
 
774
/**
847
/**
775
  * @brief  Initializes the FSMC_PCCARD device according to the specified
848
  * @brief  Initializes the FSMC_PCCARD device according to the specified
776
  *         control parameters in the FSMC_PCCARD_HandleTypeDef
849
  *         control parameters in the FSMC_PCCARD_HandleTypeDef
777
  * @param  Device: Pointer to PCCARD device instance
850
  * @param  Device Pointer to PCCARD device instance
778
  * @param  Init: Pointer to PCCARD Initialization structure
851
  * @param  Init Pointer to PCCARD Initialization structure
779
  * @retval HAL status
852
  * @retval HAL status
780
  */
853
  */
781
HAL_StatusTypeDef FSMC_PCCARD_Init(FSMC_PCCARD_TypeDef *Device, FSMC_PCCARD_InitTypeDef *Init)
854
HAL_StatusTypeDef FSMC_PCCARD_Init(FSMC_PCCARD_TypeDef *Device, FSMC_PCCARD_InitTypeDef *Init)
782
{
855
{
783
  /* Check the parameters */
856
  /* Check the parameters */
Line 786... Line 859...
786
  assert_param(IS_FSMC_TCLR_TIME(Init->TCLRSetupTime));
859
  assert_param(IS_FSMC_TCLR_TIME(Init->TCLRSetupTime));
787
  assert_param(IS_FSMC_TAR_TIME(Init->TARSetupTime));
860
  assert_param(IS_FSMC_TAR_TIME(Init->TARSetupTime));
788
 
861
 
789
  /* Set FSMC_PCCARD device control parameters */
862
  /* Set FSMC_PCCARD device control parameters */
790
  MODIFY_REG(Device->PCR4,
863
  MODIFY_REG(Device->PCR4,
791
             (FSMC_PCRx_PTYP | FSMC_PCRx_PWAITEN |  FSMC_PCRx_PWID  |
864
             (FSMC_PCRx_PTYP                                          |
-
 
865
              FSMC_PCRx_PWAITEN                                       |
-
 
866
              FSMC_PCRx_PWID                                          |
-
 
867
              FSMC_PCRx_TCLR                                          |
792
              FSMC_PCRx_TCLR | FSMC_PCRx_TAR),
868
              FSMC_PCRx_TAR),
793
             (FSMC_PCR_MEMORY_TYPE_PCCARD                           |
869
             (FSMC_PCR_MEMORY_TYPE_PCCARD                             |
794
              Init->Waitfeature                                     |
870
              Init->Waitfeature                                      |
795
              FSMC_NAND_PCC_MEM_BUS_WIDTH_16                        |
871
              FSMC_NAND_PCC_MEM_BUS_WIDTH_16                          |
796
              (Init->TCLRSetupTime << FSMC_PCRx_TCLR_Pos)           |
872
              (Init->TCLRSetupTime << FSMC_PCRx_TCLR_Pos)   |
797
              (Init->TARSetupTime << FSMC_PCRx_TAR_Pos)));
873
              (Init->TARSetupTime  << FSMC_PCRx_TAR_Pos)));
798
 
874
 
799
  return HAL_OK;
875
  return HAL_OK;
800
 
-
 
801
}
876
}
802
 
877
 
803
/**
878
/**
804
  * @brief  Initializes the FSMC_PCCARD Common space Timing according to the specified
879
  * @brief  Initializes the FSMC_PCCARD Common space Timing according to the specified
805
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
880
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
806
  * @param  Device: Pointer to PCCARD device instance
881
  * @param  Device Pointer to PCCARD device instance
807
  * @param  Timing: Pointer to PCCARD timing structure
882
  * @param  Timing Pointer to PCCARD timing structure
808
  * @retval HAL status
883
  * @retval HAL status
809
  */
884
  */
810
HAL_StatusTypeDef FSMC_PCCARD_CommonSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
885
HAL_StatusTypeDef FSMC_PCCARD_CommonSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device,
-
 
886
                                                              FSMC_NAND_PCC_TimingTypeDef *Timing)
811
{
887
{
812
  /* Check the parameters */
888
  /* Check the parameters */
813
  assert_param(IS_FSMC_PCCARD_DEVICE(Device));
889
  assert_param(IS_FSMC_PCCARD_DEVICE(Device));
814
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
890
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
815
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
891
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
816
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
892
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
817
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
893
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
818
 
894
 
819
  /* Set PCCARD timing parameters */
895
  /* Set PCCARD timing parameters */
820
  MODIFY_REG(Device->PMEM4, PMEM_CLEAR_MASK,
896
  MODIFY_REG(Device->PMEM4, PMEM_CLEAR_MASK,
821
             (Timing->SetupTime                                     |
897
             (Timing->SetupTime                                              |
822
              ((Timing->WaitSetupTime) << FSMC_PMEMx_MEMWAITx_Pos)  |
898
              ((Timing->WaitSetupTime) << FSMC_PMEMx_MEMWAITx_Pos)  |
823
              ((Timing->HoldSetupTime) << FSMC_PMEMx_MEMHOLDx_Pos)  |
899
              ((Timing->HoldSetupTime) << FSMC_PMEMx_MEMHOLDx_Pos)  |
824
              ((Timing->HiZSetupTime) << FSMC_PMEMx_MEMHIZx_Pos)));
900
              ((Timing->HiZSetupTime)  << FSMC_PMEMx_MEMHIZx_Pos)));
825
 
901
 
826
  return HAL_OK;
902
  return HAL_OK;
827
}
903
}
828
 
904
 
829
/**
905
/**
830
  * @brief  Initializes the FSMC_PCCARD Attribute space Timing according to the specified
906
  * @brief  Initializes the FSMC_PCCARD Attribute space Timing according to the specified
831
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
907
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
832
  * @param  Device: Pointer to PCCARD device instance
908
  * @param  Device Pointer to PCCARD device instance
833
  * @param  Timing: Pointer to PCCARD timing structure
909
  * @param  Timing Pointer to PCCARD timing structure
834
  * @retval HAL status
910
  * @retval HAL status
835
  */
911
  */
836
HAL_StatusTypeDef FSMC_PCCARD_AttributeSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
912
HAL_StatusTypeDef FSMC_PCCARD_AttributeSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device,
-
 
913
                                                                 FSMC_NAND_PCC_TimingTypeDef *Timing)
837
{
914
{
838
  /* Check the parameters */
915
  /* Check the parameters */
839
  assert_param(IS_FSMC_PCCARD_DEVICE(Device));
916
  assert_param(IS_FSMC_PCCARD_DEVICE(Device));
840
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
917
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
841
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
918
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
842
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
919
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
843
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
920
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
844
 
921
 
845
  /* Set PCCARD timing parameters */
922
  /* Set PCCARD timing parameters */
846
  MODIFY_REG(Device->PATT4, PATT_CLEAR_MASK,                          \
923
  MODIFY_REG(Device->PATT4, PATT_CLEAR_MASK,
847
             (Timing->SetupTime                                     | \
924
             (Timing->SetupTime                                              |
848
              ((Timing->WaitSetupTime) << FSMC_PATTx_ATTWAITx_Pos)  | \
925
              ((Timing->WaitSetupTime) << FSMC_PATTx_ATTWAITx_Pos)  |
849
              ((Timing->HoldSetupTime) << FSMC_PATTx_ATTHOLDx_Pos)  | \
926
              ((Timing->HoldSetupTime) << FSMC_PATTx_ATTHOLDx_Pos)  |
850
              ((Timing->HiZSetupTime)  << FSMC_PATTx_ATTHIZx_Pos)));
927
              ((Timing->HiZSetupTime)  << FSMC_PATTx_ATTHIZx_Pos)));
851
 
928
 
852
  return HAL_OK;
929
  return HAL_OK;
853
}
930
}
854
 
931
 
855
/**
932
/**
856
  * @brief  Initializes the FSMC_PCCARD IO space Timing according to the specified
933
  * @brief  Initializes the FSMC_PCCARD IO space Timing according to the specified
857
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
934
  *         parameters in the FSMC_NAND_PCC_TimingTypeDef
858
  * @param  Device: Pointer to PCCARD device instance
935
  * @param  Device Pointer to PCCARD device instance
859
  * @param  Timing: Pointer to PCCARD timing structure
936
  * @param  Timing Pointer to PCCARD timing structure
860
  * @retval HAL status
937
  * @retval HAL status
861
  */
938
  */
862
HAL_StatusTypeDef FSMC_PCCARD_IOSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device, FSMC_NAND_PCC_TimingTypeDef *Timing)
939
HAL_StatusTypeDef FSMC_PCCARD_IOSpace_Timing_Init(FSMC_PCCARD_TypeDef *Device,
-
 
940
                                                          FSMC_NAND_PCC_TimingTypeDef *Timing)
863
{
941
{
864
  /* Check the parameters */
942
  /* Check the parameters */
865
  assert_param(IS_FSMC_PCCARD_DEVICE(Device));
943
  assert_param(IS_FSMC_PCCARD_DEVICE(Device));
866
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
944
  assert_param(IS_FSMC_SETUP_TIME(Timing->SetupTime));
867
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
945
  assert_param(IS_FSMC_WAIT_TIME(Timing->WaitSetupTime));
868
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
946
  assert_param(IS_FSMC_HOLD_TIME(Timing->HoldSetupTime));
869
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
947
  assert_param(IS_FSMC_HIZ_TIME(Timing->HiZSetupTime));
870
 
948
 
871
  /* Set FSMC_PCCARD device timing parameters */
949
  /* Set FSMC_PCCARD device timing parameters */
872
  MODIFY_REG(Device->PIO4, PIO4_CLEAR_MASK,                        \
950
  MODIFY_REG(Device->PIO4, PIO4_CLEAR_MASK,
873
             (Timing->SetupTime                                  | \
951
             (Timing->SetupTime                                           |
874
              (Timing->WaitSetupTime   << FSMC_PIO4_IOWAIT4_Pos) | \
952
              (Timing->WaitSetupTime   << FSMC_PIO4_IOWAIT4_Pos) |
875
              (Timing->HoldSetupTime   << FSMC_PIO4_IOHOLD4_Pos) | \
953
              (Timing->HoldSetupTime   << FSMC_PIO4_IOHOLD4_Pos) |
876
              (Timing->HiZSetupTime    << FSMC_PIO4_IOHIZ4_Pos)));
954
              (Timing->HiZSetupTime    << FSMC_PIO4_IOHIZ4_Pos)));
877
 
955
 
878
  return HAL_OK;
956
  return HAL_OK;
879
}
957
}
880
 
958
 
881
/**
959
/**
882
  * @brief  DeInitializes the FSMC_PCCARD device
960
  * @brief  DeInitializes the FSMC_PCCARD device
883
  * @param  Device: Pointer to PCCARD device instance
961
  * @param  Device Pointer to PCCARD device instance
884
  * @retval HAL status
962
  * @retval HAL status
885
  */
963
  */
886
HAL_StatusTypeDef FSMC_PCCARD_DeInit(FSMC_PCCARD_TypeDef *Device)
964
HAL_StatusTypeDef FSMC_PCCARD_DeInit(FSMC_PCCARD_TypeDef *Device)
887
{
965
{
888
  /* Check the parameters */
966
  /* Check the parameters */
Line 890... Line 968...
890
 
968
 
891
  /* Disable the FSMC_PCCARD device */
969
  /* Disable the FSMC_PCCARD device */
892
  __FSMC_PCCARD_DISABLE(Device);
970
  __FSMC_PCCARD_DISABLE(Device);
893
 
971
 
894
  /* De-initialize the FSMC_PCCARD device */
972
  /* De-initialize the FSMC_PCCARD device */
895
  WRITE_REG(Device->PCR4,  0x00000018U);
973
  Device->PCR4    = 0x00000018U;
896
  WRITE_REG(Device->SR4,   0x00000040U);
974
  Device->SR4     = 0x00000040U;
897
  WRITE_REG(Device->PMEM4, 0xFCFCFCFCU);
975
  Device->PMEM4   = 0xFCFCFCFCU;
898
  WRITE_REG(Device->PATT4, 0xFCFCFCFCU);
976
  Device->PATT4   = 0xFCFCFCFCU;
899
  WRITE_REG(Device->PIO4,  0xFCFCFCFCU);
977
  Device->PIO4    = 0xFCFCFCFCU;
900
 
978
 
901
  return HAL_OK;
979
  return HAL_OK;
902
}
980
}
903
 
981
 
904
/**
982
/**
905
  * @}
983
  * @}
906
  */
984
  */
-
 
985
#endif /* FSMC_BANK4 */
-
 
986
 
907
 
987
 
908
/**
988
/**
909
  * @}
989
  * @}
910
  */
990
  */
911
#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG */
-
 
912
 
991
 
913
/**
992
/**
914
  * @}
993
  * @}
915
  */
994
  */
916
 
995
 
-
 
996
#endif /* HAL_NOR_MODULE_ENABLED */
917
/**
997
/**
918
  * @}
998
  * @}
919
  */
999
  */
920
 
-
 
921
#endif /* HAL_SRAM_MODULE_ENABLED || HAL_NOR_MODULE_ENABLED || HAL_NAND_MODULE_ENABLED || HAL_PCCARD_MODULE_ENABLED */
-
 
922
 
-
 
923
#endif /* FSMC_BANK1 */
-
 
924
 
-
 
925
/**
1000
/**
926
  * @}
1001
  * @}
927
  */
1002
  */
928
 
1003
 
929
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
1004
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/