STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
stm32f7xx_ll_sdmmc.h
Go to the documentation of this file.
1 
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F7xx_LL_SDMMC_H
40 #define __STM32F7xx_LL_SDMMC_H
41 
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45 
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32f7xx_hal_def.h"
48 
57 /* Exported types ------------------------------------------------------------*/
65 typedef struct
66 {
67  uint32_t ClockEdge;
70  uint32_t ClockBypass;
74  uint32_t ClockPowerSave;
78  uint32_t BusWide;
84  uint32_t ClockDiv;
88 
89 
93 typedef struct
94 {
95  uint32_t Argument;
100  uint32_t CmdIndex;
103  uint32_t Response;
106  uint32_t WaitForInterrupt;
110  uint32_t CPSM;
114 
115 
119 typedef struct
120 {
121  uint32_t DataTimeOut;
123  uint32_t DataLength;
125  uint32_t DataBlockSize;
128  uint32_t TransferDir;
132  uint32_t TransferMode;
135  uint32_t DPSM;
139 
144 /* Exported constants --------------------------------------------------------*/
152 #define SDMMC_CLOCK_EDGE_RISING ((uint32_t)0x00000000U)
153 #define SDMMC_CLOCK_EDGE_FALLING SDMMC_CLKCR_NEGEDGE
154 
155 #define IS_SDMMC_CLOCK_EDGE(EDGE) (((EDGE) == SDMMC_CLOCK_EDGE_RISING) || \
156  ((EDGE) == SDMMC_CLOCK_EDGE_FALLING))
157 
164 #define SDMMC_CLOCK_BYPASS_DISABLE ((uint32_t)0x00000000U)
165 #define SDMMC_CLOCK_BYPASS_ENABLE SDMMC_CLKCR_BYPASS
166 
167 #define IS_SDMMC_CLOCK_BYPASS(BYPASS) (((BYPASS) == SDMMC_CLOCK_BYPASS_DISABLE) || \
168  ((BYPASS) == SDMMC_CLOCK_BYPASS_ENABLE))
169 
176 #define SDMMC_CLOCK_POWER_SAVE_DISABLE ((uint32_t)0x00000000U)
177 #define SDMMC_CLOCK_POWER_SAVE_ENABLE SDMMC_CLKCR_PWRSAV
178 
179 #define IS_SDMMC_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDMMC_CLOCK_POWER_SAVE_DISABLE) || \
180  ((SAVE) == SDMMC_CLOCK_POWER_SAVE_ENABLE))
181 
188 #define SDMMC_BUS_WIDE_1B ((uint32_t)0x00000000U)
189 #define SDMMC_BUS_WIDE_4B SDMMC_CLKCR_WIDBUS_0
190 #define SDMMC_BUS_WIDE_8B SDMMC_CLKCR_WIDBUS_1
191 
192 #define IS_SDMMC_BUS_WIDE(WIDE) (((WIDE) == SDMMC_BUS_WIDE_1B) || \
193  ((WIDE) == SDMMC_BUS_WIDE_4B) || \
194  ((WIDE) == SDMMC_BUS_WIDE_8B))
195 
202 #define SDMMC_HARDWARE_FLOW_CONTROL_DISABLE ((uint32_t)0x00000000U)
203 #define SDMMC_HARDWARE_FLOW_CONTROL_ENABLE SDMMC_CLKCR_HWFC_EN
204 
205 #define IS_SDMMC_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDMMC_HARDWARE_FLOW_CONTROL_DISABLE) || \
206  ((CONTROL) == SDMMC_HARDWARE_FLOW_CONTROL_ENABLE))
207 
214 #define IS_SDMMC_CLKDIV(DIV) ((DIV) <= 0xFF)
215 
222 #define IS_SDMMC_CMD_INDEX(INDEX) ((INDEX) < 0x40)
223 
230 #define SDMMC_RESPONSE_NO ((uint32_t)0x00000000U)
231 #define SDMMC_RESPONSE_SHORT SDMMC_CMD_WAITRESP_0
232 #define SDMMC_RESPONSE_LONG SDMMC_CMD_WAITRESP
233 
234 #define IS_SDMMC_RESPONSE(RESPONSE) (((RESPONSE) == SDMMC_RESPONSE_NO) || \
235  ((RESPONSE) == SDMMC_RESPONSE_SHORT) || \
236  ((RESPONSE) == SDMMC_RESPONSE_LONG))
237 
244 #define SDMMC_WAIT_NO ((uint32_t)0x00000000U)
245 #define SDMMC_WAIT_IT SDMMC_CMD_WAITINT
246 #define SDMMC_WAIT_PEND SDMMC_CMD_WAITPEND
247 
248 #define IS_SDMMC_WAIT(WAIT) (((WAIT) == SDMMC_WAIT_NO) || \
249  ((WAIT) == SDMMC_WAIT_IT) || \
250  ((WAIT) == SDMMC_WAIT_PEND))
251 
258 #define SDMMC_CPSM_DISABLE ((uint32_t)0x00000000U)
259 #define SDMMC_CPSM_ENABLE SDMMC_CMD_CPSMEN
260 
261 #define IS_SDMMC_CPSM(CPSM) (((CPSM) == SDMMC_CPSM_DISABLE) || \
262  ((CPSM) == SDMMC_CPSM_ENABLE))
263 
270 #define SDMMC_RESP1 ((uint32_t)0x00000000U)
271 #define SDMMC_RESP2 ((uint32_t)0x00000004U)
272 #define SDMMC_RESP3 ((uint32_t)0x00000008U)
273 #define SDMMC_RESP4 ((uint32_t)0x0000000C)
274 
275 #define IS_SDMMC_RESP(RESP) (((RESP) == SDMMC_RESP1) || \
276  ((RESP) == SDMMC_RESP2) || \
277  ((RESP) == SDMMC_RESP3) || \
278  ((RESP) == SDMMC_RESP4))
279 
286 #define IS_SDMMC_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFF)
287 
294 #define SDMMC_DATABLOCK_SIZE_1B ((uint32_t)0x00000000U)
295 #define SDMMC_DATABLOCK_SIZE_2B SDMMC_DCTRL_DBLOCKSIZE_0
296 #define SDMMC_DATABLOCK_SIZE_4B SDMMC_DCTRL_DBLOCKSIZE_1
297 #define SDMMC_DATABLOCK_SIZE_8B (SDMMC_DCTRL_DBLOCKSIZE_0|SDMMC_DCTRL_DBLOCKSIZE_1)
298 #define SDMMC_DATABLOCK_SIZE_16B SDMMC_DCTRL_DBLOCKSIZE_2
299 #define SDMMC_DATABLOCK_SIZE_32B (SDMMC_DCTRL_DBLOCKSIZE_0|SDMMC_DCTRL_DBLOCKSIZE_2)
300 #define SDMMC_DATABLOCK_SIZE_64B (SDMMC_DCTRL_DBLOCKSIZE_1|SDMMC_DCTRL_DBLOCKSIZE_2)
301 #define SDMMC_DATABLOCK_SIZE_128B (SDMMC_DCTRL_DBLOCKSIZE_0|SDMMC_DCTRL_DBLOCKSIZE_1|SDMMC_DCTRL_DBLOCKSIZE_2)
302 #define SDMMC_DATABLOCK_SIZE_256B SDMMC_DCTRL_DBLOCKSIZE_3
303 #define SDMMC_DATABLOCK_SIZE_512B (SDMMC_DCTRL_DBLOCKSIZE_0|SDMMC_DCTRL_DBLOCKSIZE_3)
304 #define SDMMC_DATABLOCK_SIZE_1024B (SDMMC_DCTRL_DBLOCKSIZE_1|SDMMC_DCTRL_DBLOCKSIZE_3)
305 #define SDMMC_DATABLOCK_SIZE_2048B (SDMMC_DCTRL_DBLOCKSIZE_0|SDMMC_DCTRL_DBLOCKSIZE_1|SDMMC_DCTRL_DBLOCKSIZE_3)
306 #define SDMMC_DATABLOCK_SIZE_4096B (SDMMC_DCTRL_DBLOCKSIZE_2|SDMMC_DCTRL_DBLOCKSIZE_3)
307 #define SDMMC_DATABLOCK_SIZE_8192B (SDMMC_DCTRL_DBLOCKSIZE_0|SDMMC_DCTRL_DBLOCKSIZE_2|SDMMC_DCTRL_DBLOCKSIZE_3)
308 #define SDMMC_DATABLOCK_SIZE_16384B (SDMMC_DCTRL_DBLOCKSIZE_1|SDMMC_DCTRL_DBLOCKSIZE_2|SDMMC_DCTRL_DBLOCKSIZE_3)
309 
310 #define IS_SDMMC_BLOCK_SIZE(SIZE) (((SIZE) == SDMMC_DATABLOCK_SIZE_1B) || \
311  ((SIZE) == SDMMC_DATABLOCK_SIZE_2B) || \
312  ((SIZE) == SDMMC_DATABLOCK_SIZE_4B) || \
313  ((SIZE) == SDMMC_DATABLOCK_SIZE_8B) || \
314  ((SIZE) == SDMMC_DATABLOCK_SIZE_16B) || \
315  ((SIZE) == SDMMC_DATABLOCK_SIZE_32B) || \
316  ((SIZE) == SDMMC_DATABLOCK_SIZE_64B) || \
317  ((SIZE) == SDMMC_DATABLOCK_SIZE_128B) || \
318  ((SIZE) == SDMMC_DATABLOCK_SIZE_256B) || \
319  ((SIZE) == SDMMC_DATABLOCK_SIZE_512B) || \
320  ((SIZE) == SDMMC_DATABLOCK_SIZE_1024B) || \
321  ((SIZE) == SDMMC_DATABLOCK_SIZE_2048B) || \
322  ((SIZE) == SDMMC_DATABLOCK_SIZE_4096B) || \
323  ((SIZE) == SDMMC_DATABLOCK_SIZE_8192B) || \
324  ((SIZE) == SDMMC_DATABLOCK_SIZE_16384B))
325 
332 #define SDMMC_TRANSFER_DIR_TO_CARD ((uint32_t)0x00000000U)
333 #define SDMMC_TRANSFER_DIR_TO_SDMMC SDMMC_DCTRL_DTDIR
334 
335 #define IS_SDMMC_TRANSFER_DIR(DIR) (((DIR) == SDMMC_TRANSFER_DIR_TO_CARD) || \
336  ((DIR) == SDMMC_TRANSFER_DIR_TO_SDMMC))
337 
344 #define SDMMC_TRANSFER_MODE_BLOCK ((uint32_t)0x00000000U)
345 #define SDMMC_TRANSFER_MODE_STREAM SDMMC_DCTRL_DTMODE
346 
347 #define IS_SDMMC_TRANSFER_MODE(MODE) (((MODE) == SDMMC_TRANSFER_MODE_BLOCK) || \
348  ((MODE) == SDMMC_TRANSFER_MODE_STREAM))
349 
356 #define SDMMC_DPSM_DISABLE ((uint32_t)0x00000000U)
357 #define SDMMC_DPSM_ENABLE SDMMC_DCTRL_DTEN
358 
359 #define IS_SDMMC_DPSM(DPSM) (((DPSM) == SDMMC_DPSM_DISABLE) ||\
360  ((DPSM) == SDMMC_DPSM_ENABLE))
361 
368 #define SDMMC_READ_WAIT_MODE_DATA2 ((uint32_t)0x00000000U)
369 #define SDMMC_READ_WAIT_MODE_CLK (SDMMC_DCTRL_RWMOD)
370 
371 #define IS_SDMMC_READWAIT_MODE(MODE) (((MODE) == SDMMC_READ_WAIT_MODE_CLK) || \
372  ((MODE) == SDMMC_READ_WAIT_MODE_DATA2))
373 
380 #define SDMMC_IT_CCRCFAIL SDMMC_STA_CCRCFAIL
381 #define SDMMC_IT_DCRCFAIL SDMMC_STA_DCRCFAIL
382 #define SDMMC_IT_CTIMEOUT SDMMC_STA_CTIMEOUT
383 #define SDMMC_IT_DTIMEOUT SDMMC_STA_DTIMEOUT
384 #define SDMMC_IT_TXUNDERR SDMMC_STA_TXUNDERR
385 #define SDMMC_IT_RXOVERR SDMMC_STA_RXOVERR
386 #define SDMMC_IT_CMDREND SDMMC_STA_CMDREND
387 #define SDMMC_IT_CMDSENT SDMMC_STA_CMDSENT
388 #define SDMMC_IT_DATAEND SDMMC_STA_DATAEND
389 #define SDMMC_IT_DBCKEND SDMMC_STA_DBCKEND
390 #define SDMMC_IT_CMDACT SDMMC_STA_CMDACT
391 #define SDMMC_IT_TXACT SDMMC_STA_TXACT
392 #define SDMMC_IT_RXACT SDMMC_STA_RXACT
393 #define SDMMC_IT_TXFIFOHE SDMMC_STA_TXFIFOHE
394 #define SDMMC_IT_RXFIFOHF SDMMC_STA_RXFIFOHF
395 #define SDMMC_IT_TXFIFOF SDMMC_STA_TXFIFOF
396 #define SDMMC_IT_RXFIFOF SDMMC_STA_RXFIFOF
397 #define SDMMC_IT_TXFIFOE SDMMC_STA_TXFIFOE
398 #define SDMMC_IT_RXFIFOE SDMMC_STA_RXFIFOE
399 #define SDMMC_IT_TXDAVL SDMMC_STA_TXDAVL
400 #define SDMMC_IT_RXDAVL SDMMC_STA_RXDAVL
401 #define SDMMC_IT_SDIOIT SDMMC_STA_SDIOIT
402 
409 #define SDMMC_FLAG_CCRCFAIL SDMMC_STA_CCRCFAIL
410 #define SDMMC_FLAG_DCRCFAIL SDMMC_STA_DCRCFAIL
411 #define SDMMC_FLAG_CTIMEOUT SDMMC_STA_CTIMEOUT
412 #define SDMMC_FLAG_DTIMEOUT SDMMC_STA_DTIMEOUT
413 #define SDMMC_FLAG_TXUNDERR SDMMC_STA_TXUNDERR
414 #define SDMMC_FLAG_RXOVERR SDMMC_STA_RXOVERR
415 #define SDMMC_FLAG_CMDREND SDMMC_STA_CMDREND
416 #define SDMMC_FLAG_CMDSENT SDMMC_STA_CMDSENT
417 #define SDMMC_FLAG_DATAEND SDMMC_STA_DATAEND
418 #define SDMMC_FLAG_DBCKEND SDMMC_STA_DBCKEND
419 #define SDMMC_FLAG_CMDACT SDMMC_STA_CMDACT
420 #define SDMMC_FLAG_TXACT SDMMC_STA_TXACT
421 #define SDMMC_FLAG_RXACT SDMMC_STA_RXACT
422 #define SDMMC_FLAG_TXFIFOHE SDMMC_STA_TXFIFOHE
423 #define SDMMC_FLAG_RXFIFOHF SDMMC_STA_RXFIFOHF
424 #define SDMMC_FLAG_TXFIFOF SDMMC_STA_TXFIFOF
425 #define SDMMC_FLAG_RXFIFOF SDMMC_STA_RXFIFOF
426 #define SDMMC_FLAG_TXFIFOE SDMMC_STA_TXFIFOE
427 #define SDMMC_FLAG_RXFIFOE SDMMC_STA_RXFIFOE
428 #define SDMMC_FLAG_TXDAVL SDMMC_STA_TXDAVL
429 #define SDMMC_FLAG_RXDAVL SDMMC_STA_RXDAVL
430 #define SDMMC_FLAG_SDIOIT SDMMC_STA_SDIOIT
431 
439 /* Exported macro ------------------------------------------------------------*/
448 /* ---------------------- SDMMC registers bit mask --------------------------- */
449 /* --- CLKCR Register ---*/
450 /* CLKCR register clear mask */
451 #define CLKCR_CLEAR_MASK ((uint32_t)(SDMMC_CLKCR_CLKDIV | SDMMC_CLKCR_PWRSAV |\
452  SDMMC_CLKCR_BYPASS | SDMMC_CLKCR_WIDBUS |\
453  SDMMC_CLKCR_NEGEDGE | SDMMC_CLKCR_HWFC_EN))
454 
455 /* --- DCTRL Register ---*/
456 /* SDMMC DCTRL Clear Mask */
457 #define DCTRL_CLEAR_MASK ((uint32_t)(SDMMC_DCTRL_DTEN | SDMMC_DCTRL_DTDIR |\
458  SDMMC_DCTRL_DTMODE | SDMMC_DCTRL_DBLOCKSIZE))
459 
460 /* --- CMD Register ---*/
461 /* CMD Register clear mask */
462 #define CMD_CLEAR_MASK ((uint32_t)(SDMMC_CMD_CMDINDEX | SDMMC_CMD_WAITRESP |\
463  SDMMC_CMD_WAITINT | SDMMC_CMD_WAITPEND |\
464  SDMMC_CMD_CPSMEN | SDMMC_CMD_SDIOSUSPEND))
465 
466 /* SDMMC Initialization Frequency (400KHz max) */
467 #define SDMMC_INIT_CLK_DIV ((uint8_t)0x76)
468 
469 /* SDMMC Data Transfer Frequency (25MHz max) */
470 #define SDMMC_TRANSFER_CLK_DIV ((uint8_t)0x0)
471 
486 #define __SDMMC_ENABLE(__INSTANCE__) ((__INSTANCE__)->CLKCR |= SDMMC_CLKCR_CLKEN)
487 
493 #define __SDMMC_DISABLE(__INSTANCE__) ((__INSTANCE__)->CLKCR &= ~SDMMC_CLKCR_CLKEN)
494 
500 #define __SDMMC_DMA_ENABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL |= SDMMC_DCTRL_DMAEN)
501 
506 #define __SDMMC_DMA_DISABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL &= ~SDMMC_DCTRL_DMAEN)
507 
537 #define __SDMMC_ENABLE_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->MASK |= (__INTERRUPT__))
538 
568 #define __SDMMC_DISABLE_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->MASK &= ~(__INTERRUPT__))
569 
599 #define __SDMMC_GET_FLAG(__INSTANCE__, __FLAG__) (((__INSTANCE__)->STA &(__FLAG__)) != RESET)
600 
601 
620 #define __SDMMC_CLEAR_FLAG(__INSTANCE__, __FLAG__) ((__INSTANCE__)->ICR = (__FLAG__))
621 
651 #define __SDMMC_GET_IT (__INSTANCE__, __INTERRUPT__) (((__INSTANCE__)->STA &(__INTERRUPT__)) == (__INTERRUPT__))
652 
670 #define __SDMMC_CLEAR_IT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->ICR = (__INTERRUPT__))
671 
677 #define __SDMMC_START_READWAIT_ENABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL |= SDMMC_DCTRL_RWSTART)
678 
684 #define __SDMMC_START_READWAIT_DISABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL &= ~SDMMC_DCTRL_RWSTART)
685 
691 #define __SDMMC_STOP_READWAIT_ENABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL |= SDMMC_DCTRL_RWSTOP)
692 
698 #define __SDMMC_STOP_READWAIT_DISABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL &= ~SDMMC_DCTRL_RWSTOP)
699 
705 #define __SDMMC_OPERATION_ENABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL |= SDMMC_DCTRL_SDIOEN)
706 
712 #define __SDMMC_OPERATION_DISABLE(__INSTANCE__) ((__INSTANCE__)->DCTRL &= ~SDMMC_DCTRL_SDIOEN)
713 
719 #define __SDMMC_SUSPEND_CMD_ENABLE(__INSTANCE__) ((__INSTANCE__)->CMD |= SDMMC_CMD_SDIOSUSPEND)
720 
726 #define __SDMMC_SUSPEND_CMD_DISABLE(__INSTANCE__) ((__INSTANCE__)->CMD &= ~SDMMC_CMD_SDIOSUSPEND)
727 
736 /* Exported functions --------------------------------------------------------*/
741 /* Initialization/de-initialization functions **********************************/
750 /* I/O operation functions *****************************************************/
754 /* Blocking mode: Polling */
755 uint32_t SDMMC_ReadFIFO(SDMMC_TypeDef *SDMMCx);
756 HAL_StatusTypeDef SDMMC_WriteFIFO(SDMMC_TypeDef *SDMMCx, uint32_t *pWriteData);
761 /* Peripheral Control functions ************************************************/
767 uint32_t SDMMC_GetPowerState(SDMMC_TypeDef *SDMMCx);
768 
769 /* Command path state machine (CPSM) management functions */
771 uint8_t SDMMC_GetCommandResponse(SDMMC_TypeDef *SDMMCx);
772 uint32_t SDMMC_GetResponse(SDMMC_TypeDef *SDMMCx, uint32_t Response);
773 
774 /* Data path state machine (DPSM) management functions */
776 uint32_t SDMMC_GetDataCounter(SDMMC_TypeDef *SDMMCx);
777 uint32_t SDMMC_GetFIFOCount(SDMMC_TypeDef *SDMMCx);
778 
779 /* SDMMC Cards mode management functions */
780 HAL_StatusTypeDef SDMMC_SetSDMMCReadWaitMode(SDMMC_TypeDef *SDMMCx, uint32_t SDMMC_ReadWaitMode);
781 
798 #ifdef __cplusplus
799 }
800 #endif
801 
802 #endif /* __STM32F7xx_LL_SDMMC_H */
803 
804 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
uint32_t SDMMC_GetDataCounter(SDMMC_TypeDef *SDMMCx)
HAL_StatusTypeDef SDMMC_DataConfig(SDMMC_TypeDef *SDMMCx, SDMMC_DataInitTypeDef *Data)
SDMMC Configuration Structure definition.
HAL_StatusTypeDef SDMMC_SetSDMMCReadWaitMode(SDMMC_TypeDef *SDMMCx, uint32_t SDMMC_ReadWaitMode)
HAL_StatusTypeDef SDMMC_SendCommand(SDMMC_TypeDef *SDMMCx, SDMMC_CmdInitTypeDef *Command)
HAL_StatusTypeDef SDMMC_WriteFIFO(SDMMC_TypeDef *SDMMCx, uint32_t *pWriteData)
HAL_StatusTypeDef SDMMC_PowerState_OFF(SDMMC_TypeDef *SDMMCx)
uint8_t SDMMC_GetCommandResponse(SDMMC_TypeDef *SDMMCx)
HAL_StatusTypeDef SDMMC_Init(SDMMC_TypeDef *SDMMCx, SDMMC_InitTypeDef Init)
uint32_t SDMMC_GetPowerState(SDMMC_TypeDef *SDMMCx)
uint32_t SDMMC_GetFIFOCount(SDMMC_TypeDef *SDMMCx)
uint32_t SDMMC_GetResponse(SDMMC_TypeDef *SDMMCx, uint32_t Response)
uint32_t SDMMC_ReadFIFO(SDMMC_TypeDef *SDMMCx)
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_StatusTypeDef SDMMC_PowerState_ON(SDMMC_TypeDef *SDMMCx)
SDMMC Command Control structure.
SD host Interface.
Definition: stm32f745xx.h:813
HAL_StatusTypeDef
HAL Status structures definition.
SDMMC Data Control structure.