STM32F103xB HAL User Manual
stm32f1xx_hal_pccard.h
Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32f1xx_hal_pccard.h
00004   * @author  MCD Application Team
00005   * @brief   Header file of PCCARD HAL module.
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
00010   * All rights reserved.</center></h2>
00011   *
00012   * This software component is licensed by ST under BSD 3-Clause license,
00013   * the "License"; You may not use this file except in compliance with the
00014   * License. You may obtain a copy of the License at:
00015   *                       opensource.org/licenses/BSD-3-Clause
00016   *
00017   ******************************************************************************
00018   */
00019 
00020 /* Define to prevent recursive inclusion -------------------------------------*/
00021 #ifndef STM32F1xx_HAL_PCCARD_H
00022 #define STM32F1xx_HAL_PCCARD_H
00023 
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027 
00028 #if defined(FSMC_BANK4)
00029 
00030 /* Includes ------------------------------------------------------------------*/
00031 #include "stm32f1xx_ll_fsmc.h"
00032 
00033 /** @addtogroup STM32F1xx_HAL_Driver
00034   * @{
00035   */
00036 
00037 /** @addtogroup PCCARD
00038   * @{
00039   */
00040 
00041 /* Exported typedef ----------------------------------------------------------*/
00042 /** @defgroup PCCARD_Exported_Types PCCARD Exported Types
00043   * @{
00044   */
00045 
00046 /**
00047   * @brief  HAL PCCARD State structures definition
00048   */
00049 typedef enum
00050 {
00051   HAL_PCCARD_STATE_RESET     = 0x00U,    /*!< PCCARD peripheral not yet initialized or disabled */
00052   HAL_PCCARD_STATE_READY     = 0x01U,    /*!< PCCARD peripheral ready                           */
00053   HAL_PCCARD_STATE_BUSY      = 0x02U,    /*!< PCCARD peripheral busy                            */
00054   HAL_PCCARD_STATE_ERROR     = 0x04U     /*!< PCCARD peripheral error                           */
00055 } HAL_PCCARD_StateTypeDef;
00056 
00057 typedef enum
00058 {
00059   HAL_PCCARD_STATUS_SUCCESS = 0U,
00060   HAL_PCCARD_STATUS_ONGOING,
00061   HAL_PCCARD_STATUS_ERROR,
00062   HAL_PCCARD_STATUS_TIMEOUT
00063 } HAL_PCCARD_StatusTypeDef;
00064 
00065 /**
00066   * @brief  FSMC_PCCARD handle Structure definition
00067   */
00068 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00069 typedef struct __PCCARD_HandleTypeDef
00070 #else
00071 typedef struct
00072 #endif /* USE_HAL_PCCARD_REGISTER_CALLBACKS  */
00073 {
00074   FSMC_PCCARD_TypeDef           *Instance;              /*!< Register base address for PCCARD device          */
00075 
00076   FSMC_PCCARD_InitTypeDef       Init;                   /*!< PCCARD device control configuration parameters   */
00077 
00078   __IO HAL_PCCARD_StateTypeDef State;                  /*!< PCCARD device access state                       */
00079 
00080   HAL_LockTypeDef              Lock;                   /*!< PCCARD Lock                                      */
00081 
00082 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00083   void (* MspInitCallback)(struct __PCCARD_HandleTypeDef *hpccard);               /*!< PCCARD Msp Init callback              */
00084   void (* MspDeInitCallback)(struct __PCCARD_HandleTypeDef *hpccard);             /*!< PCCARD Msp DeInit callback            */
00085   void (* ItCallback)(struct __PCCARD_HandleTypeDef *hpccard);                    /*!< PCCARD IT callback                    */
00086 #endif
00087 } PCCARD_HandleTypeDef;
00088 
00089 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00090 /**
00091   * @brief  HAL PCCARD Callback ID enumeration definition
00092   */
00093 typedef enum
00094 {
00095   HAL_PCCARD_MSP_INIT_CB_ID       = 0x00U,  /*!< PCCARD MspInit Callback ID          */
00096   HAL_PCCARD_MSP_DEINIT_CB_ID     = 0x01U,  /*!< PCCARD MspDeInit Callback ID        */
00097   HAL_PCCARD_IT_CB_ID             = 0x02U   /*!< PCCARD IT Callback ID               */
00098 } HAL_PCCARD_CallbackIDTypeDef;
00099 
00100 /**
00101   * @brief  HAL PCCARD Callback pointer definition
00102   */
00103 typedef void (*pPCCARD_CallbackTypeDef)(PCCARD_HandleTypeDef *hpccard);
00104 #endif
00105 /**
00106   * @}
00107   */
00108 
00109 /* Exported constants --------------------------------------------------------*/
00110 /* Exported macro ------------------------------------------------------------*/
00111 /** @defgroup PCCARD_Exported_Macros PCCARD Exported Macros
00112   * @{
00113   */
00114 /** @brief Reset PCCARD handle state
00115   * @param  __HANDLE__ specifies the PCCARD handle.
00116   * @retval None
00117   */
00118 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00119 #define __HAL_PCCARD_RESET_HANDLE_STATE(__HANDLE__)       do {                                               \
00120                                                                (__HANDLE__)->State = HAL_PCCARD_STATE_RESET; \
00121                                                                (__HANDLE__)->MspInitCallback = NULL;         \
00122                                                                (__HANDLE__)->MspDeInitCallback = NULL;       \
00123                                                              } while(0)
00124 #else
00125 #define __HAL_PCCARD_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_PCCARD_STATE_RESET)
00126 #endif
00127 /**
00128   * @}
00129   */
00130 
00131 /* Exported functions --------------------------------------------------------*/
00132 /** @addtogroup PCCARD_Exported_Functions
00133   * @{
00134   */
00135 
00136 /** @addtogroup PCCARD_Exported_Functions_Group1
00137   * @{
00138   */
00139 /* Initialization/de-initialization functions  **********************************/
00140 HAL_StatusTypeDef  HAL_PCCARD_Init(PCCARD_HandleTypeDef *hpccard, FSMC_NAND_PCC_TimingTypeDef *ComSpaceTiming,
00141                                    FSMC_NAND_PCC_TimingTypeDef *AttSpaceTiming, FSMC_NAND_PCC_TimingTypeDef *IOSpaceTiming);
00142 HAL_StatusTypeDef  HAL_PCCARD_DeInit(PCCARD_HandleTypeDef *hpccard);
00143 void HAL_PCCARD_MspInit(PCCARD_HandleTypeDef *hpccard);
00144 void HAL_PCCARD_MspDeInit(PCCARD_HandleTypeDef *hpccard);
00145 /**
00146   * @}
00147   */
00148 
00149 /** @addtogroup PCCARD_Exported_Functions_Group2
00150   * @{
00151   */
00152 /* IO operation functions  *****************************************************/
00153 HAL_StatusTypeDef  HAL_PCCARD_Read_ID(PCCARD_HandleTypeDef *hpccard, uint8_t CompactFlash_ID[], uint8_t *pStatus);
00154 HAL_StatusTypeDef  HAL_PCCARD_Write_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress,
00155                                            uint8_t *pStatus);
00156 HAL_StatusTypeDef  HAL_PCCARD_Read_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress,
00157                                           uint8_t *pStatus);
00158 HAL_StatusTypeDef  HAL_PCCARD_Erase_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t SectorAddress, uint8_t *pStatus);
00159 HAL_StatusTypeDef  HAL_PCCARD_Reset(PCCARD_HandleTypeDef *hpccard);
00160 void               HAL_PCCARD_IRQHandler(PCCARD_HandleTypeDef *hpccard);
00161 void               HAL_PCCARD_ITCallback(PCCARD_HandleTypeDef *hpccard);
00162 
00163 #if (USE_HAL_PCCARD_REGISTER_CALLBACKS == 1)
00164 /* PCCARD callback registering/unregistering */
00165 HAL_StatusTypeDef  HAL_PCCARD_RegisterCallback(PCCARD_HandleTypeDef *hpccard, HAL_PCCARD_CallbackIDTypeDef CallbackId,
00166                                                pPCCARD_CallbackTypeDef pCallback);
00167 HAL_StatusTypeDef  HAL_PCCARD_UnRegisterCallback(PCCARD_HandleTypeDef *hpccard,
00168                                                  HAL_PCCARD_CallbackIDTypeDef CallbackId);
00169 #endif
00170 /**
00171   * @}
00172   */
00173 
00174 /** @addtogroup PCCARD_Exported_Functions_Group3
00175   * @{
00176   */
00177 /* PCCARD State functions *******************************************************/
00178 HAL_PCCARD_StateTypeDef  HAL_PCCARD_GetState(PCCARD_HandleTypeDef *hpccard);
00179 HAL_PCCARD_StatusTypeDef HAL_PCCARD_GetStatus(PCCARD_HandleTypeDef *hpccard);
00180 HAL_PCCARD_StatusTypeDef HAL_PCCARD_ReadStatus(PCCARD_HandleTypeDef *hpccard);
00181 /**
00182   * @}
00183   */
00184 
00185 /**
00186   * @}
00187   */
00188 /* Private types -------------------------------------------------------------*/
00189 /* Private variables ---------------------------------------------------------*/
00190 /* Private constants ---------------------------------------------------------*/
00191 /** @defgroup PCCARD_Private_Constants PCCARD Private Constants
00192   * @{
00193   */
00194 #define PCCARD_DEVICE_ADDRESS             0x90000000U
00195 #define PCCARD_ATTRIBUTE_SPACE_ADDRESS    0x98000000U              /* Attribute space size to @0x9BFF FFFF */
00196 #define PCCARD_COMMON_SPACE_ADDRESS       PCCARD_DEVICE_ADDRESS    /* Common space size to @0x93FF FFFF    */
00197 #define PCCARD_IO_SPACE_ADDRESS           0x9C000000U              /* IO space size to @0x9FFF FFFF        */
00198 #define PCCARD_IO_SPACE_PRIMARY_ADDR      0x9C0001F0U              /* IO space size to @0x9FFF FFFF        */
00199 
00200 /* Flash-ATA registers description */
00201 #define ATA_DATA                       ((uint8_t)0x00)    /* Data register */
00202 #define ATA_SECTOR_COUNT               ((uint8_t)0x02)    /* Sector Count register */
00203 #define ATA_SECTOR_NUMBER              ((uint8_t)0x03)    /* Sector Number register */
00204 #define ATA_CYLINDER_LOW               ((uint8_t)0x04)    /* Cylinder low register */
00205 #define ATA_CYLINDER_HIGH              ((uint8_t)0x05)    /* Cylinder high register */
00206 #define ATA_CARD_HEAD                  ((uint8_t)0x06)    /* Card/Head register */
00207 #define ATA_STATUS_CMD                 ((uint8_t)0x07)    /* Status(read)/Command(write) register */
00208 #define ATA_STATUS_CMD_ALTERNATE       ((uint8_t)0x0E)    /* Alternate Status(read)/Command(write) register */
00209 #define ATA_COMMON_DATA_AREA           ((uint16_t)0x0400) /* Start of data area (for Common access only!) */
00210 #define ATA_CARD_CONFIGURATION         ((uint16_t)0x0202) /* Card Configuration and Status Register */
00211 
00212 /* Flash-ATA commands */
00213 #define ATA_READ_SECTOR_CMD            ((uint8_t)0x20)
00214 #define ATA_WRITE_SECTOR_CMD           ((uint8_t)0x30)
00215 #define ATA_ERASE_SECTOR_CMD           ((uint8_t)0xC0)
00216 #define ATA_IDENTIFY_CMD               ((uint8_t)0xEC)
00217 
00218 /* PC Card/Compact Flash status */
00219 #define PCCARD_TIMEOUT_ERROR           ((uint8_t)0x60)
00220 #define PCCARD_BUSY                    ((uint8_t)0x80)
00221 #define PCCARD_PROGR                   ((uint8_t)0x01)
00222 #define PCCARD_READY                   ((uint8_t)0x40)
00223 
00224 #define PCCARD_SECTOR_SIZE             255U               /* In half words */
00225 
00226 /**
00227   * @}
00228   */
00229 /* Compact Flash redefinition */
00230 #define HAL_CF_Init                 HAL_PCCARD_Init
00231 #define HAL_CF_DeInit               HAL_PCCARD_DeInit
00232 #define HAL_CF_MspInit              HAL_PCCARD_MspInit
00233 #define HAL_CF_MspDeInit            HAL_PCCARD_MspDeInit
00234 
00235 #define HAL_CF_Read_ID              HAL_PCCARD_Read_ID
00236 #define HAL_CF_Write_Sector         HAL_PCCARD_Write_Sector
00237 #define HAL_CF_Read_Sector          HAL_PCCARD_Read_Sector
00238 #define HAL_CF_Erase_Sector         HAL_PCCARD_Erase_Sector
00239 #define HAL_CF_Reset                HAL_PCCARD_Reset
00240 #define HAL_CF_IRQHandler           HAL_PCCARD_IRQHandler
00241 #define HAL_CF_ITCallback           HAL_PCCARD_ITCallback
00242 
00243 #define HAL_CF_GetState             HAL_PCCARD_GetState
00244 #define HAL_CF_GetStatus            HAL_PCCARD_GetStatus
00245 #define HAL_CF_ReadStatus           HAL_PCCARD_ReadStatus
00246 
00247 #define HAL_CF_STATUS_SUCCESS       HAL_PCCARD_STATUS_SUCCESS
00248 #define HAL_CF_STATUS_ONGOING       HAL_PCCARD_STATUS_ONGOING
00249 #define HAL_CF_STATUS_ERROR         HAL_PCCARD_STATUS_ERROR
00250 #define HAL_CF_STATUS_TIMEOUT       HAL_PCCARD_STATUS_TIMEOUT
00251 #define HAL_CF_StatusTypeDef        HAL_PCCARD_StatusTypeDef
00252 
00253 #define CF_DEVICE_ADDRESS           PCCARD_DEVICE_ADDRESS
00254 #define CF_ATTRIBUTE_SPACE_ADDRESS  PCCARD_ATTRIBUTE_SPACE_ADDRESS
00255 #define CF_COMMON_SPACE_ADDRESS     PCCARD_COMMON_SPACE_ADDRESS
00256 #define CF_IO_SPACE_ADDRESS         PCCARD_IO_SPACE_ADDRESS
00257 #define CF_IO_SPACE_PRIMARY_ADDR    PCCARD_IO_SPACE_PRIMARY_ADDR
00258 
00259 #define CF_TIMEOUT_ERROR            PCCARD_TIMEOUT_ERROR
00260 #define CF_BUSY                     PCCARD_BUSY
00261 #define CF_PROGR                    PCCARD_PROGR
00262 #define CF_READY                    PCCARD_READY
00263 
00264 #define CF_SECTOR_SIZE              PCCARD_SECTOR_SIZE
00265 
00266 /* Private macros ------------------------------------------------------------*/
00267 /**
00268   * @}
00269   */
00270 
00271 
00272 /**
00273   * @}
00274   */
00275 
00276 #endif /* FSMC_BANK4 */
00277 
00278 #ifdef __cplusplus
00279 }
00280 #endif
00281 
00282 #endif /* STM32F1xx_HAL_PCCARD_H */
00283 
00284 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/