mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

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

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

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

Import librarymbed

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

Committer:
mbed_official
Date:
Mon Sep 28 14:00:11 2015 +0100
Revision:
632:7687fb9c4f91
Parent:
385:be64abf45658
Child:
634:ac7d6880524d
Synchronized with git revision f7ce4ed029cc611121464252ff28d5e8beb895b0

Full URL: https://github.com/mbedmicro/mbed/commit/f7ce4ed029cc611121464252ff28d5e8beb895b0/

NUCLEO_F303K8 - add support of the STM32F303K8

Who changed what in which revision?

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