123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636 |
- /**
- ******************************************************************************
- * @brief SDIO functions of the firmware library.
- ******************************************************************************
- */
- #ifdef GD32F10X_HD
- /* Includes ------------------------------------------------------------------*/
- #include "gd32f10x_sdio.h"
- #include "gd32f10x_rcc.h"
- /** @addtogroup GD32F10x_Firmware
- * @{
- */
- /** @defgroup SDIO
- * @brief SDIO driver modules
- * @{
- */
- /** @defgroup SDIO_Private_Defines
- * @{
- */
- /* SDIO registers bit mask */
- /* CLKCTLR register mask */
- #define CLKCTLR_CLEAR_MASK ((uint32_t)0xFFFF8100)
- /* POWER_PWRSTATE mask */
- #define POWER_PWRSTATE_MASK ((uint32_t)0xFFFFFFFC)
- /* DTCTLR register mask */
- #define DTCTLR_CLEAR_MASK ((uint32_t)0xFFFFFF08)
- /* CMD register mask */
- #define CMD_CLEAR_MASK ((uint32_t)0xFFFFF800)
- /* SDIO RESP Registers Address */
- #define SDIO_RESP_ADDR ((uint32_t)(SDIO_BASE + 0x14))
- /**
- * @}
- */
- /** @defgroup SDIO_Private_Functions
- * @{
- */
- /**
- * @brief Deinitialize the SDIO .
- * @param None
- * @retval None
- */
- void SDIO_DeInit(void)
- {
- SDIO->POWER = 0x00000000;
- SDIO->CLKCTLR = 0x00000000;
- SDIO->PARA = 0x00000000;
- SDIO->CMD = 0x00000000;
- SDIO->DTTR = 0x00000000;
- SDIO->DTLEN = 0x00000000;
- SDIO->DTCTLR = 0x00000000;
- SDIO->ICR = 0x00C007FF;
- SDIO->IER = 0x00000000;
- }
- /**
- * @brief Initialize the SDIO .
- * @param SDIO_InitParaStruct : pointer to a SDIO_InitPara structure .
- * @retval None
- */
- void SDIO_Init(SDIO_InitPara *SDIO_InitParaStruct)
- {
- uint32_t temp = 0;
- /* SDIO CLKCTLR Configuration */
- /* Get the SDIO CLKCTLR value */
- temp = SDIO->CLKCTLR;
- /* Clear CLKCTLR register */
- temp &= CLKCTLR_CLEAR_MASK;
- /* Configure the SDIO_ClockDiv value */
- /* Configure the SDIO_ClockPWRSave value */
- /* Configure the SDIO_ClockBypassState value */
- /* Configure the SDIO_BusMode value */
- /* Configure the SDIO_ClockEdge value */
- /* Configure the SDIO_HWFlowCtrlState value */
- temp |= (SDIO_InitParaStruct->SDIO_ClockDiv | SDIO_InitParaStruct->SDIO_ClockPWRSave |
- SDIO_InitParaStruct->SDIO_ClockBypassState | SDIO_InitParaStruct->SDIO_BusMode |
- SDIO_InitParaStruct->SDIO_ClockEdge | SDIO_InitParaStruct->SDIO_HWFlowCtrlState);
- /* Update the SDIO CLKCTLR */
- SDIO->CLKCTLR = temp;
- }
- /**
- * @brief Fill each SDIO_InitParaStruct Struct member with a default value.
- * @param SDIO_InitParaStruct: pointer to an SDIO_InitPara structure.
- * @retval None
- */
- void SDIO_ParaInit(SDIO_InitPara *SDIO_InitParaStruct)
- {
- /* Fill the default value */
- SDIO_InitParaStruct->SDIO_ClockDiv = 0x00;
- SDIO_InitParaStruct->SDIO_ClockEdge = SDIO_CLOCKEDGE_RISING;
- SDIO_InitParaStruct->SDIO_ClockBypassState = SDIO_CLOCKBYPASSSTATE_DISABLE;
- SDIO_InitParaStruct->SDIO_ClockPWRSave = SDIO_CLOCKPWRSAVE_DISABLE;
- SDIO_InitParaStruct->SDIO_BusMode = SDIO_BUSMODE_1B;
- SDIO_InitParaStruct->SDIO_HWFlowCtrlState = SDIO_HWFLOWCTRLSTATE_DISABLE;
- }
- /**
- * @brief ENABLE or DISABLE the SDIO Clock.
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_Clock_Enable(TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- SDIO->CLKCTLR |= SDIO_CLKCTLR_CKEN;
- } else {
- SDIO->CLKCTLR &= (uint16_t)~(SDIO_CLKCTLR_CKEN);
- }
- }
- /**
- * @brief Configure the power state of SDIO.
- * @param SDIO_PwrState: new Power state for SDIO.
- * This value will be :
- * @arg SDIO_PWRSTATE_ON
- * @arg SDIO_PWRSTATE_OFF
- * @retval None
- */
- void SDIO_SetPWRState(uint32_t SDIO_PwrState)
- {
- /* Update the SDIO POWER */
- SDIO->POWER |= SDIO_PwrState;
- }
- /**
- * @brief Get the power state of SDIO.
- * @param None
- * @retval Power state for SDIO.
- * This value will be :
- * - 0x00: Power OFF
- * - 0x02: Power UP
- * - 0x03: Power ON
- */
- uint32_t SDIO_GetPWRState(void)
- {
- return (SDIO->POWER & (~POWER_PWRSTATE_MASK));
- }
- /**
- * @brief Configure interrupts enables.
- * @param SDIO_INT: The interrupts sources to configure.
- * This value will be :
- * @arg SDIO_INT_CCRCFAIL: Command response CRC failed interrupt
- * @arg SDIO_INT_DTCRCFAIL: Data CRC failed interrupt
- * @arg SDIO_INT_CMDTMOUT: Command response timeout interrupt
- * @arg SDIO_INT_DTTMOUT: Data timeout interrupt
- * @arg SDIO_INT_TXURE: Transmit FIFO underrun error interrupt
- * @arg SDIO_INT_RXORE: Received FIFO overrun error interrupt
- * @arg SDIO_INT_CMDREND: Command response received (CRC check passed) interrupt
- * @arg SDIO_INT_CMDSENT: Command sent (no response required) interrupt
- * @arg SDIO_INT_DTEND: Data end (data counter, SDIDTCNT, is zero) interrupt
- * @arg SDIO_INT_STBITE: Start bit not detected on all data signals in wide bus mode interrupt
- * @arg SDIO_INT_DTBLKEND: Data block sent/received (CRC check passed) interrupt
- * @arg SDIO_INT_CMDRUN: Command transfer in progress interrupt
- * @arg SDIO_INT_TXRUN: Data transmit in progress interrupt
- * @arg SDIO_INT_RXRUN: Data receive in progress interrupt
- * @arg SDIO_INT_TXFIFOHE: Transmit FIFO Half Empty interrupt
- * @arg SDIO_INT_RXFIFOHF: Receive FIFO Half Full interrupt
- * @arg SDIO_INT_TXFIFOF: Transmit FIFO full interrupt
- * @arg SDIO_INT_RXFIFOF: Receive FIFO full interrupt
- * @arg SDIO_INT_TXFIFOE: Transmit FIFO empty interrupt
- * @arg SDIO_INT_RXFIFOE: Receive FIFO empty interrupt
- * @arg SDIO_INT_TXDTVAL: Data valid in transmit FIFO interrupt
- * @arg SDIO_INT_RXDTVAL: Data valid in receive FIFO interrupt
- * @arg SDIO_INT_SDIOINT: SD I/O interrupt received interrupt
- * @arg SDIO_INT_ATAEND: CE-ATA command completion signal received for CMD61 interrupt
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_INTConfig(uint32_t SDIO_INT, TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable the interrupt */
- SDIO->IER |= SDIO_INT;
- } else {
- /* Disable the interrupt */
- SDIO->IER &= ~SDIO_INT;
- }
- }
- /**
- * @brief Enable or disable the DMA request for SDIO.
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_DMA_Enable(TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable DMA request */
- SDIO->DTCTLR |= SDIO_DTCTLR_DMAEN;
- } else {
- /* Disenable DMA request */
- SDIO->DTCTLR &= (uint16_t)~((uint16_t)SDIO_DTCTLR_DMAEN);
- }
- }
- /**
- * @brief Initialize the SDIO Command.
- * @param SDIO_CmdInitParaStruct : pointer to a SDIO_CmdInitPara structure.
- * @retval None
- */
- void SDIO_SendCMD(SDIO_CmdInitPara *SDIO_CmdInitParaStruct)
- {
- uint32_t temp = 0;
- /* SDIO PARA Configuration */
- /* Configure the SDIO_CMDParameter value */
- SDIO->PARA = SDIO_CmdInitParaStruct->SDIO_CMDParameter;
- /* SDIO CMD Configuration */
- /* Get the SDIO CMD value */
- temp = SDIO->CMD;
- /* Clear CMD register */
- temp &= CMD_CLEAR_MASK;
- /* Configure the SDIO_CMDIndex value */
- /* Configure the SDIO_ResponseType value */
- /* Configure the SDIO_WaitINTState value */
- /* Configure the SDIO_CSMState value */
- temp |= (uint32_t)SDIO_CmdInitParaStruct->SDIO_CMDIndex | SDIO_CmdInitParaStruct->SDIO_ResponseType
- | SDIO_CmdInitParaStruct->SDIO_WaitINTState | SDIO_CmdInitParaStruct->SDIO_CSMState;
- /* Update the SDIO CMD */
- SDIO->CMD = temp;
- }
- /**
- * @brief Fill SDIO_CmdInitStruct member with a default value.
- * @param SDIO_CmdInitParaStruct: pointer to an SDIO_CmdInitPara structure.
- * @retval None
- */
- void SDIO_CMDParaInit(SDIO_CmdInitPara *SDIO_CmdInitParaStruct)
- {
- /* Fill the default value */
- SDIO_CmdInitParaStruct->SDIO_CMDParameter = 0x00;
- SDIO_CmdInitParaStruct->SDIO_CMDIndex = 0x00;
- SDIO_CmdInitParaStruct->SDIO_ResponseType = SDIO_RESPONSETYPE_NO ;
- SDIO_CmdInitParaStruct->SDIO_WaitINTState = SDIO_WAITINTSTATE_NO;
- SDIO_CmdInitParaStruct->SDIO_CSMState = SDIO_CSMSTATE_DISABLE;
- }
- /**
- * @brief Return last response command index.
- * @param None
- * @retval Return last response command index.
- */
- uint8_t SDIO_GetCMDResponse(void)
- {
- return (uint8_t)(SDIO->RESPCMD);
- }
- /**
- * @brief Return the response for the last received command.
- * @param SDIO_RESP: The SDIO response registers.
- * This value will be :
- * @arg SDIO_RESP1: Response Register 1
- * @arg SDIO_RESP2: Response Register 2
- * @arg SDIO_RESP3: Response Register 3
- * @arg SDIO_RESP4: Response Register 4
- * @retval The Corresponding response register value.
- */
- uint32_t SDIO_GetResponse(uint32_t SDIO_RESP)
- {
- __IO uint32_t temp = 0;
- temp = SDIO_RESP_ADDR + SDIO_RESP;
- return (*(__IO uint32_t *) temp);
- }
- /**
- * @brief Initialize the SDIO SDIO_DataInitParaStruct members.
- * @param SDIO_DataInitParaStruct : pointer to a SDIO_DataInitPara structure.
- * @retval None
- */
- void SDIO_DataConfig(SDIO_DataInitPara *SDIO_DataInitParaStruct)
- {
- uint32_t temp = 0;
- /* SDIO DTTR Configuration */
- /* Set the SDIO SDIO_DataTimeOut value */
- SDIO->DTTR = SDIO_DataInitParaStruct->SDIO_DataTimeOut;
- /* SDIO DTLEN Configuration */
- /* Set the SDIO SDIO_DataLength value */
- SDIO->DTLEN = SDIO_DataInitParaStruct->SDIO_DataLength;
- /* SDIO DTCTLR Configuration */
- /* Get the SDIO DTCTLR value */
- temp = SDIO->DTCTLR;
- /* Clear DTCTLR register */
- temp &= DTCTLR_CLEAR_MASK;
- /* Configure the SDIO_DataBlockSize value */
- /* Configure the SDIO_TransDirection value */
- /* Configure the SDIO_TransMode value */
- /* Configure the SDIO_DSMState value */
- temp |= (uint32_t)SDIO_DataInitParaStruct->SDIO_DataBlockSize | SDIO_DataInitParaStruct->SDIO_TransDirection
- | SDIO_DataInitParaStruct->SDIO_TransMode | SDIO_DataInitParaStruct->SDIO_DSMState;
- /* Update the SDIO DTCTLR */
- SDIO->DTCTLR = temp;
- }
- /**
- * @brief Fill each SDIO_DataInitParaStruct member with a default value.
- * @param SDIO_DataInitParaStruct: pointer to an SDIO_DataInitPara structure.
- * @retval None
- */
- void SDIO_DataParaInit(SDIO_DataInitPara *SDIO_DataInitParaStruct)
- {
- /* Fill the default value */
- SDIO_DataInitParaStruct->SDIO_DataTimeOut = 0xFFFFFFFF;
- SDIO_DataInitParaStruct->SDIO_DataLength = 0x00;
- SDIO_DataInitParaStruct->SDIO_DataBlockSize = SDIO_DATABLOCKSIZE_1B;
- SDIO_DataInitParaStruct->SDIO_TransDirection = SDIO_TRANSDIRECTION_TOCARD;
- SDIO_DataInitParaStruct->SDIO_TransMode = SDIO_TRANSMODE_BLOCK;
- SDIO_DataInitParaStruct->SDIO_DSMState = SDIO_DSMSTATE_DISABLE;
- }
- /**
- * @brief Return the number of remaining data bytes to be transferred to card.
- * @param None
- * @retval Number of remaining data bytes to be transferred
- */
- uint32_t SDIO_GetDataCount(void)
- {
- return SDIO->DTCNT;
- }
- /**
- * @brief Read one word from receive FIFO.
- * @param None
- * @retval Data received
- */
- uint32_t SDIO_ReadData(void)
- {
- return SDIO->FIFO;
- }
- /**
- * @brief Write one word to transmit FIFO.
- * @param Data: 32-bit data write to the card.
- * @retval None
- */
- void SDIO_WriteData(uint32_t Data)
- {
- SDIO->FIFO = Data;
- }
- /**
- * @brief Return the number of words remaining to be written or read from FIFO.
- * @param None
- * @retval Remaining number of words.
- */
- uint32_t SDIO_GetFIFOCount(void)
- {
- return SDIO->FIFOCNT;
- }
- /**
- * @brief Start SD I/O Read Wait operation.
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_StartSDIOReadWait(TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Start Read Wait operation */
- SDIO->DTCTLR |= SDIO_DTCTLR_RWSTART;
- } else {
- SDIO->DTCTLR &= (uint16_t)~((uint16_t)SDIO_DTCTLR_RWSTART);
- }
- }
- /**
- * @brief Stop the SD I/O Read Wait operation.
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_StopSDIOReadWait(TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- SDIO->DTCTLR |= SDIO_DTCTLR_RWSTOP;
- } else {
- /* Stop Read Wait operation */
- SDIO->DTCTLR &= (uint16_t)~((uint16_t)SDIO_DTCTLR_RWSTOP);
- }
- }
- /**
- * @brief Configure the SD I/O read wait mode.
- * @param SDIO_ReadWaitMode: SD I/O Read Wait operation mode.
- * This value will be :
- * @arg SDIO_READWAITMODE_CLK: Read Wait operation realize by stopping SDIOCLK
- * @arg SDIO_READWAITMODE_DAT2: Read Wait operation use SDIO_DAT2
- * @retval None
- */
- void SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode)
- {
- if (SDIO_ReadWaitMode == SDIO_READWAITMODE_CLK) {
- /* Read Wait operation stop SDIOCLK */
- SDIO->DTCTLR |= SDIO_DTCTLR_RWMODE;
- } else {
- /* Read Wait operation use SDIO_DAT2 */
- SDIO->DTCTLR &= (uint16_t)~((uint16_t)SDIO_DTCTLR_RWMODE);
- }
- }
- /**
- * @brief SD I/O Mode Operation configuration.
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_SetSDIOOperation(TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable I/O Mode Operation */
- SDIO->DTCTLR |= SDIO_DTCTLR_SDIOEN;
- } else {
- /* Disenable I/O Mode Operation */
- SDIO->DTCTLR &= (uint16_t)~((uint16_t)SDIO_DTCTLR_SDIOEN);
- }
- }
- /**
- * @brief Enable or disable the SD I/O suspend operation.
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_SendSDIOSuspend_Enable(TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable suspend operation */
- SDIO->CMD |= SDIO_CMD_SDIOSUSPEND;
- } else {
- /* Disenable suspend operation */
- SDIO->CMD &= (uint16_t)~((uint16_t)SDIO_CMD_SDIOSUSPEND);
- }
- }
- /**
- * @brief Enable or disable the CE-ATA command completion signal.
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_CMDCompletion_Enable(TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable CE-ATA command completion signal */
- SDIO->CMD |= SDIO_CMD_ENCMDC;
- } else {
- /* Disenable CE-ATA command completion signal */
- SDIO->CMD &= (uint16_t)~((uint16_t)SDIO_CMD_ENCMDC);
- }
- }
- /**
- * @brief Enable or disable the CE-ATA interrupt.
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_CEATAInt_Enable(TypeState NewValue)
- {
- if (NewValue != ENABLE) {
- /* Enable CE-ATA interrupt */
- SDIO->CMD |= SDIO_CMD_NIEN;
- } else {
- /* Disenable CE-ATA interrupt */
- SDIO->CMD &= (uint16_t)~((uint16_t)SDIO_CMD_NIEN);
- }
- }
- /**
- * @brief Send CE-ATA command (CMD61).
- * @param NewValue: ENABLE or DISABLE.
- * @retval None
- */
- void SDIO_SendCEATA_Enable(TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- SDIO->CMD |= SDIO_CMD_ATACMD;
- } else {
- SDIO->CMD &= (uint16_t)~((uint16_t)SDIO_CMD_ATACMD);
- }
- }
- /**
- * @brief Check whether the flag is set or not.
- * @param SDIO_FLAG: the flag to check.
- * This value will be :
- * @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC failed)
- * @arg SDIO_FLAG_DTCRCFAIL: Data block sent/received (CRC failed)
- * @arg SDIO_FLAG_CMDTMOUT: Command response timeout
- * @arg SDIO_FLAG_DTTMOUT: Data timeout
- * @arg SDIO_FLAG_TXURE: Transmit FIFO underrun error
- * @arg SDIO_FLAG_RXORE: Received FIFO overrun error
- * @arg SDIO_FLAG_CMDREND: Command response received (CRC check passed)
- * @arg SDIO_FLAG_CMDSENT: Command sent (no response required)
- * @arg SDIO_FLAG_DTEND: Data end (data counter, SDIDTCNT, is zero)
- * @arg SDIO_FLAG_STBITE: Start bit not detected on all data signals in wide
- * bus mode.
- * @arg SDIO_FLAG_DTBLKEND: Data block sent/received (CRC check passed)
- * @arg SDIO_FLAG_CMDRUN: Command transfer in progress
- * @arg SDIO_FLAG_TXRUN: Data transmit in progress
- * @arg SDIO_FLAG_RXRUN: Data receive in progress
- * @arg SDIO_FLAG_TXFIFOHE: Transmit FIFO Half Empty
- * @arg SDIO_FLAG_RXFIFOHF: Receive FIFO Half Full
- * @arg SDIO_FLAG_TXFIFOF: Transmit FIFO full
- * @arg SDIO_FLAG_RXFIFOF: Receive FIFO full
- * @arg SDIO_FLAG_TXFIFOE: Transmit FIFO empty
- * @arg SDIO_FLAG_RXFIFOE: Receive FIFO empty
- * @arg SDIO_FLAG_TXDTVAL: Data available in transmit FIFO
- * @arg SDIO_FLAG_RXDTVAL: Data available in receive FIFO
- * @arg SDIO_FLAG_SDIOINT: SD I/O interrupt received
- * @arg SDIO_FLAG_ATAEND: CE-ATA command completion signal received for CMD61
- * @retval The new state of SDIO_FLAG (SET or RESET).
- */
- TypeState SDIO_GetBitState(uint32_t SDIO_FLAG)
- {
- if ((SDIO->STR & SDIO_FLAG) != (uint32_t)RESET) {
- return SET;
- } else {
- return RESET;
- }
- }
- /**
- * @brief Clear the pending flags.
- * @param SDIO_FLAG: the flag to clear.
- * This value will be :
- * @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed)
- * @arg SDIO_FLAG_DTCRCFAIL: Data block sent/received (CRC check failed)
- * @arg SDIO_FLAG_CMDTMOUT: Command response timeout
- * @arg SDIO_FLAG_DTTMOUT: Data timeout
- * @arg SDIO_FLAG_TXURE: Transmit FIFO underrun error
- * @arg SDIO_FLAG_RXORE: Received FIFO overrun error
- * @arg SDIO_FLAG_CMDREND: Command response received (CRC check passed)
- * @arg SDIO_FLAG_CMDSENT: Command sent (no response required)
- * @arg SDIO_FLAG_DTEND: Data end (data counter, SDIO_DTCNT, is zero)
- * @arg SDIO_FLAG_STBITE: Start bit not detected on all data signals in wide bus mode
- * @arg SDIO_FLAG_DTBLKEND: Data block sent/received (CRC check passed)
- * @arg SDIO_FLAG_SDIOINT: SD I/O interrupt received
- * @arg SDIO_FLAG_ATAEND: CE-ATA command completion signal received for CMD61
- * @retval None
- */
- void SDIO_ClearBitState(uint32_t SDIO_FLAG)
- {
- SDIO->ICR = SDIO_FLAG;
- }
- /**
- * @brief Check whether the interrupt is pending or not.
- * @param SDIO_INT: the SDIO interrupt source to check.
- * This value will be :
- * @arg SDIO_INT_CCRCFAIL: Command response received (CRC check failed) interrupt
- * @arg SDIO_INT_DTCRCFAIL: Data block sent/received (CRC check failed) interrupt
- * @arg SDIO_INT_CMDTMOUT: Command response timeout interrupt
- * @arg SDIO_INT_DTTMOUT: Data timeout interrupt
- * @arg SDIO_INT_TXURE: Transmit FIFO underrun error interrupt
- * @arg SDIO_INT_RXORE: Received FIFO overrun error interrupt
- * @arg SDIO_INT_CMDREND: Command response received (CRC check passed) interrupt
- * @arg SDIO_INT_CMDSENT: Command sent (no response required) interrupt
- * @arg SDIO_INT_DTEND: Data end (data counter, SDIDTCNT, is zero) interrupt
- * @arg SDIO_INT_STBITE: Start bit not detected on all data signals in wide bus mode interrupt
- * @arg SDIO_INT_DTBLKEND: Data block sent/received (CRC check passed) interrupt
- * @arg SDIO_INT_CMDRUN: Command transfer in progress interrupt
- * @arg SDIO_INT_TXRUN: Data transmit in progress interrupt
- * @arg SDIO_INT_RXRUN: Data receive in progress interrupt
- * @arg SDIO_INT_TXFIFOHE: Transmit FIFO Half Empty interrupt
- * @arg SDIO_INT_RXFIFOHF: Receive FIFO Half Full interrupt
- * @arg SDIO_INT_TXFIFOF: Transmit FIFO full interrupt
- * @arg SDIO_INT_RXFIFOF: Receive FIFO full interrupt
- * @arg SDIO_INT_TXFIFOE: Transmit FIFO empty interrupt
- * @arg SDIO_INT_RXFIFOE: Receive FIFO empty interrupt
- * @arg SDIO_INT_TXDTVAL: Data available in transmit FIFO interrupt
- * @arg SDIO_INT_RXDTVAL: Data available in receive FIFO interrupt
- * @arg SDIO_INT_SDIOINT: SD I/O interrupt received interrupt
- * @arg SDIO_INT_ATAEND: CE-ATA command completion signal received for CMD61 interrupt
- * @retval The new state of SDIO_INT (SET or RESET).
- */
- TypeState SDIO_GetIntBitState(uint32_t SDIO_INT)
- {
- if ((SDIO->STR & SDIO_INT) != (uint32_t)RESET) {
- return SET;
- } else {
- return RESET;
- }
- }
- /**
- * @brief Clear the interrupt pending bits.
- * @param SDIO_INT: the interrupt pending bit to clear.
- * This value will be :
- * @arg SDIO_INT_CCRCFAIL: Command response received (CRC check failed) interrupt
- * @arg SDIO_INT_DTCRCFAIL: Data block sent/received (CRC check failed) interrupt
- * @arg SDIO_INT_CMDTMOUT: Command response timeout interrupt
- * @arg SDIO_INT_DTTMOUT: Data timeout interrupt
- * @arg SDIO_INT_TXURE: Transmit FIFO underrun error interrupt
- * @arg SDIO_INT_RXORE: Received FIFO overrun error interrupt
- * @arg SDIO_INT_CMDREND: Command response received (CRC check passed) interrupt
- * @arg SDIO_INT_CMDSENT: Command sent (no response required) interrupt
- * @arg SDIO_INT_DTEND: Data end (data counter, SDIDTCNT, is zero) interrupt
- * @arg SDIO_INT_STBITE: Start bit not detected on all data signals in wide
- * bus mode interrupt
- * @arg SDIO_INT_SDIOINT: SD I/O interrupt received interrupt
- * @arg SDIO_INT_ATAEND: CE-ATA command completion signal received for CMD61
- * @retval None
- */
- void SDIO_ClearIntBitState(uint32_t SDIO_INT)
- {
- SDIO->ICR = SDIO_INT;
- }
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
- #endif
|