mbed library with additional peripherals for ST F401 board

Fork of mbed-src by mbed official

This mbed LIB has additional peripherals for ST F401 board

  • UART2 : PA_3 rx, PA_2 tx
  • UART3 : PC_7 rx, PC_6 tx
  • I2C2 : PB_3 SDA, PB_10 SCL
  • I2C3 : PB_4 SDA, PA_8 SCL
Committer:
mbed_official
Date:
Wed Feb 26 09:45:12 2014 +0000
Revision:
106:ced8cbb51063
Parent:
87:085cde657901
Synchronized with git revision 4222735eff5868389433f0e9271976b39c8115cd

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

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 87:085cde657901 1 /**
mbed_official 87:085cde657901 2 ******************************************************************************
mbed_official 87:085cde657901 3 * @file stm32f4xx_hal_pccard.c
mbed_official 87:085cde657901 4 * @author MCD Application Team
mbed_official 106:ced8cbb51063 5 * @version V1.0.0
mbed_official 106:ced8cbb51063 6 * @date 18-February-2014
mbed_official 87:085cde657901 7 * @brief 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 87:085cde657901 119 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 120 * @param ComSpaceTiming: Common space timing structure
mbed_official 87:085cde657901 121 * @param AttSpaceTiming: Attribute space timing structure
mbed_official 87:085cde657901 122 * @param IOSpaceTiming: IO space timing structure
mbed_official 87:085cde657901 123 * @retval HAL status
mbed_official 87:085cde657901 124 */
mbed_official 87:085cde657901 125 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 126 {
mbed_official 87:085cde657901 127 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 128 if(hpccard == NULL)
mbed_official 87:085cde657901 129 {
mbed_official 87:085cde657901 130 return HAL_ERROR;
mbed_official 87:085cde657901 131 }
mbed_official 87:085cde657901 132
mbed_official 87:085cde657901 133 if(hpccard->State == HAL_PCCARD_STATE_RESET)
mbed_official 87:085cde657901 134 {
mbed_official 87:085cde657901 135 /* Initialize the low level hardware (MSP) */
mbed_official 87:085cde657901 136 HAL_PCCARD_MspInit(hpccard);
mbed_official 87:085cde657901 137 }
mbed_official 87:085cde657901 138
mbed_official 87:085cde657901 139 /* Initialize the PCCARD state */
mbed_official 87:085cde657901 140 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 87:085cde657901 141
mbed_official 87:085cde657901 142 /* Initialize PCCARD control Interface */
mbed_official 87:085cde657901 143 FMC_PCCARD_Init(hpccard->Instance, &(hpccard->Init));
mbed_official 87:085cde657901 144
mbed_official 87:085cde657901 145 /* Init PCCARD common space timing Interface */
mbed_official 87:085cde657901 146 FMC_PCCARD_CommonSpace_Timing_Init(hpccard->Instance, ComSpaceTiming);
mbed_official 87:085cde657901 147
mbed_official 87:085cde657901 148 /* Init PCCARD attribute space timing Interface */
mbed_official 87:085cde657901 149 FMC_PCCARD_AttributeSpace_Timing_Init(hpccard->Instance, AttSpaceTiming);
mbed_official 87:085cde657901 150
mbed_official 87:085cde657901 151 /* Init PCCARD IO space timing Interface */
mbed_official 87:085cde657901 152 FMC_PCCARD_IOSpace_Timing_Init(hpccard->Instance, IOSpaceTiming);
mbed_official 87:085cde657901 153
mbed_official 87:085cde657901 154 /* Enable the PCCARD device */
mbed_official 87:085cde657901 155 __FMC_PCCARD_ENABLE(hpccard->Instance);
mbed_official 87:085cde657901 156
mbed_official 87:085cde657901 157 /* Update the PCCARD state */
mbed_official 87:085cde657901 158 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 87:085cde657901 159
mbed_official 87:085cde657901 160 return HAL_OK;
mbed_official 87:085cde657901 161
mbed_official 87:085cde657901 162 }
mbed_official 87:085cde657901 163
mbed_official 87:085cde657901 164 /**
mbed_official 87:085cde657901 165 * @brief Perform the PCCARD memory De-initialization sequence
mbed_official 87:085cde657901 166 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 167 * @retval HAL status
mbed_official 87:085cde657901 168 */
mbed_official 87:085cde657901 169 HAL_StatusTypeDef HAL_PCCARD_DeInit(PCCARD_HandleTypeDef *hpccard)
mbed_official 87:085cde657901 170 {
mbed_official 87:085cde657901 171 /* De-Initialize the low level hardware (MSP) */
mbed_official 106:ced8cbb51063 172 HAL_PCCARD_MspDeInit(hpccard);
mbed_official 87:085cde657901 173
mbed_official 87:085cde657901 174 /* Configure the PCCARD registers with their reset values */
mbed_official 87:085cde657901 175 FMC_PCCARD_DeInit(hpccard->Instance);
mbed_official 87:085cde657901 176
mbed_official 87:085cde657901 177 /* Update the PCCARD controller state */
mbed_official 87:085cde657901 178 hpccard->State = HAL_PCCARD_STATE_RESET;
mbed_official 106:ced8cbb51063 179
mbed_official 106:ced8cbb51063 180 /* Release Lock */
mbed_official 106:ced8cbb51063 181 __HAL_UNLOCK(hpccard);
mbed_official 106:ced8cbb51063 182
mbed_official 87:085cde657901 183 return HAL_OK;
mbed_official 87:085cde657901 184 }
mbed_official 87:085cde657901 185
mbed_official 87:085cde657901 186 /**
mbed_official 87:085cde657901 187 * @brief PCCARD MSP Init
mbed_official 87:085cde657901 188 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 189 * @retval None
mbed_official 87:085cde657901 190 */
mbed_official 87:085cde657901 191 __weak void HAL_PCCARD_MspInit(PCCARD_HandleTypeDef *hpccard)
mbed_official 87:085cde657901 192 {
mbed_official 87:085cde657901 193 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 194 the HAL_PCCARD_MspInit could be implemented in the user file
mbed_official 87:085cde657901 195 */
mbed_official 87:085cde657901 196 }
mbed_official 87:085cde657901 197
mbed_official 87:085cde657901 198 /**
mbed_official 87:085cde657901 199 * @brief PCCARD MSP DeInit
mbed_official 87:085cde657901 200 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 201 * @retval None
mbed_official 87:085cde657901 202 */
mbed_official 87:085cde657901 203 __weak void HAL_PCCARD_MspDeInit(PCCARD_HandleTypeDef *hpccard)
mbed_official 87:085cde657901 204 {
mbed_official 87:085cde657901 205 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 206 the HAL_PCCARD_MspDeInit could be implemented in the user file
mbed_official 87:085cde657901 207 */
mbed_official 87:085cde657901 208 }
mbed_official 87:085cde657901 209
mbed_official 87:085cde657901 210 /**
mbed_official 87:085cde657901 211 * @}
mbed_official 87:085cde657901 212 */
mbed_official 87:085cde657901 213
mbed_official 87:085cde657901 214 /** @defgroup PCCARD_Group2 Input and Output functions
mbed_official 87:085cde657901 215 * @brief Input Output and memory control functions
mbed_official 87:085cde657901 216 *
mbed_official 87:085cde657901 217 @verbatim
mbed_official 87:085cde657901 218 ==============================================================================
mbed_official 87:085cde657901 219 ##### PCCARD Input and Output functions #####
mbed_official 87:085cde657901 220 ==============================================================================
mbed_official 87:085cde657901 221 [..]
mbed_official 87:085cde657901 222 This section provides functions allowing to use and control the PCCARD memory
mbed_official 87:085cde657901 223
mbed_official 87:085cde657901 224 @endverbatim
mbed_official 87:085cde657901 225 * @{
mbed_official 87:085cde657901 226 */
mbed_official 87:085cde657901 227
mbed_official 87:085cde657901 228 /**
mbed_official 87:085cde657901 229 * @brief Read Compact Flash's ID.
mbed_official 87:085cde657901 230 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 231 * @param CF_ID: Compact flash ID structure.
mbed_official 87:085cde657901 232 * @param pStatus: pointer to compact flash status
mbed_official 87:085cde657901 233 * @retval HAL status
mbed_official 87:085cde657901 234 *
mbed_official 87:085cde657901 235 */
mbed_official 87:085cde657901 236 HAL_StatusTypeDef HAL_CF_Read_ID(PCCARD_HandleTypeDef *hpccard, uint8_t CompactFlash_ID[], uint8_t *pStatus)
mbed_official 87:085cde657901 237 {
mbed_official 87:085cde657901 238 uint32_t timeout = 0xFFFF, index;
mbed_official 87:085cde657901 239 uint8_t status;
mbed_official 87:085cde657901 240
mbed_official 87:085cde657901 241 /* Process Locked */
mbed_official 87:085cde657901 242 __HAL_LOCK(hpccard);
mbed_official 87:085cde657901 243
mbed_official 87:085cde657901 244 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 245 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 87:085cde657901 246 {
mbed_official 87:085cde657901 247 return HAL_BUSY;
mbed_official 87:085cde657901 248 }
mbed_official 87:085cde657901 249
mbed_official 87:085cde657901 250 /* Update the PCCARD controller state */
mbed_official 87:085cde657901 251 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 87:085cde657901 252
mbed_official 87:085cde657901 253 /* Initialize the CF status */
mbed_official 87:085cde657901 254 *pStatus = CF_READY;
mbed_official 87:085cde657901 255
mbed_official 87:085cde657901 256 /* Send the Identify Command */
mbed_official 87:085cde657901 257 *(__IO uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD) = 0xECEC;
mbed_official 87:085cde657901 258
mbed_official 87:085cde657901 259 /* Read CF IDs and timeout treatment */
mbed_official 87:085cde657901 260 do
mbed_official 87:085cde657901 261 {
mbed_official 87:085cde657901 262 /* Read the CF status */
mbed_official 87:085cde657901 263 status = *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 264
mbed_official 87:085cde657901 265 timeout--;
mbed_official 87:085cde657901 266 }while((status != 0x58) && timeout);
mbed_official 87:085cde657901 267
mbed_official 87:085cde657901 268 if(timeout == 0)
mbed_official 87:085cde657901 269 {
mbed_official 87:085cde657901 270 *pStatus = CF_TIMEOUT_ERROR;
mbed_official 87:085cde657901 271 }
mbed_official 87:085cde657901 272 else
mbed_official 87:085cde657901 273 {
mbed_official 87:085cde657901 274 /* Read CF ID bytes */
mbed_official 87:085cde657901 275 for(index = 0; index < 16; index++)
mbed_official 87:085cde657901 276 {
mbed_official 87:085cde657901 277 CompactFlash_ID[index] = *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_DATA);
mbed_official 87:085cde657901 278 }
mbed_official 87:085cde657901 279 }
mbed_official 87:085cde657901 280
mbed_official 87:085cde657901 281 /* Update the PCCARD controller state */
mbed_official 87:085cde657901 282 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 87:085cde657901 283
mbed_official 87:085cde657901 284 /* Process unlocked */
mbed_official 87:085cde657901 285 __HAL_UNLOCK(hpccard);
mbed_official 87:085cde657901 286
mbed_official 87:085cde657901 287 return HAL_OK;
mbed_official 87:085cde657901 288 }
mbed_official 87:085cde657901 289
mbed_official 87:085cde657901 290 /**
mbed_official 87:085cde657901 291 * @brief Read sector from PCCARD memory
mbed_official 87:085cde657901 292 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 293 * @param pBuffer : pointer to destination read buffer
mbed_official 87:085cde657901 294 * @param SectorAddress : Sector address to read
mbed_official 87:085cde657901 295 * @param pStatus : pointer to CF status
mbed_official 87:085cde657901 296 * @retval HAL status
mbed_official 87:085cde657901 297 */
mbed_official 87:085cde657901 298 HAL_StatusTypeDef HAL_CF_Read_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress, uint8_t *pStatus)
mbed_official 87:085cde657901 299 {
mbed_official 87:085cde657901 300 uint32_t timeout = 0xFFFF, index = 0;
mbed_official 87:085cde657901 301 uint8_t status;
mbed_official 87:085cde657901 302
mbed_official 87:085cde657901 303 /* Process Locked */
mbed_official 87:085cde657901 304 __HAL_LOCK(hpccard);
mbed_official 87:085cde657901 305
mbed_official 87:085cde657901 306 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 307 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 87:085cde657901 308 {
mbed_official 87:085cde657901 309 return HAL_BUSY;
mbed_official 87:085cde657901 310 }
mbed_official 87:085cde657901 311
mbed_official 87:085cde657901 312 /* Update the PCCARD controller state */
mbed_official 87:085cde657901 313 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 87:085cde657901 314
mbed_official 87:085cde657901 315 /* Initialize CF status */
mbed_official 87:085cde657901 316 *pStatus = CF_READY;
mbed_official 87:085cde657901 317
mbed_official 87:085cde657901 318 /* Set the parameters to write a sector */
mbed_official 87:085cde657901 319 *(__IO uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_CYLINDER_HIGH) = (uint16_t)0x00;
mbed_official 87:085cde657901 320 *(__IO uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_SECTOR_COUNT) = ((uint16_t)0x0100 ) | ((uint16_t)SectorAddress);
mbed_official 87:085cde657901 321 *(__IO uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD) = (uint16_t)0xE4A0;
mbed_official 87:085cde657901 322
mbed_official 87:085cde657901 323 do
mbed_official 87:085cde657901 324 {
mbed_official 87:085cde657901 325 /* wait till the Status = 0x80 */
mbed_official 87:085cde657901 326 status = *(__IO uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 327 timeout--;
mbed_official 87:085cde657901 328 }while((status == 0x80) && timeout);
mbed_official 87:085cde657901 329
mbed_official 87:085cde657901 330 if(timeout == 0)
mbed_official 87:085cde657901 331 {
mbed_official 87:085cde657901 332 *pStatus = CF_TIMEOUT_ERROR;
mbed_official 87:085cde657901 333 }
mbed_official 87:085cde657901 334
mbed_official 87:085cde657901 335 timeout = 0xFFFF;
mbed_official 87:085cde657901 336
mbed_official 87:085cde657901 337 do
mbed_official 87:085cde657901 338 {
mbed_official 87:085cde657901 339 /* wait till the Status = 0x58 */
mbed_official 87:085cde657901 340 status = *(__IO uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 341 timeout--;
mbed_official 87:085cde657901 342 }while((status != 0x58) && timeout);
mbed_official 87:085cde657901 343
mbed_official 87:085cde657901 344 if(timeout == 0)
mbed_official 87:085cde657901 345 {
mbed_official 87:085cde657901 346 *pStatus = CF_TIMEOUT_ERROR;
mbed_official 87:085cde657901 347 }
mbed_official 87:085cde657901 348
mbed_official 87:085cde657901 349 /* Read bytes */
mbed_official 87:085cde657901 350 for(; index < CF_SECTOR_SIZE; index++)
mbed_official 87:085cde657901 351 {
mbed_official 87:085cde657901 352 *(uint16_t *)pBuffer++ = *(uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR);
mbed_official 87:085cde657901 353 }
mbed_official 87:085cde657901 354
mbed_official 87:085cde657901 355 /* Update the PCCARD controller state */
mbed_official 87:085cde657901 356 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 87:085cde657901 357
mbed_official 87:085cde657901 358 /* Process unlocked */
mbed_official 87:085cde657901 359 __HAL_UNLOCK(hpccard);
mbed_official 87:085cde657901 360
mbed_official 87:085cde657901 361 return HAL_OK;
mbed_official 87:085cde657901 362 }
mbed_official 87:085cde657901 363
mbed_official 87:085cde657901 364
mbed_official 87:085cde657901 365 /**
mbed_official 87:085cde657901 366 * @brief Write sector to PCCARD memory
mbed_official 87:085cde657901 367 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 368 * @param pBuffer : pointer to source write buffer
mbed_official 87:085cde657901 369 * @param SectorAddress : Sector address to write
mbed_official 87:085cde657901 370 * @param pStatus : pointer to CF status
mbed_official 87:085cde657901 371 * @retval HAL status
mbed_official 87:085cde657901 372 */
mbed_official 87:085cde657901 373 HAL_StatusTypeDef HAL_CF_Write_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress, uint8_t *pStatus)
mbed_official 87:085cde657901 374 {
mbed_official 87:085cde657901 375 uint32_t timeout = 0xFFFF, index = 0;
mbed_official 87:085cde657901 376 uint8_t status;
mbed_official 87:085cde657901 377
mbed_official 87:085cde657901 378 /* Process Locked */
mbed_official 87:085cde657901 379 __HAL_LOCK(hpccard);
mbed_official 87:085cde657901 380
mbed_official 87:085cde657901 381 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 382 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 87:085cde657901 383 {
mbed_official 87:085cde657901 384 return HAL_BUSY;
mbed_official 87:085cde657901 385 }
mbed_official 87:085cde657901 386
mbed_official 87:085cde657901 387 /* Update the PCCARD controller state */
mbed_official 87:085cde657901 388 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 87:085cde657901 389
mbed_official 87:085cde657901 390 /* Initialize CF status */
mbed_official 87:085cde657901 391 *pStatus = CF_READY;
mbed_official 87:085cde657901 392
mbed_official 87:085cde657901 393 /* Set the parameters to write a sector */
mbed_official 87:085cde657901 394 *(__IO uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_CYLINDER_HIGH) = (uint16_t)0x00;
mbed_official 87:085cde657901 395 *(__IO uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_SECTOR_COUNT) = ((uint16_t)0x0100 ) | ((uint16_t)SectorAddress);
mbed_official 87:085cde657901 396 *(__IO uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD) = (uint16_t)0x30A0;
mbed_official 87:085cde657901 397
mbed_official 87:085cde657901 398 do
mbed_official 87:085cde657901 399 {
mbed_official 87:085cde657901 400 /* Wait till the Status = 0x58 */
mbed_official 87:085cde657901 401 status = *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 402 timeout--;
mbed_official 87:085cde657901 403 }while((status != 0x58) && timeout);
mbed_official 87:085cde657901 404
mbed_official 87:085cde657901 405 if(timeout == 0)
mbed_official 87:085cde657901 406 {
mbed_official 87:085cde657901 407 *pStatus = CF_TIMEOUT_ERROR;
mbed_official 87:085cde657901 408 }
mbed_official 87:085cde657901 409
mbed_official 87:085cde657901 410 /* Write bytes */
mbed_official 87:085cde657901 411 for(; index < CF_SECTOR_SIZE; index++)
mbed_official 87:085cde657901 412 {
mbed_official 87:085cde657901 413 *(uint16_t *)(CF_IO_SPACE_PRIMARY_ADDR) = *(uint16_t *)pBuffer++;
mbed_official 87:085cde657901 414 }
mbed_official 87:085cde657901 415
mbed_official 87:085cde657901 416 do
mbed_official 87:085cde657901 417 {
mbed_official 87:085cde657901 418 /* Wait till the Status = 0x50 */
mbed_official 87:085cde657901 419 status = *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 420 timeout--;
mbed_official 87:085cde657901 421 }while((status != 0x50) && timeout);
mbed_official 87:085cde657901 422
mbed_official 87:085cde657901 423 if(timeout == 0)
mbed_official 87:085cde657901 424 {
mbed_official 87:085cde657901 425 *pStatus = CF_TIMEOUT_ERROR;
mbed_official 87:085cde657901 426 }
mbed_official 87:085cde657901 427
mbed_official 87:085cde657901 428 /* Update the PCCARD controller state */
mbed_official 87:085cde657901 429 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 87:085cde657901 430
mbed_official 87:085cde657901 431 /* Process unlocked */
mbed_official 87:085cde657901 432 __HAL_UNLOCK(hpccard);
mbed_official 87:085cde657901 433
mbed_official 87:085cde657901 434 return HAL_OK;
mbed_official 87:085cde657901 435 }
mbed_official 87:085cde657901 436
mbed_official 87:085cde657901 437
mbed_official 87:085cde657901 438 /**
mbed_official 87:085cde657901 439 * @brief Erase sector from PCCARD memory
mbed_official 87:085cde657901 440 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 441 * @param SectorAddress : Sector address to erase
mbed_official 87:085cde657901 442 * @param pStatus : pointer to CF status
mbed_official 87:085cde657901 443 * @retval HAL status
mbed_official 87:085cde657901 444 */
mbed_official 87:085cde657901 445 HAL_StatusTypeDef HAL_CF_Erase_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t SectorAddress, uint8_t *pStatus)
mbed_official 87:085cde657901 446 {
mbed_official 87:085cde657901 447 uint32_t timeout = 0x400;
mbed_official 87:085cde657901 448 uint8_t status;
mbed_official 87:085cde657901 449
mbed_official 87:085cde657901 450 /* Process Locked */
mbed_official 87:085cde657901 451 __HAL_LOCK(hpccard);
mbed_official 87:085cde657901 452
mbed_official 87:085cde657901 453 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 454 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 87:085cde657901 455 {
mbed_official 87:085cde657901 456 return HAL_BUSY;
mbed_official 87:085cde657901 457 }
mbed_official 87:085cde657901 458
mbed_official 87:085cde657901 459 /* Update the PCCARD controller state */
mbed_official 87:085cde657901 460 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 87:085cde657901 461
mbed_official 87:085cde657901 462 /* Initialize CF status */
mbed_official 87:085cde657901 463 *pStatus = CF_READY;
mbed_official 87:085cde657901 464
mbed_official 87:085cde657901 465 /* Set the parameters to write a sector */
mbed_official 87:085cde657901 466 *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_CYLINDER_LOW) = 0x00;
mbed_official 87:085cde657901 467 *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_CYLINDER_HIGH) = 0x00;
mbed_official 87:085cde657901 468 *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_SECTOR_NUMBER) = SectorAddress;
mbed_official 87:085cde657901 469 *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_SECTOR_COUNT) = 0x01;
mbed_official 87:085cde657901 470 *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_CARD_HEAD) = 0xA0;
mbed_official 87:085cde657901 471 *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD) = CF_ERASE_SECTOR_CMD;
mbed_official 87:085cde657901 472
mbed_official 87:085cde657901 473 /* wait till the CF is ready */
mbed_official 87:085cde657901 474 status = *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 475
mbed_official 87:085cde657901 476 while((status != 0x50) && timeout)
mbed_official 87:085cde657901 477 {
mbed_official 87:085cde657901 478 status = *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 479 timeout--;
mbed_official 87:085cde657901 480 }
mbed_official 87:085cde657901 481
mbed_official 87:085cde657901 482 if(timeout == 0)
mbed_official 87:085cde657901 483 {
mbed_official 87:085cde657901 484 *pStatus = CF_TIMEOUT_ERROR;
mbed_official 87:085cde657901 485 }
mbed_official 87:085cde657901 486
mbed_official 87:085cde657901 487 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 488 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 87:085cde657901 489
mbed_official 87:085cde657901 490 /* Process unlocked */
mbed_official 87:085cde657901 491 __HAL_UNLOCK(hpccard);
mbed_official 87:085cde657901 492
mbed_official 87:085cde657901 493 return HAL_OK;
mbed_official 87:085cde657901 494 }
mbed_official 87:085cde657901 495
mbed_official 87:085cde657901 496 /**
mbed_official 87:085cde657901 497 * @brief Reset the PCCARD memory
mbed_official 87:085cde657901 498 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 499 * @retval HAL status
mbed_official 87:085cde657901 500 */
mbed_official 87:085cde657901 501 HAL_StatusTypeDef HAL_CF_Reset(PCCARD_HandleTypeDef *hpccard)
mbed_official 87:085cde657901 502 {
mbed_official 87:085cde657901 503
mbed_official 87:085cde657901 504 /* Process Locked */
mbed_official 87:085cde657901 505 __HAL_LOCK(hpccard);
mbed_official 87:085cde657901 506
mbed_official 87:085cde657901 507 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 508 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 87:085cde657901 509 {
mbed_official 87:085cde657901 510 return HAL_BUSY;
mbed_official 87:085cde657901 511 }
mbed_official 87:085cde657901 512
mbed_official 87:085cde657901 513 /* Provide an SW reset and Read and verify the:
mbed_official 87:085cde657901 514 - CF Configuration Option Register at address 0x98000200 --> 0x80
mbed_official 87:085cde657901 515 - Card Configuration and Status Register at address 0x98000202 --> 0x00
mbed_official 87:085cde657901 516 - Pin Replacement Register at address 0x98000204 --> 0x0C
mbed_official 87:085cde657901 517 - Socket and Copy Register at address 0x98000206 --> 0x00
mbed_official 87:085cde657901 518 */
mbed_official 87:085cde657901 519
mbed_official 87:085cde657901 520 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 521 hpccard->State = HAL_PCCARD_STATE_BUSY;
mbed_official 87:085cde657901 522
mbed_official 87:085cde657901 523 *(__IO uint8_t *)(0x98000202) = 0x01;
mbed_official 87:085cde657901 524
mbed_official 87:085cde657901 525 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 526 hpccard->State = HAL_PCCARD_STATE_READY;
mbed_official 87:085cde657901 527
mbed_official 87:085cde657901 528 /* Process unlocked */
mbed_official 87:085cde657901 529 __HAL_UNLOCK(hpccard);
mbed_official 87:085cde657901 530
mbed_official 87:085cde657901 531 return HAL_OK;
mbed_official 87:085cde657901 532 }
mbed_official 87:085cde657901 533
mbed_official 87:085cde657901 534 /**
mbed_official 87:085cde657901 535 * @brief This function handles PCCARD device interrupt request.
mbed_official 87:085cde657901 536 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 537 * @retval HAL status
mbed_official 87:085cde657901 538 */
mbed_official 87:085cde657901 539 void HAL_PCCARD_IRQHandler(PCCARD_HandleTypeDef *hpccard)
mbed_official 87:085cde657901 540 {
mbed_official 87:085cde657901 541 /* Check PCCARD interrupt Rising edge flag */
mbed_official 87:085cde657901 542 if(__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_RISING_EDGE))
mbed_official 87:085cde657901 543 {
mbed_official 87:085cde657901 544 /* PCCARD interrupt callback*/
mbed_official 87:085cde657901 545 HAL_PCCARD_ITCallback(hpccard);
mbed_official 87:085cde657901 546
mbed_official 87:085cde657901 547 /* Clear PCCARD interrupt Rising edge pending bit */
mbed_official 87:085cde657901 548 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_RISING_EDGE);
mbed_official 87:085cde657901 549 }
mbed_official 87:085cde657901 550
mbed_official 87:085cde657901 551 /* Check PCCARD interrupt Level flag */
mbed_official 87:085cde657901 552 if(__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_LEVEL))
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 Level pending bit */
mbed_official 87:085cde657901 558 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_LEVEL);
mbed_official 87:085cde657901 559 }
mbed_official 87:085cde657901 560
mbed_official 87:085cde657901 561 /* Check PCCARD interrupt Falling edge flag */
mbed_official 87:085cde657901 562 if(__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_FALLING_EDGE))
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 Falling edge pending bit */
mbed_official 87:085cde657901 568 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_FALLING_EDGE);
mbed_official 87:085cde657901 569 }
mbed_official 87:085cde657901 570
mbed_official 87:085cde657901 571 /* Check PCCARD interrupt FIFO empty flag */
mbed_official 87:085cde657901 572 if(__FMC_PCCARD_GET_FLAG(hpccard->Instance, FMC_FLAG_FEMPT))
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 FIFO empty pending bit */
mbed_official 87:085cde657901 578 __FMC_PCCARD_CLEAR_FLAG(hpccard->Instance, FMC_FLAG_FEMPT);
mbed_official 87:085cde657901 579 }
mbed_official 87:085cde657901 580
mbed_official 87:085cde657901 581 }
mbed_official 87:085cde657901 582
mbed_official 87:085cde657901 583 /**
mbed_official 87:085cde657901 584 * @brief PCCARD interrupt feature callback
mbed_official 87:085cde657901 585 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 586 * @retval None
mbed_official 87:085cde657901 587 */
mbed_official 87:085cde657901 588 __weak void HAL_PCCARD_ITCallback(PCCARD_HandleTypeDef *hpccard)
mbed_official 87:085cde657901 589 {
mbed_official 87:085cde657901 590 /* NOTE : This function Should not be modified, when the callback is needed,
mbed_official 87:085cde657901 591 the HAL_PCCARD_ITCallback could be implemented in the user file
mbed_official 87:085cde657901 592 */
mbed_official 87:085cde657901 593 }
mbed_official 87:085cde657901 594
mbed_official 87:085cde657901 595 /**
mbed_official 87:085cde657901 596 * @}
mbed_official 87:085cde657901 597 */
mbed_official 87:085cde657901 598
mbed_official 87:085cde657901 599 /** @defgroup PCCARD_Group4 State functions
mbed_official 87:085cde657901 600 * @brief Peripheral State functions
mbed_official 87:085cde657901 601 *
mbed_official 87:085cde657901 602 @verbatim
mbed_official 87:085cde657901 603 ==============================================================================
mbed_official 87:085cde657901 604 ##### PCCARD State functions #####
mbed_official 87:085cde657901 605 ==============================================================================
mbed_official 87:085cde657901 606 [..]
mbed_official 87:085cde657901 607 This subsection permit to get in run-time the status of the PCCARD controller
mbed_official 87:085cde657901 608 and the data flow.
mbed_official 87:085cde657901 609
mbed_official 87:085cde657901 610 @endverbatim
mbed_official 87:085cde657901 611 * @{
mbed_official 87:085cde657901 612 */
mbed_official 87:085cde657901 613
mbed_official 87:085cde657901 614 /**
mbed_official 87:085cde657901 615 * @brief return the PCCARD controller state
mbed_official 87:085cde657901 616 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 617 * @retval PCCARD controller state
mbed_official 87:085cde657901 618 */
mbed_official 87:085cde657901 619 HAL_PCCARD_StateTypeDef HAL_PCCARD_GetState(PCCARD_HandleTypeDef *hpccard)
mbed_official 87:085cde657901 620 {
mbed_official 87:085cde657901 621 return hpccard->State;
mbed_official 87:085cde657901 622 }
mbed_official 87:085cde657901 623
mbed_official 87:085cde657901 624 /**
mbed_official 87:085cde657901 625 * @brief Get the compact flash memory status
mbed_official 87:085cde657901 626 * @param hpccard: PCCARD handle
mbed_official 87:085cde657901 627 * @retval New status of the CF operation. This parameter can be:
mbed_official 87:085cde657901 628 * - CompactFlash_TIMEOUT_ERROR: when the previous operation generate
mbed_official 87:085cde657901 629 * a Timeout error
mbed_official 87:085cde657901 630 * - CompactFlash_READY: when memory is ready for the next operation
mbed_official 87:085cde657901 631 *
mbed_official 87:085cde657901 632 */
mbed_official 87:085cde657901 633 CF_StatusTypedef HAL_CF_GetStatus(PCCARD_HandleTypeDef *hpccard)
mbed_official 87:085cde657901 634 {
mbed_official 87:085cde657901 635 uint32_t timeout = 0x1000000, status_CF;
mbed_official 87:085cde657901 636
mbed_official 87:085cde657901 637 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 638 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 87:085cde657901 639 {
mbed_official 87:085cde657901 640 return CF_ONGOING;
mbed_official 87:085cde657901 641 }
mbed_official 87:085cde657901 642
mbed_official 87:085cde657901 643 status_CF = *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 644
mbed_official 87:085cde657901 645 while((status_CF == CF_BUSY) && timeout)
mbed_official 87:085cde657901 646 {
mbed_official 87:085cde657901 647 status_CF = *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 648 timeout--;
mbed_official 87:085cde657901 649 }
mbed_official 87:085cde657901 650
mbed_official 87:085cde657901 651 if(timeout == 0)
mbed_official 87:085cde657901 652 {
mbed_official 87:085cde657901 653 status_CF = CF_TIMEOUT_ERROR;
mbed_official 87:085cde657901 654 }
mbed_official 87:085cde657901 655
mbed_official 87:085cde657901 656 /* Return the operation status */
mbed_official 87:085cde657901 657 return (CF_StatusTypedef) status_CF;
mbed_official 87:085cde657901 658 }
mbed_official 87:085cde657901 659
mbed_official 87:085cde657901 660 /**
mbed_official 87:085cde657901 661 * @brief Reads the Compact Flash memory status using the Read status command
mbed_official 87:085cde657901 662 * @param hpccard : pointer to PCCARD handle
mbed_official 87:085cde657901 663 * @retval The status of the Compact Flash memory. This parameter can be:
mbed_official 87:085cde657901 664 * - CompactFlash_BUSY: when memory is busy
mbed_official 87:085cde657901 665 * - CompactFlash_READY: when memory is ready for the next operation
mbed_official 87:085cde657901 666 * - CompactFlash_ERROR: when the previous operation gererates error
mbed_official 87:085cde657901 667 */
mbed_official 87:085cde657901 668 CF_StatusTypedef HAL_CF_ReadStatus(PCCARD_HandleTypeDef *hpccard)
mbed_official 87:085cde657901 669 {
mbed_official 87:085cde657901 670 uint8_t data = 0, status_CF = CF_BUSY;
mbed_official 87:085cde657901 671
mbed_official 87:085cde657901 672 /* Check the PCCARD controller state */
mbed_official 87:085cde657901 673 if(hpccard->State == HAL_PCCARD_STATE_BUSY)
mbed_official 87:085cde657901 674 {
mbed_official 87:085cde657901 675 return CF_ONGOING;
mbed_official 87:085cde657901 676 }
mbed_official 87:085cde657901 677
mbed_official 87:085cde657901 678 /* Read status operation */
mbed_official 87:085cde657901 679 data = *(__IO uint8_t *)(CF_IO_SPACE_PRIMARY_ADDR | CF_STATUS_CMD_ALTERNATE);
mbed_official 87:085cde657901 680
mbed_official 87:085cde657901 681 if((data & CF_TIMEOUT_ERROR) == CF_TIMEOUT_ERROR)
mbed_official 87:085cde657901 682 {
mbed_official 87:085cde657901 683 status_CF = CF_TIMEOUT_ERROR;
mbed_official 87:085cde657901 684 }
mbed_official 87:085cde657901 685 else if((data & CF_READY) == CF_READY)
mbed_official 87:085cde657901 686 {
mbed_official 87:085cde657901 687 status_CF = CF_READY;
mbed_official 87:085cde657901 688 }
mbed_official 87:085cde657901 689
mbed_official 87:085cde657901 690 return (CF_StatusTypedef) status_CF;
mbed_official 87:085cde657901 691 }
mbed_official 87:085cde657901 692
mbed_official 87:085cde657901 693 /**
mbed_official 87:085cde657901 694 * @}
mbed_official 87:085cde657901 695 */
mbed_official 87:085cde657901 696
mbed_official 87:085cde657901 697 /**
mbed_official 87:085cde657901 698 * @}
mbed_official 87:085cde657901 699 */
mbed_official 87:085cde657901 700 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */
mbed_official 87:085cde657901 701 #endif /* HAL_PCCARD_MODULE_ENABLED */
mbed_official 87:085cde657901 702
mbed_official 87:085cde657901 703 /**
mbed_official 87:085cde657901 704 * @}
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 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/