Modified version of the mbed library for use with the Nucleo boards.

Dependents:   EEPROMWrite Full-Project

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Thu Aug 20 10:45:13 2015 +0100
Revision:
613:bc40b8d2aec4
Parent:
532:fe11edbda85c
Synchronized with git revision 92ca8c7b60a283b6bb60eb65b183dac1599f0ade

Full URL: https://github.com/mbedmicro/mbed/commit/92ca8c7b60a283b6bb60eb65b183dac1599f0ade/

Nordic: update application start address in GCC linker script

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 235:685d5f11838f 1 /**
mbed_official 235:685d5f11838f 2 ******************************************************************************
mbed_official 235:685d5f11838f 3 * @file stm32f4xx_hal_pccard.c
mbed_official 235:685d5f11838f 4 * @author MCD Application Team
mbed_official 613:bc40b8d2aec4 5 * @version V1.3.2
mbed_official 613:bc40b8d2aec4 6 * @date 26-June-2015
mbed_official 235:685d5f11838f 7 * @brief PCCARD HAL module driver.
mbed_official 235:685d5f11838f 8 * This file provides a generic firmware to drive PCCARD memories mounted
mbed_official 235:685d5f11838f 9 * as external device.
mbed_official 235:685d5f11838f 10 *
mbed_official 235:685d5f11838f 11 @verbatim
mbed_official 235:685d5f11838f 12 ===============================================================================
mbed_official 235:685d5f11838f 13 ##### How to use this driver #####
mbed_official 235:685d5f11838f 14 ===============================================================================
mbed_official 235:685d5f11838f 15 [..]
mbed_official 235:685d5f11838f 16 This driver is a generic layered driver which contains a set of APIs used to
mbed_official 235:685d5f11838f 17 control PCCARD/compact flash memories. It uses the FMC/FSMC layer functions
mbed_official 235:685d5f11838f 18 to interface with PCCARD devices. This driver is used for:
mbed_official 235:685d5f11838f 19
mbed_official 532:fe11edbda85c 20 (+) PCCARD/Compact Flash memory configuration sequence using the function
mbed_official 532:fe11edbda85c 21 HAL_PCCARD_Init()/HAL_CF_Init() with control and timing parameters for
mbed_official 532:fe11edbda85c 22 both common and attribute spaces.
mbed_official 235:685d5f11838f 23
mbed_official 532:fe11edbda85c 24 (+) Read PCCARD/Compact Flash memory maker and device IDs using the function
mbed_official 532:fe11edbda85c 25 HAL_PCCARD_Read_ID()/HAL_CF_Read_ID(). The read information is stored in
mbed_official 532:fe11edbda85c 26 the CompactFlash_ID structure declared by the function caller.
mbed_official 235:685d5f11838f 27
mbed_official 532:fe11edbda85c 28 (+) Access PCCARD/Compact Flash memory by read/write operations using the functions
mbed_official 532:fe11edbda85c 29 HAL_PCCARD_Read_Sector()/ HAL_PCCARD_Write_Sector() -
mbed_official 235:685d5f11838f 30 HAL_CF_Read_Sector()/HAL_CF_Write_Sector(), to read/write sector.
mbed_official 235:685d5f11838f 31
mbed_official 532:fe11edbda85c 32 (+) Perform PCCARD/Compact Flash Reset chip operation using the function
mbed_official 532:fe11edbda85c 33 HAL_PCCARD_Reset()/HAL_CF_Reset.
mbed_official 235:685d5f11838f 34
mbed_official 532:fe11edbda85c 35 (+) Perform PCCARD/Compact Flash erase sector operation using the function
mbed_official 532:fe11edbda85c 36 HAL_PCCARD_Erase_Sector()/HAL_CF_Erase_Sector.
mbed_official 235:685d5f11838f 37
mbed_official 532:fe11edbda85c 38 (+) Read the PCCARD/Compact Flash status operation using the function
mbed_official 532:fe11edbda85c 39 HAL_PCCARD_ReadStatus()/HAL_CF_ReadStatus().
mbed_official 235:685d5f11838f 40
mbed_official 532:fe11edbda85c 41 (+) You can monitor the PCCARD/Compact Flash device HAL state by calling
mbed_official 532:fe11edbda85c 42 the function HAL_PCCARD_GetState()/HAL_CF_GetState()
mbed_official 235:685d5f11838f 43
mbed_official 235:685d5f11838f 44 [..]
mbed_official 235:685d5f11838f 45 (@) This driver is a set of generic APIs which handle standard PCCARD/compact flash
mbed_official 532:fe11edbda85c 46 operations. If a PCCARD/Compact Flash device contains different operations
mbed_official 235:685d5f11838f 47 and/or implementations, it should be implemented separately.
mbed_official 235:685d5f11838f 48
mbed_official 235:685d5f11838f 49 @endverbatim
mbed_official 235:685d5f11838f 50 ******************************************************************************
mbed_official 235:685d5f11838f 51 * @attention
mbed_official 235:685d5f11838f 52 *
mbed_official 532:fe11edbda85c 53 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 235:685d5f11838f 54 *
mbed_official 235:685d5f11838f 55 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 235:685d5f11838f 56 * are permitted provided that the following conditions are met:
mbed_official 235:685d5f11838f 57 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 235:685d5f11838f 58 * this list of conditions and the following disclaimer.
mbed_official 235:685d5f11838f 59 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 235:685d5f11838f 60 * this list of conditions and the following disclaimer in the documentation
mbed_official 235:685d5f11838f 61 * and/or other materials provided with the distribution.
mbed_official 235:685d5f11838f 62 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 235:685d5f11838f 63 * may be used to endorse or promote products derived from this software
mbed_official 235:685d5f11838f 64 * without specific prior written permission.
mbed_official 235:685d5f11838f 65 *
mbed_official 235:685d5f11838f 66 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 235:685d5f11838f 67 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 235:685d5f11838f 68 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 235:685d5f11838f 69 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 235:685d5f11838f 70 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 235:685d5f11838f 71 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 235:685d5f11838f 72 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 235:685d5f11838f 73 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 235:685d5f11838f 74 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 235:685d5f11838f 75 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 235:685d5f11838f 76 *
mbed_official 235:685d5f11838f 77 ******************************************************************************
mbed_official 235:685d5f11838f 78 */
mbed_official 235:685d5f11838f 79
mbed_official 235:685d5f11838f 80 /* Includes ------------------------------------------------------------------*/
mbed_official 235:685d5f11838f 81 #include "stm32f4xx_hal.h"
mbed_official 235:685d5f11838f 82
mbed_official 235:685d5f11838f 83 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 235:685d5f11838f 84 * @{
mbed_official 235:685d5f11838f 85 */
mbed_official 235:685d5f11838f 86
mbed_official 532:fe11edbda85c 87 #ifdef HAL_PCCARD_MODULE_ENABLED
mbed_official 532:fe11edbda85c 88 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
mbed_official 532:fe11edbda85c 89 defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
mbed_official 532:fe11edbda85c 90 /** @defgroup PCCARD PCCARD
mbed_official 532:fe11edbda85c 91 * @brief PCCARD HAL module driver
mbed_official 532:fe11edbda85c 92 * @{
mbed_official 532:fe11edbda85c 93 */
mbed_official 532:fe11edbda85c 94 /* Private typedef -----------------------------------------------------------*/
mbed_official 532:fe11edbda85c 95 /* Private define ------------------------------------------------------------*/
mbed_official 532:fe11edbda85c 96
mbed_official 532:fe11edbda85c 97 /** @defgroup PCCARD_Private_Defines PCCARD Private Defines
mbed_official 235:685d5f11838f 98 * @{
mbed_official 235:685d5f11838f 99 */
mbed_official 532:fe11edbda85c 100 #define PCCARD_TIMEOUT_READ_ID (uint32_t)0x0000FFFF
mbed_official 532:fe11edbda85c 101 #define PCCARD_TIMEOUT_READ_WRITE_SECTOR (uint32_t)0x0000FFFF
mbed_official 532:fe11edbda85c 102 #define PCCARD_TIMEOUT_ERASE_SECTOR (uint32_t)0x00000400
mbed_official 532:fe11edbda85c 103 #define PCCARD_TIMEOUT_STATUS (uint32_t)0x01000000
mbed_official 235:685d5f11838f 104
mbed_official 532:fe11edbda85c 105 #define PCCARD_STATUS_OK (uint8_t)0x58
mbed_official 532:fe11edbda85c 106 #define PCCARD_STATUS_WRITE_OK (uint8_t)0x50
mbed_official 532:fe11edbda85c 107 /**
mbed_official 532:fe11edbda85c 108 * @}
mbed_official 532:fe11edbda85c 109 */
mbed_official 532:fe11edbda85c 110
mbed_official 235:685d5f11838f 111 /* Private macro -------------------------------------------------------------*/
mbed_official 235:685d5f11838f 112 /* Private variables ---------------------------------------------------------*/
mbed_official 532:fe11edbda85c 113 /* Private function ----------------------------------------------------------*/
mbed_official 532:fe11edbda85c 114 /* Exported functions --------------------------------------------------------*/
mbed_official 532:fe11edbda85c 115 /** @defgroup PCCARD_Exported_Functions PCCARD Exported Functions
mbed_official 235:685d5f11838f 116 * @{
mbed_official 235:685d5f11838f 117 */
mbed_official 235:685d5f11838f 118
mbed_official 532:fe11edbda85c 119 /** @defgroup PCCARD_Exported_Functions_Group1 Initialization and de-initialization functions
mbed_official 235:685d5f11838f 120 * @brief Initialization and Configuration functions
mbed_official 235:685d5f11838f 121 *
mbed_official 235:685d5f11838f 122 @verbatim
mbed_official 235:685d5f11838f 123 ==============================================================================
mbed_official 235:685d5f11838f 124 ##### PCCARD Initialization and de-initialization functions #####
mbed_official 235:685d5f11838f 125 ==============================================================================
mbed_official 235:685d5f11838f 126 [..]
mbed_official 235:685d5f11838f 127 This section provides functions allowing to initialize/de-initialize
mbed_official 235:685d5f11838f 128 the PCCARD memory
mbed_official 235:685d5f11838f 129
mbed_official 235:685d5f11838f 130 @endverbatim
mbed_official 235:685d5f11838f 131 * @{
mbed_official 235:685d5f11838f 132 */
mbed_official 235:685d5f11838f 133
mbed_official 235:685d5f11838f 134 /**
mbed_official 235:685d5f11838f 135 * @brief Perform the PCCARD memory Initialization sequence
mbed_official 235:685d5f11838f 136 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 137 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 138 * @param ComSpaceTiming: Common space timing structure
mbed_official 235:685d5f11838f 139 * @param AttSpaceTiming: Attribute space timing structure
mbed_official 235:685d5f11838f 140 * @param IOSpaceTiming: IO space timing structure
mbed_official 235:685d5f11838f 141 * @retval HAL status
mbed_official 235:685d5f11838f 142 */
mbed_official 235:685d5f11838f 143 HAL_StatusTypeDef HAL_PCCARD_Init(PCCARD_HandleTypeDef *hpccard, FMC_NAND_PCC_TimingTypeDef *ComSpaceTiming, FMC_NAND_PCC_TimingTypeDef *AttSpaceTiming, FMC_NAND_PCC_TimingTypeDef *IOSpaceTiming)
mbed_official 235:685d5f11838f 144 {
mbed_official 235:685d5f11838f 145 /* Check the PCCARD controller state */
mbed_official 613:bc40b8d2aec4 146 if(hpccard == NULL)
mbed_official 235:685d5f11838f 147 {
mbed_official 235:685d5f11838f 148 return HAL_ERROR;
mbed_official 235:685d5f11838f 149 }
mbed_official 235:685d5f11838f 150
mbed_official 235:685d5f11838f 151 if(hpccard->State == HAL_PCCARD_STATE_RESET)
mbed_official 235:685d5f11838f 152 {
mbed_official 532:fe11edbda85c 153 /* Allocate lock resource and initialize it */
mbed_official 532:fe11edbda85c 154 hpccard->Lock = HAL_UNLOCKED;
mbed_official 235:685d5f11838f 155 /* Initialize the low level hardware (MSP) */
mbed_official 235:685d5f11838f 156 HAL_PCCARD_MspInit(hpccard);
mbed_official 235:685d5f11838f 157 }
mbed_official 235:685d5f11838f 158
mbed_official 235:685d5f11838f 159 /* Initialize the PCCARD state */
mbed_official 235:685d5f11838f 160 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 235:685d5f11838f 161
mbed_official 235:685d5f11838f 162 /* Initialize PCCARD control Interface */
mbed_official 235:685d5f11838f 163 FMC_PCCARD_Init(hpccard->Instance, &(hpccard->Init));
mbed_official 235:685d5f11838f 164
mbed_official 235:685d5f11838f 165 /* Init PCCARD common space timing Interface */
mbed_official 235:685d5f11838f 166 FMC_PCCARD_CommonSpace_Timing_Init(hpccard->Instance, ComSpaceTiming);
mbed_official 235:685d5f11838f 167
mbed_official 235:685d5f11838f 168 /* Init PCCARD attribute space timing Interface */
mbed_official 235:685d5f11838f 169 FMC_PCCARD_AttributeSpace_Timing_Init(hpccard->Instance, AttSpaceTiming);
mbed_official 235:685d5f11838f 170
mbed_official 235:685d5f11838f 171 /* Init PCCARD IO space timing Interface */
mbed_official 235:685d5f11838f 172 FMC_PCCARD_IOSpace_Timing_Init(hpccard->Instance, IOSpaceTiming);
mbed_official 235:685d5f11838f 173
mbed_official 235:685d5f11838f 174 /* Enable the PCCARD device */
mbed_official 235:685d5f11838f 175 __FMC_PCCARD_ENABLE(hpccard->Instance);
mbed_official 235:685d5f11838f 176
mbed_official 235:685d5f11838f 177 /* Update the PCCARD state */
mbed_official 235:685d5f11838f 178 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 235:685d5f11838f 179
mbed_official 235:685d5f11838f 180 return HAL_OK;
mbed_official 235:685d5f11838f 181
mbed_official 235:685d5f11838f 182 }
mbed_official 235:685d5f11838f 183
mbed_official 235:685d5f11838f 184 /**
mbed_official 235:685d5f11838f 185 * @brief Perform the PCCARD memory De-initialization sequence
mbed_official 235:685d5f11838f 186 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 187 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 188 * @retval HAL status
mbed_official 235:685d5f11838f 189 */
mbed_official 235:685d5f11838f 190 HAL_StatusTypeDef HAL_PCCARD_DeInit(PCCARD_HandleTypeDef *hpccard)
mbed_official 235:685d5f11838f 191 {
mbed_official 235:685d5f11838f 192 /* De-Initialize the low level hardware (MSP) */
mbed_official 235:685d5f11838f 193 HAL_PCCARD_MspDeInit(hpccard);
mbed_official 235:685d5f11838f 194
mbed_official 235:685d5f11838f 195 /* Configure the PCCARD registers with their reset values */
mbed_official 235:685d5f11838f 196 FMC_PCCARD_DeInit(hpccard->Instance);
mbed_official 235:685d5f11838f 197
mbed_official 235:685d5f11838f 198 /* Update the PCCARD controller state */
mbed_official 235:685d5f11838f 199 hpccard->State = HAL_PCCARD_STATE_RESET;
mbed_official 235:685d5f11838f 200
mbed_official 235:685d5f11838f 201 /* Release Lock */
mbed_official 235:685d5f11838f 202 __HAL_UNLOCK(hpccard);
mbed_official 235:685d5f11838f 203
mbed_official 235:685d5f11838f 204 return HAL_OK;
mbed_official 235:685d5f11838f 205 }
mbed_official 235:685d5f11838f 206
mbed_official 235:685d5f11838f 207 /**
mbed_official 235:685d5f11838f 208 * @brief PCCARD MSP Init
mbed_official 235:685d5f11838f 209 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 210 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 211 * @retval None
mbed_official 235:685d5f11838f 212 */
mbed_official 235:685d5f11838f 213 __weak void HAL_PCCARD_MspInit(PCCARD_HandleTypeDef *hpccard)
mbed_official 235:685d5f11838f 214 {
mbed_official 235:685d5f11838f 215 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 216 the HAL_PCCARD_MspInit could be implemented in the user file
mbed_official 235:685d5f11838f 217 */
mbed_official 235:685d5f11838f 218 }
mbed_official 235:685d5f11838f 219
mbed_official 235:685d5f11838f 220 /**
mbed_official 235:685d5f11838f 221 * @brief PCCARD MSP DeInit
mbed_official 235:685d5f11838f 222 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 223 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 224 * @retval None
mbed_official 235:685d5f11838f 225 */
mbed_official 235:685d5f11838f 226 __weak void HAL_PCCARD_MspDeInit(PCCARD_HandleTypeDef *hpccard)
mbed_official 235:685d5f11838f 227 {
mbed_official 235:685d5f11838f 228 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 229 the HAL_PCCARD_MspDeInit could be implemented in the user file
mbed_official 235:685d5f11838f 230 */
mbed_official 235:685d5f11838f 231 }
mbed_official 235:685d5f11838f 232
mbed_official 235:685d5f11838f 233 /**
mbed_official 235:685d5f11838f 234 * @}
mbed_official 235:685d5f11838f 235 */
mbed_official 235:685d5f11838f 236
mbed_official 532:fe11edbda85c 237 /** @defgroup PCCARD_Exported_Functions_Group2 Input and Output functions
mbed_official 235:685d5f11838f 238 * @brief Input Output and memory control functions
mbed_official 235:685d5f11838f 239 *
mbed_official 235:685d5f11838f 240 @verbatim
mbed_official 235:685d5f11838f 241 ==============================================================================
mbed_official 235:685d5f11838f 242 ##### PCCARD Input and Output functions #####
mbed_official 235:685d5f11838f 243 ==============================================================================
mbed_official 235:685d5f11838f 244 [..]
mbed_official 235:685d5f11838f 245 This section provides functions allowing to use and control the PCCARD memory
mbed_official 235:685d5f11838f 246
mbed_official 235:685d5f11838f 247 @endverbatim
mbed_official 235:685d5f11838f 248 * @{
mbed_official 235:685d5f11838f 249 */
mbed_official 235:685d5f11838f 250
mbed_official 235:685d5f11838f 251 /**
mbed_official 235:685d5f11838f 252 * @brief Read Compact Flash's ID.
mbed_official 235:685d5f11838f 253 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 254 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 255 * @param CompactFlash_ID: Compact flash ID structure.
mbed_official 235:685d5f11838f 256 * @param pStatus: pointer to compact flash status
mbed_official 235:685d5f11838f 257 * @retval HAL status
mbed_official 235:685d5f11838f 258 *
mbed_official 235:685d5f11838f 259 */
mbed_official 532:fe11edbda85c 260 HAL_StatusTypeDef HAL_PCCARD_Read_ID(PCCARD_HandleTypeDef *hpccard, uint8_t CompactFlash_ID[], uint8_t *pStatus)
mbed_official 235:685d5f11838f 261 {
mbed_official 532:fe11edbda85c 262 uint32_t timeout = PCCARD_TIMEOUT_READ_ID, index = 0;
mbed_official 532:fe11edbda85c 263 uint8_t status = 0;
mbed_official 235:685d5f11838f 264
mbed_official 235:685d5f11838f 265 /* Process Locked */
mbed_official 235:685d5f11838f 266 __HAL_LOCK(hpccard);
mbed_official 235:685d5f11838f 267
mbed_official 235:685d5f11838f 268 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 269 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 235:685d5f11838f 270 {
mbed_official 235:685d5f11838f 271 return HAL_BUSY;
mbed_official 235:685d5f11838f 272 }
mbed_official 235:685d5f11838f 273
mbed_official 235:685d5f11838f 274 /* Update the PCCARD controller state */
mbed_official 235:685d5f11838f 275 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 235:685d5f11838f 276
mbed_official 532:fe11edbda85c 277 /* Initialize the PCCARD status */
mbed_official 532:fe11edbda85c 278 *pStatus = PCCARD_READY;
mbed_official 235:685d5f11838f 279
mbed_official 235:685d5f11838f 280 /* Send the Identify Command */
mbed_official 532:fe11edbda85c 281 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = 0xECEC;
mbed_official 235:685d5f11838f 282
mbed_official 532:fe11edbda85c 283 /* Read PCCARD IDs and timeout treatment */
mbed_official 235:685d5f11838f 284 do
mbed_official 235:685d5f11838f 285 {
mbed_official 532:fe11edbda85c 286 /* Read the PCCARD status */
mbed_official 532:fe11edbda85c 287 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 288
mbed_official 235:685d5f11838f 289 timeout--;
mbed_official 532:fe11edbda85c 290 }while((status != PCCARD_STATUS_OK) && timeout);
mbed_official 235:685d5f11838f 291
mbed_official 235:685d5f11838f 292 if(timeout == 0)
mbed_official 235:685d5f11838f 293 {
mbed_official 532:fe11edbda85c 294 *pStatus = PCCARD_TIMEOUT_ERROR;
mbed_official 235:685d5f11838f 295 }
mbed_official 235:685d5f11838f 296 else
mbed_official 235:685d5f11838f 297 {
mbed_official 532:fe11edbda85c 298 /* Read PCCARD ID bytes */
mbed_official 235:685d5f11838f 299 for(index = 0; index < 16; index++)
mbed_official 235:685d5f11838f 300 {
mbed_official 532:fe11edbda85c 301 CompactFlash_ID[index] = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_DATA);
mbed_official 235:685d5f11838f 302 }
mbed_official 235:685d5f11838f 303 }
mbed_official 235:685d5f11838f 304
mbed_official 235:685d5f11838f 305 /* Update the PCCARD controller state */
mbed_official 235:685d5f11838f 306 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 235:685d5f11838f 307
mbed_official 235:685d5f11838f 308 /* Process unlocked */
mbed_official 235:685d5f11838f 309 __HAL_UNLOCK(hpccard);
mbed_official 235:685d5f11838f 310
mbed_official 235:685d5f11838f 311 return HAL_OK;
mbed_official 235:685d5f11838f 312 }
mbed_official 235:685d5f11838f 313
mbed_official 235:685d5f11838f 314 /**
mbed_official 235:685d5f11838f 315 * @brief Read sector from PCCARD memory
mbed_official 235:685d5f11838f 316 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 317 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 318 * @param pBuffer: pointer to destination read buffer
mbed_official 235:685d5f11838f 319 * @param SectorAddress: Sector address to read
mbed_official 532:fe11edbda85c 320 * @param pStatus: pointer to PCCARD status
mbed_official 235:685d5f11838f 321 * @retval HAL status
mbed_official 235:685d5f11838f 322 */
mbed_official 532:fe11edbda85c 323 HAL_StatusTypeDef HAL_PCCARD_Read_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress, uint8_t *pStatus)
mbed_official 235:685d5f11838f 324 {
mbed_official 532:fe11edbda85c 325 uint32_t timeout = PCCARD_TIMEOUT_READ_WRITE_SECTOR, index = 0;
mbed_official 532:fe11edbda85c 326 uint8_t status = 0;
mbed_official 235:685d5f11838f 327
mbed_official 235:685d5f11838f 328 /* Process Locked */
mbed_official 235:685d5f11838f 329 __HAL_LOCK(hpccard);
mbed_official 235:685d5f11838f 330
mbed_official 235:685d5f11838f 331 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 332 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 235:685d5f11838f 333 {
mbed_official 235:685d5f11838f 334 return HAL_BUSY;
mbed_official 235:685d5f11838f 335 }
mbed_official 235:685d5f11838f 336
mbed_official 235:685d5f11838f 337 /* Update the PCCARD controller state */
mbed_official 235:685d5f11838f 338 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 235:685d5f11838f 339
mbed_official 532:fe11edbda85c 340 /* Initialize PCCARD status */
mbed_official 532:fe11edbda85c 341 *pStatus = PCCARD_READY;
mbed_official 235:685d5f11838f 342
mbed_official 235:685d5f11838f 343 /* Set the parameters to write a sector */
mbed_official 532:fe11edbda85c 344 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_HIGH) = (uint16_t)0x00;
mbed_official 532:fe11edbda85c 345 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_COUNT) = ((uint16_t)0x0100 ) | ((uint16_t)SectorAddress);
mbed_official 532:fe11edbda85c 346 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = (uint16_t)0xE4A0;
mbed_official 235:685d5f11838f 347
mbed_official 235:685d5f11838f 348 do
mbed_official 235:685d5f11838f 349 {
mbed_official 235:685d5f11838f 350 /* wait till the Status = 0x80 */
mbed_official 532:fe11edbda85c 351 status = *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 352 timeout--;
mbed_official 235:685d5f11838f 353 }while((status == 0x80) && timeout);
mbed_official 235:685d5f11838f 354
mbed_official 235:685d5f11838f 355 if(timeout == 0)
mbed_official 235:685d5f11838f 356 {
mbed_official 532:fe11edbda85c 357 *pStatus = PCCARD_TIMEOUT_ERROR;
mbed_official 235:685d5f11838f 358 }
mbed_official 235:685d5f11838f 359
mbed_official 532:fe11edbda85c 360 timeout = PCCARD_TIMEOUT_READ_WRITE_SECTOR;
mbed_official 235:685d5f11838f 361
mbed_official 235:685d5f11838f 362 do
mbed_official 235:685d5f11838f 363 {
mbed_official 532:fe11edbda85c 364 /* wait till the Status = PCCARD_STATUS_OK */
mbed_official 532:fe11edbda85c 365 status = *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 366 timeout--;
mbed_official 532:fe11edbda85c 367 }while((status != PCCARD_STATUS_OK) && timeout);
mbed_official 235:685d5f11838f 368
mbed_official 235:685d5f11838f 369 if(timeout == 0)
mbed_official 235:685d5f11838f 370 {
mbed_official 532:fe11edbda85c 371 *pStatus = PCCARD_TIMEOUT_ERROR;
mbed_official 235:685d5f11838f 372 }
mbed_official 235:685d5f11838f 373
mbed_official 235:685d5f11838f 374 /* Read bytes */
mbed_official 532:fe11edbda85c 375 for(; index < PCCARD_SECTOR_SIZE; index++)
mbed_official 235:685d5f11838f 376 {
mbed_official 532:fe11edbda85c 377 *(uint16_t *)pBuffer++ = *(uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR);
mbed_official 235:685d5f11838f 378 }
mbed_official 235:685d5f11838f 379
mbed_official 235:685d5f11838f 380 /* Update the PCCARD controller state */
mbed_official 235:685d5f11838f 381 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 235:685d5f11838f 382
mbed_official 235:685d5f11838f 383 /* Process unlocked */
mbed_official 235:685d5f11838f 384 __HAL_UNLOCK(hpccard);
mbed_official 235:685d5f11838f 385
mbed_official 235:685d5f11838f 386 return HAL_OK;
mbed_official 235:685d5f11838f 387 }
mbed_official 235:685d5f11838f 388
mbed_official 235:685d5f11838f 389
mbed_official 235:685d5f11838f 390 /**
mbed_official 235:685d5f11838f 391 * @brief Write sector to PCCARD memory
mbed_official 235:685d5f11838f 392 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 393 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 394 * @param pBuffer: pointer to source write buffer
mbed_official 235:685d5f11838f 395 * @param SectorAddress: Sector address to write
mbed_official 532:fe11edbda85c 396 * @param pStatus: pointer to PCCARD status
mbed_official 235:685d5f11838f 397 * @retval HAL status
mbed_official 235:685d5f11838f 398 */
mbed_official 532:fe11edbda85c 399 HAL_StatusTypeDef HAL_PCCARD_Write_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress, uint8_t *pStatus)
mbed_official 235:685d5f11838f 400 {
mbed_official 532:fe11edbda85c 401 uint32_t timeout = PCCARD_TIMEOUT_READ_WRITE_SECTOR, index = 0;
mbed_official 532:fe11edbda85c 402 uint8_t status = 0;
mbed_official 235:685d5f11838f 403
mbed_official 235:685d5f11838f 404 /* Process Locked */
mbed_official 235:685d5f11838f 405 __HAL_LOCK(hpccard);
mbed_official 235:685d5f11838f 406
mbed_official 235:685d5f11838f 407 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 408 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 235:685d5f11838f 409 {
mbed_official 235:685d5f11838f 410 return HAL_BUSY;
mbed_official 235:685d5f11838f 411 }
mbed_official 235:685d5f11838f 412
mbed_official 235:685d5f11838f 413 /* Update the PCCARD controller state */
mbed_official 235:685d5f11838f 414 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 235:685d5f11838f 415
mbed_official 532:fe11edbda85c 416 /* Initialize PCCARD status */
mbed_official 532:fe11edbda85c 417 *pStatus = PCCARD_READY;
mbed_official 235:685d5f11838f 418
mbed_official 235:685d5f11838f 419 /* Set the parameters to write a sector */
mbed_official 532:fe11edbda85c 420 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_HIGH) = (uint16_t)0x00;
mbed_official 532:fe11edbda85c 421 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_COUNT) = ((uint16_t)0x0100 ) | ((uint16_t)SectorAddress);
mbed_official 532:fe11edbda85c 422 *(__IO uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = (uint16_t)0x30A0;
mbed_official 235:685d5f11838f 423
mbed_official 235:685d5f11838f 424 do
mbed_official 235:685d5f11838f 425 {
mbed_official 532:fe11edbda85c 426 /* Wait till the Status = PCCARD_STATUS_OK */
mbed_official 532:fe11edbda85c 427 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 428 timeout--;
mbed_official 532:fe11edbda85c 429 }while((status != PCCARD_STATUS_OK) && timeout);
mbed_official 235:685d5f11838f 430
mbed_official 235:685d5f11838f 431 if(timeout == 0)
mbed_official 235:685d5f11838f 432 {
mbed_official 532:fe11edbda85c 433 *pStatus = PCCARD_TIMEOUT_ERROR;
mbed_official 235:685d5f11838f 434 }
mbed_official 235:685d5f11838f 435
mbed_official 235:685d5f11838f 436 /* Write bytes */
mbed_official 532:fe11edbda85c 437 for(; index < PCCARD_SECTOR_SIZE; index++)
mbed_official 235:685d5f11838f 438 {
mbed_official 532:fe11edbda85c 439 *(uint16_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR) = *(uint16_t *)pBuffer++;
mbed_official 235:685d5f11838f 440 }
mbed_official 235:685d5f11838f 441
mbed_official 235:685d5f11838f 442 do
mbed_official 235:685d5f11838f 443 {
mbed_official 532:fe11edbda85c 444 /* Wait till the Status = PCCARD_STATUS_WRITE_OK */
mbed_official 532:fe11edbda85c 445 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 446 timeout--;
mbed_official 532:fe11edbda85c 447 }while((status != PCCARD_STATUS_WRITE_OK) && timeout);
mbed_official 235:685d5f11838f 448
mbed_official 235:685d5f11838f 449 if(timeout == 0)
mbed_official 235:685d5f11838f 450 {
mbed_official 532:fe11edbda85c 451 *pStatus = PCCARD_TIMEOUT_ERROR;
mbed_official 235:685d5f11838f 452 }
mbed_official 235:685d5f11838f 453
mbed_official 235:685d5f11838f 454 /* Update the PCCARD controller state */
mbed_official 235:685d5f11838f 455 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 235:685d5f11838f 456
mbed_official 235:685d5f11838f 457 /* Process unlocked */
mbed_official 235:685d5f11838f 458 __HAL_UNLOCK(hpccard);
mbed_official 235:685d5f11838f 459
mbed_official 235:685d5f11838f 460 return HAL_OK;
mbed_official 235:685d5f11838f 461 }
mbed_official 235:685d5f11838f 462
mbed_official 235:685d5f11838f 463
mbed_official 235:685d5f11838f 464 /**
mbed_official 235:685d5f11838f 465 * @brief Erase sector from PCCARD memory
mbed_official 235:685d5f11838f 466 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 467 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 468 * @param SectorAddress: Sector address to erase
mbed_official 532:fe11edbda85c 469 * @param pStatus: pointer to PCCARD status
mbed_official 235:685d5f11838f 470 * @retval HAL status
mbed_official 235:685d5f11838f 471 */
mbed_official 532:fe11edbda85c 472 HAL_StatusTypeDef HAL_PCCARD_Erase_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t SectorAddress, uint8_t *pStatus)
mbed_official 235:685d5f11838f 473 {
mbed_official 532:fe11edbda85c 474 uint32_t timeout = PCCARD_TIMEOUT_ERASE_SECTOR;
mbed_official 532:fe11edbda85c 475 uint8_t status = 0;
mbed_official 235:685d5f11838f 476
mbed_official 235:685d5f11838f 477 /* Process Locked */
mbed_official 235:685d5f11838f 478 __HAL_LOCK(hpccard);
mbed_official 235:685d5f11838f 479
mbed_official 235:685d5f11838f 480 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 481 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 235:685d5f11838f 482 {
mbed_official 235:685d5f11838f 483 return HAL_BUSY;
mbed_official 235:685d5f11838f 484 }
mbed_official 235:685d5f11838f 485
mbed_official 235:685d5f11838f 486 /* Update the PCCARD controller state */
mbed_official 235:685d5f11838f 487 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 235:685d5f11838f 488
mbed_official 532:fe11edbda85c 489 /* Initialize PCCARD status */
mbed_official 532:fe11edbda85c 490 *pStatus = PCCARD_READY;
mbed_official 235:685d5f11838f 491
mbed_official 235:685d5f11838f 492 /* Set the parameters to write a sector */
mbed_official 532:fe11edbda85c 493 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_LOW) = 0x00;
mbed_official 532:fe11edbda85c 494 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CYLINDER_HIGH) = 0x00;
mbed_official 532:fe11edbda85c 495 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_NUMBER) = SectorAddress;
mbed_official 532:fe11edbda85c 496 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_SECTOR_COUNT) = 0x01;
mbed_official 532:fe11edbda85c 497 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_CARD_HEAD) = 0xA0;
mbed_official 532:fe11edbda85c 498 *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD) = ATA_ERASE_SECTOR_CMD;
mbed_official 235:685d5f11838f 499
mbed_official 532:fe11edbda85c 500 /* wait till the PCCARD is ready */
mbed_official 532:fe11edbda85c 501 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 502
mbed_official 532:fe11edbda85c 503 while((status != PCCARD_STATUS_WRITE_OK) && timeout)
mbed_official 235:685d5f11838f 504 {
mbed_official 532:fe11edbda85c 505 status = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 506 timeout--;
mbed_official 235:685d5f11838f 507 }
mbed_official 235:685d5f11838f 508
mbed_official 235:685d5f11838f 509 if(timeout == 0)
mbed_official 235:685d5f11838f 510 {
mbed_official 532:fe11edbda85c 511 *pStatus = PCCARD_TIMEOUT_ERROR;
mbed_official 235:685d5f11838f 512 }
mbed_official 235:685d5f11838f 513
mbed_official 235:685d5f11838f 514 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 515 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 235:685d5f11838f 516
mbed_official 235:685d5f11838f 517 /* Process unlocked */
mbed_official 235:685d5f11838f 518 __HAL_UNLOCK(hpccard);
mbed_official 235:685d5f11838f 519
mbed_official 235:685d5f11838f 520 return HAL_OK;
mbed_official 235:685d5f11838f 521 }
mbed_official 235:685d5f11838f 522
mbed_official 235:685d5f11838f 523 /**
mbed_official 235:685d5f11838f 524 * @brief Reset the PCCARD memory
mbed_official 235:685d5f11838f 525 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 526 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 527 * @retval HAL status
mbed_official 235:685d5f11838f 528 */
mbed_official 532:fe11edbda85c 529 HAL_StatusTypeDef HAL_PCCARD_Reset(PCCARD_HandleTypeDef *hpccard)
mbed_official 235:685d5f11838f 530 {
mbed_official 235:685d5f11838f 531 /* Process Locked */
mbed_official 235:685d5f11838f 532 __HAL_LOCK(hpccard);
mbed_official 235:685d5f11838f 533
mbed_official 235:685d5f11838f 534 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 535 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 235:685d5f11838f 536 {
mbed_official 235:685d5f11838f 537 return HAL_BUSY;
mbed_official 235:685d5f11838f 538 }
mbed_official 235:685d5f11838f 539
mbed_official 532:fe11edbda85c 540 /* Provide a SW reset and Read and verify the:
mbed_official 532:fe11edbda85c 541 - PCCard Configuration Option Register at address 0x98000200 --> 0x80
mbed_official 532:fe11edbda85c 542 - Card Configuration and Status Register at address 0x98000202 --> 0x00
mbed_official 532:fe11edbda85c 543 - Pin Replacement Register at address 0x98000204 --> 0x0C
mbed_official 235:685d5f11838f 544 - Socket and Copy Register at address 0x98000206 --> 0x00
mbed_official 235:685d5f11838f 545 */
mbed_official 235:685d5f11838f 546
mbed_official 235:685d5f11838f 547 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 548 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 235:685d5f11838f 549
mbed_official 532:fe11edbda85c 550 *(__IO uint8_t *)(PCCARD_ATTRIBUTE_SPACE_ADDRESS | ATA_CARD_CONFIGURATION ) = 0x01;
mbed_official 235:685d5f11838f 551
mbed_official 235:685d5f11838f 552 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 553 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 235:685d5f11838f 554
mbed_official 235:685d5f11838f 555 /* Process unlocked */
mbed_official 235:685d5f11838f 556 __HAL_UNLOCK(hpccard);
mbed_official 235:685d5f11838f 557
mbed_official 235:685d5f11838f 558 return HAL_OK;
mbed_official 235:685d5f11838f 559 }
mbed_official 235:685d5f11838f 560
mbed_official 235:685d5f11838f 561 /**
mbed_official 235:685d5f11838f 562 * @brief This function handles PCCARD device interrupt request.
mbed_official 235:685d5f11838f 563 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 564 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 565 * @retval HAL status
mbed_official 235:685d5f11838f 566 */
mbed_official 235:685d5f11838f 567 void HAL_PCCARD_IRQHandler(PCCARD_HandleTypeDef *hpccard)
mbed_official 235:685d5f11838f 568 {
mbed_official 235:685d5f11838f 569 /* Check PCCARD interrupt Rising edge flag */
mbed_official 235:685d5f11838f 570 if(__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_RISING_EDGE))
mbed_official 235:685d5f11838f 571 {
mbed_official 235:685d5f11838f 572 /* PCCARD interrupt callback*/
mbed_official 235:685d5f11838f 573 HAL_PCCARD_ITCallback(hpccard);
mbed_official 235:685d5f11838f 574
mbed_official 235:685d5f11838f 575 /* Clear PCCARD interrupt Rising edge pending bit */
mbed_official 235:685d5f11838f 576 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_RISING_EDGE);
mbed_official 235:685d5f11838f 577 }
mbed_official 235:685d5f11838f 578
mbed_official 235:685d5f11838f 579 /* Check PCCARD interrupt Level flag */
mbed_official 235:685d5f11838f 580 if(__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_LEVEL))
mbed_official 235:685d5f11838f 581 {
mbed_official 235:685d5f11838f 582 /* PCCARD interrupt callback*/
mbed_official 235:685d5f11838f 583 HAL_PCCARD_ITCallback(hpccard);
mbed_official 235:685d5f11838f 584
mbed_official 235:685d5f11838f 585 /* Clear PCCARD interrupt Level pending bit */
mbed_official 235:685d5f11838f 586 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_LEVEL);
mbed_official 235:685d5f11838f 587 }
mbed_official 235:685d5f11838f 588
mbed_official 235:685d5f11838f 589 /* Check PCCARD interrupt Falling edge flag */
mbed_official 235:685d5f11838f 590 if(__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_FALLING_EDGE))
mbed_official 235:685d5f11838f 591 {
mbed_official 235:685d5f11838f 592 /* PCCARD interrupt callback*/
mbed_official 235:685d5f11838f 593 HAL_PCCARD_ITCallback(hpccard);
mbed_official 235:685d5f11838f 594
mbed_official 235:685d5f11838f 595 /* Clear PCCARD interrupt Falling edge pending bit */
mbed_official 235:685d5f11838f 596 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_FALLING_EDGE);
mbed_official 235:685d5f11838f 597 }
mbed_official 235:685d5f11838f 598
mbed_official 235:685d5f11838f 599 /* Check PCCARD interrupt FIFO empty flag */
mbed_official 235:685d5f11838f 600 if(__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_FEMPT))
mbed_official 235:685d5f11838f 601 {
mbed_official 235:685d5f11838f 602 /* PCCARD interrupt callback*/
mbed_official 235:685d5f11838f 603 HAL_PCCARD_ITCallback(hpccard);
mbed_official 235:685d5f11838f 604
mbed_official 235:685d5f11838f 605 /* Clear PCCARD interrupt FIFO empty pending bit */
mbed_official 235:685d5f11838f 606 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_FEMPT);
mbed_official 235:685d5f11838f 607 }
mbed_official 235:685d5f11838f 608 }
mbed_official 235:685d5f11838f 609
mbed_official 235:685d5f11838f 610 /**
mbed_official 235:685d5f11838f 611 * @brief PCCARD interrupt feature callback
mbed_official 235:685d5f11838f 612 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 613 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 614 * @retval None
mbed_official 235:685d5f11838f 615 */
mbed_official 235:685d5f11838f 616 __weak void HAL_PCCARD_ITCallback(PCCARD_HandleTypeDef *hpccard)
mbed_official 235:685d5f11838f 617 {
mbed_official 235:685d5f11838f 618 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 619 the HAL_PCCARD_ITCallback could be implemented in the user file
mbed_official 235:685d5f11838f 620 */
mbed_official 235:685d5f11838f 621 }
mbed_official 235:685d5f11838f 622
mbed_official 235:685d5f11838f 623 /**
mbed_official 235:685d5f11838f 624 * @}
mbed_official 235:685d5f11838f 625 */
mbed_official 235:685d5f11838f 626
mbed_official 532:fe11edbda85c 627 /** @defgroup PCCARD_Exported_Functions_Group3 State functions
mbed_official 235:685d5f11838f 628 * @brief Peripheral State functions
mbed_official 235:685d5f11838f 629 *
mbed_official 235:685d5f11838f 630 @verbatim
mbed_official 235:685d5f11838f 631 ==============================================================================
mbed_official 235:685d5f11838f 632 ##### PCCARD State functions #####
mbed_official 235:685d5f11838f 633 ==============================================================================
mbed_official 235:685d5f11838f 634 [..]
mbed_official 235:685d5f11838f 635 This subsection permits to get in run-time the status of the PCCARD controller
mbed_official 235:685d5f11838f 636 and the data flow.
mbed_official 235:685d5f11838f 637
mbed_official 235:685d5f11838f 638 @endverbatim
mbed_official 235:685d5f11838f 639 * @{
mbed_official 235:685d5f11838f 640 */
mbed_official 235:685d5f11838f 641
mbed_official 235:685d5f11838f 642 /**
mbed_official 235:685d5f11838f 643 * @brief return the PCCARD controller state
mbed_official 235:685d5f11838f 644 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 645 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 646 * @retval HAL state
mbed_official 235:685d5f11838f 647 */
mbed_official 235:685d5f11838f 648 HAL_PCCARD_StateTypeDef HAL_PCCARD_GetState(PCCARD_HandleTypeDef *hpccard)
mbed_official 235:685d5f11838f 649 {
mbed_official 235:685d5f11838f 650 return hpccard->State;
mbed_official 235:685d5f11838f 651 }
mbed_official 235:685d5f11838f 652
mbed_official 235:685d5f11838f 653 /**
mbed_official 235:685d5f11838f 654 * @brief Get the compact flash memory status
mbed_official 235:685d5f11838f 655 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 656 * the configuration information for PCCARD module.
mbed_official 532:fe11edbda85c 657 * @retval New status of the PCCARD operation. This parameter can be:
mbed_official 235:685d5f11838f 658 * - CompactFlash_TIMEOUT_ERROR: when the previous operation generate
mbed_official 235:685d5f11838f 659 * a Timeout error
mbed_official 532:fe11edbda85c 660 * - CompactFlash_READY: when memory is ready for the next operation
mbed_official 235:685d5f11838f 661 */
mbed_official 532:fe11edbda85c 662 HAL_PCCARD_StatusTypeDef HAL_PCCARD_GetStatus(PCCARD_HandleTypeDef *hpccard)
mbed_official 235:685d5f11838f 663 {
mbed_official 532:fe11edbda85c 664 uint32_t timeout = PCCARD_TIMEOUT_STATUS, status_pccard = 0;
mbed_official 235:685d5f11838f 665
mbed_official 235:685d5f11838f 666 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 667 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 235:685d5f11838f 668 {
mbed_official 532:fe11edbda85c 669 return HAL_PCCARD_STATUS_ONGOING;
mbed_official 235:685d5f11838f 670 }
mbed_official 235:685d5f11838f 671
mbed_official 532:fe11edbda85c 672 status_pccard = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 673
mbed_official 532:fe11edbda85c 674 while((status_pccard == PCCARD_BUSY) && timeout)
mbed_official 235:685d5f11838f 675 {
mbed_official 532:fe11edbda85c 676 status_pccard = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 677 timeout--;
mbed_official 235:685d5f11838f 678 }
mbed_official 235:685d5f11838f 679
mbed_official 235:685d5f11838f 680 if(timeout == 0)
mbed_official 235:685d5f11838f 681 {
mbed_official 532:fe11edbda85c 682 status_pccard = PCCARD_TIMEOUT_ERROR;
mbed_official 235:685d5f11838f 683 }
mbed_official 235:685d5f11838f 684
mbed_official 235:685d5f11838f 685 /* Return the operation status */
mbed_official 532:fe11edbda85c 686 return (HAL_PCCARD_StatusTypeDef) status_pccard;
mbed_official 235:685d5f11838f 687 }
mbed_official 235:685d5f11838f 688
mbed_official 235:685d5f11838f 689 /**
mbed_official 235:685d5f11838f 690 * @brief Reads the Compact Flash memory status using the Read status command
mbed_official 235:685d5f11838f 691 * @param hpccard: pointer to a PCCARD_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 692 * the configuration information for PCCARD module.
mbed_official 235:685d5f11838f 693 * @retval The status of the Compact Flash memory. This parameter can be:
mbed_official 235:685d5f11838f 694 * - CompactFlash_BUSY: when memory is busy
mbed_official 235:685d5f11838f 695 * - CompactFlash_READY: when memory is ready for the next operation
mbed_official 532:fe11edbda85c 696 * - CompactFlash_ERROR: when the previous operation generates error
mbed_official 235:685d5f11838f 697 */
mbed_official 532:fe11edbda85c 698 HAL_PCCARD_StatusTypeDef HAL_PCCARD_ReadStatus(PCCARD_HandleTypeDef *hpccard)
mbed_official 235:685d5f11838f 699 {
mbed_official 532:fe11edbda85c 700 uint8_t data = 0, status_pccard = PCCARD_BUSY;
mbed_official 235:685d5f11838f 701
mbed_official 235:685d5f11838f 702 /* Check the PCCARD controller state */
mbed_official 235:685d5f11838f 703 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 235:685d5f11838f 704 {
mbed_official 532:fe11edbda85c 705 return HAL_PCCARD_STATUS_ONGOING;
mbed_official 235:685d5f11838f 706 }
mbed_official 235:685d5f11838f 707
mbed_official 235:685d5f11838f 708 /* Read status operation */
mbed_official 532:fe11edbda85c 709 data = *(__IO uint8_t *)(PCCARD_IO_SPACE_PRIMARY_ADDR | ATA_STATUS_CMD_ALTERNATE);
mbed_official 235:685d5f11838f 710
mbed_official 532:fe11edbda85c 711 if((data & PCCARD_TIMEOUT_ERROR) == PCCARD_TIMEOUT_ERROR)
mbed_official 235:685d5f11838f 712 {
mbed_official 532:fe11edbda85c 713 status_pccard = PCCARD_TIMEOUT_ERROR;
mbed_official 235:685d5f11838f 714 }
mbed_official 532:fe11edbda85c 715 else if((data & PCCARD_READY) == PCCARD_READY)
mbed_official 235:685d5f11838f 716 {
mbed_official 532:fe11edbda85c 717 status_pccard = PCCARD_READY;
mbed_official 235:685d5f11838f 718 }
mbed_official 235:685d5f11838f 719
mbed_official 532:fe11edbda85c 720 return (HAL_PCCARD_StatusTypeDef) status_pccard;
mbed_official 235:685d5f11838f 721 }
mbed_official 235:685d5f11838f 722
mbed_official 235:685d5f11838f 723 /**
mbed_official 235:685d5f11838f 724 * @}
mbed_official 235:685d5f11838f 725 */
mbed_official 235:685d5f11838f 726
mbed_official 235:685d5f11838f 727 /**
mbed_official 235:685d5f11838f 728 * @}
mbed_official 235:685d5f11838f 729 */
mbed_official 532:fe11edbda85c 730 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx ||\
mbed_official 532:fe11edbda85c 731 STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */
mbed_official 532:fe11edbda85c 732 #endif /* HAL_PCCARD_MODULE_ENABLED */
mbed_official 235:685d5f11838f 733
mbed_official 235:685d5f11838f 734 /**
mbed_official 235:685d5f11838f 735 * @}
mbed_official 235:685d5f11838f 736 */
mbed_official 235:685d5f11838f 737
mbed_official 235:685d5f11838f 738 /**
mbed_official 235:685d5f11838f 739 * @}
mbed_official 235:685d5f11838f 740 */
mbed_official 235:685d5f11838f 741
mbed_official 235:685d5f11838f 742 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/