rt-thread-official/bsp/gd32103c-eval/Libraries/GD32F1xx_standard_peripheral/Include/gd32f10x_sdio.h

370 lines
13 KiB
C

/**
******************************************************************************
* @brief SDIO header file of the firmware library
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __GD32F10X_SDIO_H
#define __GD32F10X_SDIO_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "gd32f10x.h"
/** @addtogroup GD32F10x_Firmware
* @{
*/
/** @addtogroup SDIO
* @{
*/
/** @defgroup SDIO_Exported_Types
* @{
*/
typedef struct {
uint32_t SDIO_ClockEdge; /*!< Configure the SDIO Clock edge on which the bit capture is made.
This parameter can be a value of @ref SDIO_Clock_Edge*/
uint32_t SDIO_ClockBypassState; /*!< Configure the SDIO Clock divider bypass mode
This parameter can be a value of @ref SDIO_Clock_Bypass_State */
uint32_t SDIO_ClockPWRSave; /*!< Configure the SDIO Clock output powersave mode when the bus is idle.
This parameter can be a value of @ref SDIO_Clock_Power_Save */
uint32_t SDIO_BusMode; /*!< Configure the SDIO bus mode.
This parameter can be a value of @ref SDIO_Bus_Mode */
uint32_t SDIO_HWFlowCtrlState; /*!< Configure the SDIO hardware flow control is enabled or disabled.
This parameter can be a value of @ref SDIO_HW_Flow_Control_State */
uint8_t SDIO_ClockDiv; /*!< Configure the clock frequency prescaler of the SDIO controller.
This parameter can be a value between 0x00 and 0xFF. */
} SDIO_InitPara;
typedef struct {
uint32_t SDIO_CMDParameter; /*!< Configure the SDIO command parameter which is sent to
a card as part of a command message. */
uint32_t SDIO_CMDIndex; /*!< Configure the SDIO command index. */
uint32_t SDIO_ResponseType; /*!< Configure the SDIO response type.
This parameter can be a value of @ref SDIO_Response_Type */
uint32_t SDIO_WaitINTState; /*!< Configure whether SDIO wait-for-interrupt request is enabled or disabled.
This parameter can be a value of @ref SDIO_Wait_Interrupt_State */
uint32_t SDIO_CSMState; /*!< Configure SDIO Command state machine (CSM) is enabled or disabled.
This parameter can be a value of @ref SDIO_CSM_State */
} SDIO_CmdInitPara;
typedef struct {
uint32_t SDIO_DataTimeOut; /*!< Configure the data timeout period in card bus clock periods. */
uint32_t SDIO_DataLength; /*!< Configure the number of data bytes to be transferred. */
uint32_t SDIO_DataBlockSize; /*!< Configure the data block size for block transfer.
This parameter can be a value of @ref SDIO_Data_Block_Size */
uint32_t SDIO_TransDirection; /*!< Configure the data transfer direction, read or write.
This parameter can be a value of @ref SDIO_Transfer_Direction */
uint32_t SDIO_TransMode; /*!< Configure whether data transfer is in stream or block mode.
This parameter can be a value of @ref SDIO_Transfer_Mode */
uint32_t SDIO_DSMState; /*!< Configure whether SDIO Data state machine (DSM) is enabled or disabled.
This parameter can be a value of @ref SDIO_DSM_State */
} SDIO_DataInitPara;
/**
* @}
*/
/** @defgroup SDIO_Exported_Constants
* @{
*/
/** @defgroup SDIO_Clock_Edge
* @{
*/
#define SDIO_CLOCKEDGE_RISING ((uint32_t)0x00000000)
#define SDIO_CLOCKEDGE_FALLING ((uint32_t)0x00002000)
/**
* @}
*/
/** @defgroup SDIO_Clock_Bypass_State
* @{
*/
#define SDIO_CLOCKBYPASSSTATE_DISABLE ((uint32_t)0x00000000)
#define SDIO_CLOCKBYPASSSTATE_ENABLE ((uint32_t)0x00000400)
/**
* @}
*/
/** @defgroup SDIO_Clock_PWR_Save
* @{
*/
#define SDIO_CLOCKPWRSAVE_DISABLE ((uint32_t)0x00000000)
#define SDIO_CLOCKPWRSAVE_ENABLE ((uint32_t)0x00000200)
/**
* @}
*/
/** @defgroup SDIO_Bus_Mode
* @{
*/
#define SDIO_BUSMODE_1B ((uint32_t)0x00000000)
#define SDIO_BUSMODE_4B ((uint32_t)0x00000800)
#define SDIO_BUSMODE_8B ((uint32_t)0x00001000)
/**
* @}
*/
/** @defgroup SDIO_HW_Flow_Control_State
* @{
*/
#define SDIO_HWFLOWCTRLSTATE_DISABLE ((uint32_t)0x00000000)
#define SDIO_HWFLOWCTRLSTATE_ENABLE ((uint32_t)0x00004000)
/**
* @}
*/
/** @defgroup SDIO_Power_State
* @{
*/
#define SDIO_PWRSTATE_OFF ((uint32_t)0x00000000)
#define SDIO_PWRSTATE_ON ((uint32_t)0x00000003)
/**
* @}
*/
/** @defgroup SDIO_Interrupt_sources
* @{
*/
#define SDIO_INT_CCRCFAIL ((uint32_t)0x00000001)
#define SDIO_INT_DTCRCFAIL ((uint32_t)0x00000002)
#define SDIO_INT_CMDTMOUT ((uint32_t)0x00000004)
#define SDIO_INT_DTTMOUT ((uint32_t)0x00000008)
#define SDIO_INT_TXURE ((uint32_t)0x00000010)
#define SDIO_INT_RXORE ((uint32_t)0x00000020)
#define SDIO_INT_CMDREND ((uint32_t)0x00000040)
#define SDIO_INT_CMDSENT ((uint32_t)0x00000080)
#define SDIO_INT_DTEND ((uint32_t)0x00000100)
#define SDIO_INT_STBITE ((uint32_t)0x00000200)
#define SDIO_INT_DTBLKEND ((uint32_t)0x00000400)
#define SDIO_INT_CMDRUN ((uint32_t)0x00000800)
#define SDIO_INT_TXRUN ((uint32_t)0x00001000)
#define SDIO_INT_RXRUN ((uint32_t)0x00002000)
#define SDIO_INT_TXFIFOHE ((uint32_t)0x00004000)
#define SDIO_INT_RXFIFOHF ((uint32_t)0x00008000)
#define SDIO_INT_TXFIFOF ((uint32_t)0x00010000)
#define SDIO_INT_RXFIFOF ((uint32_t)0x00020000)
#define SDIO_INT_TXFIFOE ((uint32_t)0x00040000)
#define SDIO_INT_RXFIFOE ((uint32_t)0x00080000)
#define SDIO_INT_TXDTVAL ((uint32_t)0x00100000)
#define SDIO_INT_RXDTVAL ((uint32_t)0x00200000)
#define SDIO_INT_SDIOINT ((uint32_t)0x00400000)
#define SDIO_INT_ATAEND ((uint32_t)0x00800000)
/**
* @}
*/
/** @defgroup SDIO_Response_Type
* @{
*/
#define SDIO_RESPONSETYPE_NO ((uint32_t)0x00000000)
#define SDIO_RESPONSETYPE_SHORT ((uint32_t)0x00000040)
#define SDIO_RESPONSETYPE_LONG ((uint32_t)0x000000C0)
/**
* @}
*/
/** @defgroup SDIO_Wait_Interrupt_State
* @{
*/
#define SDIO_WAITINTSTATE_NO ((uint32_t)0x00000000)
#define SDIO_WAITINTSTATE_INT ((uint32_t)0x00000100)
#define SDIO_WAITINTSTATE_PEND ((uint32_t)0x00000200)
/**
* @}
*/
/** @defgroup SDIO_CSM_State
* @{
*/
#define SDIO_CSMSTATE_DISABLE ((uint32_t)0x00000000)
#define SDIO_CSMSTATE_ENABLE ((uint32_t)0x00000400)
/**
* @}
*/
/** @defgroup SDIO_Response_Registers
* @{
*/
#define SDIO_RESP1 ((uint32_t)0x00000000)
#define SDIO_RESP2 ((uint32_t)0x00000004)
#define SDIO_RESP3 ((uint32_t)0x00000008)
#define SDIO_RESP4 ((uint32_t)0x0000000C)
/**
* @}
*/
/** @defgroup SDIO_Data_Block_Size
* @{
*/
#define SDIO_DATABLOCKSIZE_1B ((uint32_t)0x00000000)
#define SDIO_DATABLOCKSIZE_2B ((uint32_t)0x00000010)
#define SDIO_DATABLOCKSIZE_4B ((uint32_t)0x00000020)
#define SDIO_DATABLOCKSIZE_8B ((uint32_t)0x00000030)
#define SDIO_DATABLOCKSIZE_16B ((uint32_t)0x00000040)
#define SDIO_DATABLOCKSIZE_32B ((uint32_t)0x00000050)
#define SDIO_DATABLOCKSIZE_64B ((uint32_t)0x00000060)
#define SDIO_DATABLOCKSIZE_128B ((uint32_t)0x00000070)
#define SDIO_DATABLOCKSIZE_256B ((uint32_t)0x00000080)
#define SDIO_DATABLOCKSIZE_512B ((uint32_t)0x00000090)
#define SDIO_DATABLOCKSIZE_1024B ((uint32_t)0x000000A0)
#define SDIO_DATABLOCKSIZE_2048B ((uint32_t)0x000000B0)
#define SDIO_DATABLOCKSIZE_4096B ((uint32_t)0x000000C0)
#define SDIO_DATABLOCKSIZE_8192B ((uint32_t)0x000000D0)
#define SDIO_DATABLOCKSIZE_16384B ((uint32_t)0x000000E0)
/**
* @}
*/
/** @defgroup SDIO_Transfer_Direction
* @{
*/
#define SDIO_TRANSDIRECTION_TOCARD ((uint32_t)0x00000000)
#define SDIO_TRANSDIRECTION_TOSDIO ((uint32_t)0x00000002)
/**
* @}
*/
/** @defgroup SDIO_Transfer_Mode
* @{
*/
#define SDIO_TRANSMODE_BLOCK ((uint32_t)0x00000000)
#define SDIO_TRANSMODE_STREAM ((uint32_t)0x00000004)
/**
* @}
*/
/** @defgroup SDIO_DSM_State
* @{
*/
#define SDIO_DSMSTATE_DISABLE ((uint32_t)0x00000000)
#define SDIO_DSMSTATE_ENABLE ((uint32_t)0x00000001)
/**
* @}
*/
/** @defgroup SDIO_Flag
* @{
*/
#define SDIO_FLAG_CCRCFAIL ((uint32_t)0x00000001)
#define SDIO_FLAG_DTCRCFAIL ((uint32_t)0x00000002)
#define SDIO_FLAG_CMDTMOUT ((uint32_t)0x00000004)
#define SDIO_FLAG_DTTMOUT ((uint32_t)0x00000008)
#define SDIO_FLAG_TXURE ((uint32_t)0x00000010)
#define SDIO_FLAG_RXORE ((uint32_t)0x00000020)
#define SDIO_FLAG_CMDREND ((uint32_t)0x00000040)
#define SDIO_FLAG_CMDSENT ((uint32_t)0x00000080)
#define SDIO_FLAG_DTEND ((uint32_t)0x00000100)
#define SDIO_FLAG_STBITE ((uint32_t)0x00000200)
#define SDIO_FLAG_DTBLKEND ((uint32_t)0x00000400)
#define SDIO_FLAG_CMDRUN ((uint32_t)0x00000800)
#define SDIO_FLAG_TXRUN ((uint32_t)0x00001000)
#define SDIO_FLAG_RXRUN ((uint32_t)0x00002000)
#define SDIO_FLAG_TXFIFOHE ((uint32_t)0x00004000)
#define SDIO_FLAG_RXFIFOHF ((uint32_t)0x00008000)
#define SDIO_FLAG_TXFIFOF ((uint32_t)0x00010000)
#define SDIO_FLAG_RXFIFOF ((uint32_t)0x00020000)
#define SDIO_FLAG_TXFIFOE ((uint32_t)0x00040000)
#define SDIO_FLAG_RXFIFOE ((uint32_t)0x00080000)
#define SDIO_FLAG_TXDTVAL ((uint32_t)0x00100000)
#define SDIO_FLAG_RXDTVAL ((uint32_t)0x00200000)
#define SDIO_FLAG_SDIOINT ((uint32_t)0x00400000)
#define SDIO_FLAG_ATAEND ((uint32_t)0x00800000)
/**
* @}
*/
/** @defgroup SDIO_Read_Wait_Mode
* @{
*/
#define SDIO_READWAITMODE_CLK ((uint32_t)0x00000001)
#define SDIO_READWAITMODE_DAT2 ((uint32_t)0x00000000)
/**
* @}
*/
/**
* @}
*/
/** @defgroup SDIO_Exported_Functions
* @{
*/
void SDIO_DeInit(void);
void SDIO_Init(SDIO_InitPara *SDIO_InitParaStruct);
void SDIO_ParaInit(SDIO_InitPara *SDIO_InitParaStruct);
void SDIO_Clock_Enable(TypeState NewState);
void SDIO_SetPWRState(uint32_t SDIO_PWRState);
uint32_t SDIO_GetPWRState(void);
void SDIO_INTConfig(uint32_t SDIO_INT, TypeState NewState);
void SDIO_DMA_Enable(TypeState NewState);
void SDIO_SendCMD(SDIO_CmdInitPara *SDIO_CmdInitParaStruct);
void SDIO_CMDParaInit(SDIO_CmdInitPara *SDIO_CmdInitParaStruct);
uint8_t SDIO_GetCMDResponse(void);
uint32_t SDIO_GetResponse(uint32_t SDIO_RESP);
void SDIO_DataConfig(SDIO_DataInitPara *SDIO_DataInitParaStruct);
void SDIO_DataParaInit(SDIO_DataInitPara *SDIO_DataInitParaStruct);
uint32_t SDIO_GetDataCount(void);
uint32_t SDIO_ReadData(void);
void SDIO_WriteData(uint32_t Data);
uint32_t SDIO_GetFIFOCount(void);
void SDIO_StartSDIOReadWait(TypeState NewState);
void SDIO_StopSDIOReadWait(TypeState NewState);
void SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode);
void SDIO_SetSDIOOperation(TypeState NewState);
void SDIO_SendSDIOSuspend_Enable(TypeState NewState);
void SDIO_CMDCompletion_Enable(TypeState NewState);
void SDIO_CEATAInt_Enable(TypeState NewState);
void SDIO_SendCEATA_Enable(TypeState NewState);
TypeState SDIO_GetBitState(uint32_t SDIO_FLAG);
void SDIO_ClearBitState(uint32_t SDIO_FLAG);
TypeState SDIO_GetIntBitState(uint32_t SDIO_INT);
void SDIO_ClearIntBitState(uint32_t SDIO_INT);
#ifdef __cplusplus
}
#endif
#endif /* __GD32F10X_SDIO_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/