mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

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

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Wed Aug 06 08:15:07 2014 +0100
Revision:
274:6937b19af361
Parent:
226:b062af740e40
Child:
369:2e96f1b71984
Synchronized with git revision 5b145e4f6c509376173c3ea2aa35a6da879a2124

Full URL: https://github.com/mbedmicro/mbed/commit/5b145e4f6c509376173c3ea2aa35a6da879a2124/

[TARGET_LPC11UXX] PeripheralNames.h and PinMap definitions separation for LPC11UXX platforms

Who changed what in which revision?

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