MG32F157 Standard Peripherals Firmware Library
mg32f157_sdio.h
Go to the documentation of this file.
1 
10 /* Define to prevent recursive inclusion -------------------------------------*/
11 #ifndef __MG32F157_SDIO_H
12 #define __MG32F157_SDIO_H
13 
14 #ifdef __cplusplus
15  extern "C" {
16 #endif
17 
18 /* Includes ------------------------------------------------------------------*/
19 #include "mg32f157.h"
20 
29 /* Exported types ------------------------------------------------------------*/
30 
34 typedef struct
35 {
36  uint32_t ClockPowerSave; /* Specifies whether SDIO Clock output is enabled or disabled when the bus is idle.
37  This parameter can be a value of @ref SDIO_Clock_Power_Save */
38  uint32_t BusWide; /* Specifies the SDIO bus width.
39  This parameter can be a value of @ref SDIO_Bus_Wide */
40  uint32_t ClockDiv; /* Specifies the clock frequency of the SDIO controller.
41  This parameter can be a value between Min_Data = 0 and Max_Data = 255 */
42 
44 
48 typedef struct
49 {
50  uint32_t Argument; /* Specifies the SDIO command argument which is sent
51  to a card as part of a command message. If a command
52  contains an argument, it must be loaded into this register
53  before writing the command to the command register. */
54  uint32_t CmdIndex; /* Specifies the SDIO command index. It must be Min_Data = 0 and
55  Max_Data = 64 */
56  uint32_t Response; /* Specifies the SDIO response type.
57  This parameter can be a value of @ref SDIO_Response_Type */
58  uint32_t CPSM; /* Specifies whether SDIO Command path state machine (CPSM) is enabled or disabled.
59  This parameter can be a value of @ref SDIO_CPSM_State */
61 
65 typedef struct
66 {
67  uint32_t DataTimeOut; /* Specifies the data timeout period in card bus clock periods. */
68 
69  uint32_t DataLength; /* Specifies the number of data bytes to be transferred. */
70 
71  uint32_t DataBlockSize; /* Specifies the data block size for block transfer.
72  This parameter can be a value of @ref SDIO_Data_Block_Size */
73  uint32_t TransferDir; /* Specifies the data transfer direction, whether the transfer is a read or write.
74  This parameter can be a value of @ref SDIO_Transfer_Direction */
75  uint32_t TransferMode; /* Specifies whether data transfer is in stream or block mode.
76  This parameter can be a value of @ref SDIO_Transfer_Type */
77  uint32_t DPSM; /* Specifies whether SDIO Data path state machine (DPSM) is enabled or disabled.
78  This parameter can be a value of @ref SDIO_DPSM_State */
80 
81 /* Exported constants --------------------------------------------------------*/
82 
87 #define IS_SDIO_ALL_PERIPH(SDIOX) (((SDIOX) == SDIO))
88 
89 
93 #define SDIO_CLOCK_POWER_SAVE_DISABLE 0x00000000U
94 #define SDIO_CLOCK_POWER_SAVE_ENABLE 0x0000FFFFU // SDIO_CLKCR_PWRSAV
95 #define IS_SDIO_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDIO_CLOCK_POWER_SAVE_DISABLE) || \
96  ((SAVE) == SDIO_CLOCK_POWER_SAVE_ENABLE))
97 
105 #define SDIO_BUS_WIDE_1B 0x00000000U
106 #define SDIO_BUS_WIDE_4B 0x0000FFFFU // SDIO_CLKCR_WIDBUS_0
107 #define SDIO_BUS_WIDE_8B 0xFFFFFFFFU // SDIO_CLKCR_WIDBUS_1
108 #define IS_SDIO_BUS_WIDE(WIDE) (((WIDE) == SDIO_BUS_WIDE_1B) || \
109  ((WIDE) == SDIO_BUS_WIDE_4B) || \
110  ((WIDE) == SDIO_BUS_WIDE_8B))
111 
119 #define IS_SDIO_CLKDIV(DIV) ((DIV) <= 0xFFU)
120 
128 #define IS_SDIO_CMD_INDEX(INDEX) ((INDEX) < 0x40U)
129 
137 #define SDIO_Response_No 0x00000000U
138 #define SDIO_Response_Short 0x00000040U // SDIO_CMD_WAITRESP_0
139 #define SDIO_Response_Long 0x000000C0U // SDIO_CMD_WAITRESP
140 #define IS_SDIO_RESPONSE(RESPONSE) (((RESPONSE) == SDIO_Response_No) || \
141  ((RESPONSE) == SDIO_Response_Short) || \
142  ((RESPONSE) == SDIO_Response_Long))
143 
151 #define SDIO_CPSM_Disable 0x00000000U
152 #define SDIO_CPSM_Enable 0
153 #define IS_SDIO_CPSM(CPSM) 1
154 
162 #define SDIO_RESP1 0x00000000U
163 #define SDIO_RESP2 0x00000004U
164 #define SDIO_RESP3 0x00000008U
165 #define SDIO_RESP4 0x0000000CU
166 #define IS_SDIO_RESP(RESP) (((RESP) == SDIO_RESP1) || \
167  ((RESP) == SDIO_RESP2) || \
168  ((RESP) == SDIO_RESP3) || \
169  ((RESP) == SDIO_RESP4))
170 
178 #define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFFU)
179 
187 #define SDIO_DATABLOCK_SIZE_1B 0x00000000U
188 #define SDIO_DATABLOCK_SIZE_2B 0x00000002U
189 #define SDIO_DATABLOCK_SIZE_4B 0x00000004U
190 #define SDIO_DATABLOCK_SIZE_8B 0x00000008U
191 #define SDIO_DATABLOCK_SIZE_16B 0x00000010U
192 #define SDIO_DATABLOCK_SIZE_32B 0x00000020U
193 #define SDIO_DATABLOCK_SIZE_64B 0x00000040U
194 #define SDIO_DATABLOCK_SIZE_128B 0x00000080U
195 #define SDIO_DATABLOCK_SIZE_256B 0x00000100U
196 #define SDIO_DATABLOCK_SIZE_512B 0x00000200U
197 #define SDIO_DATABLOCK_SIZE_1024B 0x00000400U
198 #define SDIO_DATABLOCK_SIZE_2048B 0x00000800U
199 #define SDIO_DATABLOCK_SIZE_4096B 0x00001000U
200 #define SDIO_DATABLOCK_SIZE_8192B 0x00002000U
201 #define SDIO_DATABLOCK_SIZE_16384B 0x00004000U
202 #define SDIO_DATABLOCK_SIZE_32768B 0x00008000U
203 #define IS_SDIO_BLOCK_SIZE(SIZE) (((SIZE) == SDIO_DATABLOCK_SIZE_1B) || \
204  ((SIZE) == SDIO_DATABLOCK_SIZE_2B) || \
205  ((SIZE) == SDIO_DATABLOCK_SIZE_4B) || \
206  ((SIZE) == SDIO_DATABLOCK_SIZE_8B) || \
207  ((SIZE) == SDIO_DATABLOCK_SIZE_16B) || \
208  ((SIZE) == SDIO_DATABLOCK_SIZE_32B) || \
209  ((SIZE) == SDIO_DATABLOCK_SIZE_64B) || \
210  ((SIZE) == SDIO_DATABLOCK_SIZE_128B) || \
211  ((SIZE) == SDIO_DATABLOCK_SIZE_256B) || \
212  ((SIZE) == SDIO_DATABLOCK_SIZE_512B) || \
213  ((SIZE) == SDIO_DATABLOCK_SIZE_1024B) || \
214  ((SIZE) == SDIO_DATABLOCK_SIZE_2048B) || \
215  ((SIZE) == SDIO_DATABLOCK_SIZE_4096B) || \
216  ((SIZE) == SDIO_DATABLOCK_SIZE_8192B) || \
217  ((SIZE) == SDIO_DATABLOCK_SIZE_16384B) || \
218  ((SIZE) == SDIO_DATABLOCK_SIZE_32768B))
219 
227 #define SDIO_TransferDir_ToCard 0x00000000U
228 #define SDIO_TransferDir_ToSDIO 0x00000001U
229 #define IS_SDIO_TRANSFER_DIR(DIR) (((DIR) == SDIO_TransferDir_ToCard) || \
230  ((DIR) == SDIO_TransferDir_ToSDIO))
231 
239 #define SDIO_TransferMode_Block 0x00000000U
240 #define SDIO_TransferMode_Stream SDIO_CMD_TRANSFER_MODE
241 #define IS_SDIO_TRANSFER_MODE(MODE) (((MODE) == SDIO_TransferMode_Block) || \
242  ((MODE) == SDIO_TransferMode_Stream))
243 
251 #define SDIO_DPSM_Disable 0x00000000U
252 #define SDIO_DPSM_Enable 0x00000001U
253 #define IS_SDIO_DPSM(DPSM) (((DPSM) == SDIO_DPSM_Disable) || \
254  ((DPSM) == SDIO_DPSM_Enable))
255 
263 #define SDIO_IT_CCRCFAIL SDIO_RINTSTS_RESPCRCERR // SDIO_STA_CCRCFAIL
264 #define SDIO_IT_DCRCFAIL SDIO_RINTSTS_DATACRCERR // SDIO_STA_DCRCFAIL
265 #define SDIO_IT_CTIMEOUT SDIO_RINTSTS_RESPTIMEOUT // SDIO_STA_CTIMEOUT
266 #define SDIO_IT_DTIMEOUT SDIO_RINTSTS_DATATIMEOUT // SDIO_STA_DTIMEOUT
267 #define SDIO_IT_TXUNDERR SDIO_RINTSTS_UNDER_OVER_RUN // SDIO_STA_TXUNDERR
268 #define SDIO_IT_RXOVERR SDIO_RINTSTS_UNDER_OVER_RUN // SDIO_STA_RXOVERR
269 #define SDIO_IT_CMDREND SDIO_RINTSTS_CMDDONE // SDIO_STA_CMDREND
270 #define SDIO_IT_CMDSENT SDIO_RINTSTS_CMDDONE // SDIO_STA_CMDSENT
271 #define SDIO_IT_DATAEND SDIO_RINTSTS_DTRANSFEROVER // SDIO_STA_DATAEND
272 #define SDIO_IT_STBITERR SDIO_RINTSTS_STARTERROR // SDIO_STA_STBITERR
273 #define SDIO_IT_DBCKEND SDIO_RINTSTS_DTRANSFEROVER // SDIO_STA_DBCKEND
274 #define SDIO_IT_TXFIFOF SDIO_RINTSTS_UNDER_OVER_RUN // SDIO_STA_TXFIFOF
275 #define SDIO_IT_RXFIFOF SDIO_RINTSTS_UNDER_OVER_RUN // SDIO_STA_RXFIFOF
276 #define SDIO_IT_TXDAVL SDIO_RINTSTS_TXDATAREQ // SDIO_STA_TXDAVL
277 #define SDIO_IT_RXDAVL SDIO_RINTSTS_RXDATAREQ // SDIO_STA_RXDAVL
278 #define SDIO_IT_SDIOIT SDIO_RINTSTS_SDIOIT // SDIO_STA_SDIOIT
279 #define SDIO_IT_ALL 0xFFFFFFFF // SDIO_STA_ALL
280 #define IS_SDIO_IT(IT) (((IT) == SDIO_IT_DCRCFAIL) || \
281  ((IT) == SDIO_IT_CTIMEOUT) || \
282  ((IT) == SDIO_IT_DTIMEOUT) || \
283  ((IT) == SDIO_IT_TXUNDERR) || \
284  ((IT) == SDIO_IT_RXOVERR) || \
285  ((IT) == SDIO_IT_CMDREND ) || \
286  ((IT) == SDIO_IT_CMDSENT ) || \
287  ((IT) == SDIO_IT_DATAEND ) || \
288  ((IT) == SDIO_IT_STBITERR) || \
289  ((IT) == SDIO_IT_DBCKEND ) || \
290  ((IT) == SDIO_IT_TXFIFOF ) || \
291  ((IT) == SDIO_IT_RXFIFOF ) || \
292  ((IT) == SDIO_IT_TXDAVL ) || \
293  ((IT) == SDIO_IT_RXDAVL ) || \
294  ((IT) == SDIO_IT_SDIOIT))
295 
303 #define SDIO_FLAG_CCRCFAIL SDIO_RINTSTS_RESPCRCERR // SDIO_STA_CCRCFAIL
304 #define SDIO_FLAG_DCRCFAIL SDIO_RINTSTS_DATACRCERR // SDIO_STA_DCRCFAIL
305 #define SDIO_FLAG_CTIMEOUT SDIO_RINTSTS_RESPTIMEOUT // SDIO_STA_CTIMEOUT
306 #define SDIO_FLAG_DTIMEOUT SDIO_RINTSTS_DATATIMEOUT // SDIO_STA_DTIMEOUT
307 #define SDIO_FLAG_TXUNDERR SDIO_RINTSTS_UNDER_OVER_RUN // SDIO_STA_TXUNDERR
308 #define SDIO_FLAG_RXOVERR SDIO_RINTSTS_UNDER_OVER_RUN // SDIO_STA_RXOVERR
309 #define SDIO_FLAG_CMDREND SDIO_RINTSTS_CMDDONE // SDIO_STA_CMDREND
310 #define SDIO_FLAG_CMDSENT SDIO_RINTSTS_CMDDONE // SDIO_STA_CMDSENT
311 #define SDIO_FLAG_DATAEND SDIO_RINTSTS_DTRANSFEROVER // SDIO_STA_DATAEND
312 #define SDIO_FLAG_STBITERR SDIO_RINTSTS_STARTERROR // SDIO_STA_STBITERR
313 #define SDIO_FLAG_DBCKEND SDIO_RINTSTS_DTRANSFEROVER // SDIO_STA_DBCKEND
314 #define SDIO_FLAG_BUSYCLEAR SDIO_RINTSTS_BUSYCLEAR
315 #define SDIO_FLAG_TXFIFOF SDIO_RINTSTS_UNDER_OVER_RUN // SDIO_STA_TXFIFOF
316 #define SDIO_FLAG_RXFIFOF SDIO_RINTSTS_UNDER_OVER_RUN // SDIO_STA_RXFIFOF
317 #define SDIO_FLAG_TXDAVL SDIO_RINTSTS_TXDATAREQ // SDIO_STA_TXDAVL
318 #define SDIO_FLAG_RXDAVL SDIO_RINTSTS_RXDATAREQ // SDIO_STA_RXDAVL
319 #define SDIO_FLAG_SDIOIT SDIO_RINTSTS_SDIOIT // SDIO_STA_SDIOIT
320 #define SDIO_FLAG_ALL 0xFFFFFFFF
321 #define SDIO_STATIC_FLAGS ((uint32_t)(SDIO_FLAG_TXDAVL |SDIO_FLAG_RXDAVL | SDIO_FLAG_CCRCFAIL | SDIO_FLAG_DCRCFAIL | \
322  SDIO_FLAG_CTIMEOUT | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_TXUNDERR | SDIO_FLAG_RXOVERR | \
323  SDIO_FLAG_CMDREND | SDIO_FLAG_CMDSENT | SDIO_FLAG_DATAEND | SDIO_FLAG_DBCKEND))
324 
332 #define SDIO_CMD_CLK_UPDATE 0xA0202000
333 #define SDIO_CMD_COMPLATE_FLAG 0x80000000
334 
342 #define SDIO_CTRL_RESET 0x00000007
343 
351 #define SDIO_PowerState_OFF 0x01
352 #define SDIO_PowerState_ON 0x02
353 
361 /* Exported macro ------------------------------------------------------------*/
362 /* Exported functions --------------------------------------------------------*/
363 
364 void SDIO_DeInit(SDIO_TypeDef *SDIOx);
365 void SDIO_Init(SDIO_TypeDef *SDIOx, SDIO_InitTypeDef *SDIO_InitStruct);
366 
367 void SDIO_ClockUpdate(SDIO_TypeDef *SDIOx);
368 void SDIO_ControlReset(SDIO_TypeDef *SDIOx);
369 void SDIO_PowerON(SDIO_TypeDef *SDIOx);
370 void SDIO_PowerOFF(SDIO_TypeDef *SDIOx);
371 uint32_t SDIO_GetPower(SDIO_TypeDef *SDIOx);
372 void SDIO_ClockCmd(SDIO_TypeDef *SDIOx, FunctionalState NewState);
373 
374 uint8_t SDIO_GetCommandResponse(SDIO_TypeDef *SDIOx);
375 uint32_t SDIO_GetResponse(SDIO_TypeDef *SDIOx, uint32_t Response);
377 void SDIO_SendCommand(SDIO_TypeDef *SDIOx, SDIO_CmdInitTypeDef *Command);
378 
379 uint32_t SDIO_ReadFIFO(SDIO_TypeDef *SDIOx);
380 void SDIO_WriteFIFO(SDIO_TypeDef *SDIOx, uint32_t *pWriteData);
381 
382 FlagStatus SDIO_GetFlagStatus(SDIO_TypeDef *SDIOx, uint32_t SDIO_FLAG);
383 void SDIO_ClearFlagStatus(SDIO_TypeDef *SDIOx, uint32_t SDIO_FLAG);
384 ITStatus SDIO_GetITStatus(SDIO_TypeDef *SDIOx, uint32_t SDIO_IT);
385 void SDIO_ClearITPendingBit(SDIO_TypeDef *SDIOx, uint32_t SDIO_IT);
386 
387 void SDIO_ConfigBusWidth(SDIO_TypeDef *SDIOx, uint32_t BusWidth);
388 void SDIO_DMACmd(SDIO_TypeDef *SDIOx, FunctionalState NewState);
389 void SDIO_ITConfig(SDIO_TypeDef *SDIOx, uint32_t SDIO_IT, FunctionalState NewState);
390 
399 #ifdef __cplusplus
400 }
401 #endif
402 
403 #endif /* __MG32F157_SDIO_H */
SDIO Command Control structure.
Definition: mg32f157_sdio.h:48
uint32_t SDIO_ReadFIFO(SDIO_TypeDef *SDIOx)
Read data (word) from Rx FIFO in blocking mode (polling)
Definition: mg32f157_sdio.c:120
void SDIO_WriteFIFO(SDIO_TypeDef *SDIOx, uint32_t *pWriteData)
Write data (word) to Tx FIFO in blocking mode (polling)
Definition: mg32f157_sdio.c:134
void SDIO_ConfigBusWidth(SDIO_TypeDef *SDIOx, uint32_t BusWidth)
Configure the width of the SDIO data bus.
Definition: mg32f157_sdio.c:96
uint8_t SDIO_GetCommandResponse(SDIO_TypeDef *SDIOx)
Return the command index of last command for which response received.
Definition: mg32f157_sdio.c:498
void SDIO_ControlReset(SDIO_TypeDef *SDIOx)
Reset the SDIO Controller.
Definition: mg32f157_sdio.c:232
void SDIO_PowerOFF(SDIO_TypeDef *SDIOx)
Set SDIO Power state to OFF.
Definition: mg32f157_sdio.c:160
uint32_t SDIO_GetResponse(SDIO_TypeDef *SDIOx, uint32_t Response)
Return the response received from the card for the last command.
Definition: mg32f157_sdio.c:516
void SDIO_ITConfig(SDIO_TypeDef *SDIOx, uint32_t SDIO_IT, FunctionalState NewState)
Enables or disables the SDIO interrupts.
Definition: mg32f157_sdio.c:298
FlagStatus SDIO_GetFlagStatus(SDIO_TypeDef *SDIOx, uint32_t SDIO_FLAG)
Checks whether the specified SDIO flag is set or not.
Definition: mg32f157_sdio.c:346
ITStatus SDIO_GetITStatus(SDIO_TypeDef *SDIOx, uint32_t SDIO_IT)
Checks whether the specified SDIO interrupt has occurred or not.
Definition: mg32f157_sdio.c:413
void SDIO_ConfigData(SDIO_TypeDef *SDIOx, SDIO_DataInitTypeDef *Data)
Configure the SDIO data path according to the specified parameters in the SDIO_DataInitTypeDef.
Definition: mg32f157_sdio.c:539
void SDIO_ClearFlagStatus(SDIO_TypeDef *SDIOx, uint32_t SDIO_FLAG)
Clears the SDIO's pending flags.
Definition: mg32f157_sdio.c:379
void SDIO_ClockCmd(SDIO_TypeDef *SDIOx, FunctionalState NewState)
Enables or disables the SDIO Clock.
Definition: mg32f157_sdio.c:194
void SDIO_DeInit(SDIO_TypeDef *SDIOx)
Deinitializes the SDIOx peripheral registers to their default reset values.
Definition: mg32f157_sdio.c:40
void SDIO_DMACmd(SDIO_TypeDef *SDIOx, FunctionalState NewState)
Enables or disables the SDIO DMA request.
Definition: mg32f157_sdio.c:251
void SDIO_ClearITPendingBit(SDIO_TypeDef *SDIOx, uint32_t SDIO_IT)
Clears the SDIO's interrupt pending bits.
Definition: mg32f157_sdio.c:448
void SDIO_SendCommand(SDIO_TypeDef *SDIOx, SDIO_CmdInitTypeDef *Command)
Configure the SDIO command path according to the specified parameters in SDIO_CmdInitTypeDef structur...
Definition: mg32f157_sdio.c:464
void SDIO_ClockUpdate(SDIO_TypeDef *SDIOx)
Update the SDIO Clock.
Definition: mg32f157_sdio.c:215
void SDIO_PowerON(SDIO_TypeDef *SDIOx)
Set SDIO Power state to ON.
Definition: mg32f157_sdio.c:147
void SDIO_Init(SDIO_TypeDef *SDIOx, SDIO_InitTypeDef *SDIO_InitStruct)
Initializes the SDIO according to the specified parameters in the SDIO_InitTypeDef and create the ass...
Definition: mg32f157_sdio.c:64
SDIO Init structure definition.
Definition: mg32f157_sdio.h:34
Definition: mg32f157.h:793
uint32_t SDIO_GetPower(SDIO_TypeDef *SDIOx)
Get SDIO Power state.
Definition: mg32f157_sdio.c:177
SDIO Data Control structure.
Definition: mg32f157_sdio.h:65