This function handles MMC card interrupt request.
1627 uint32_t errorstate;
1628 uint32_t context = hmmc->Context;
1631 if((__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_RXFIFOHF) != RESET) && ((context & MMC_CONTEXT_IT) != 0U))
1636 else if(__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DATAEND) != RESET)
1638 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_DATAEND);
1640 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT |\
1641 SDMMC_IT_TXUNDERR | SDMMC_IT_RXOVERR | SDMMC_IT_TXFIFOHE |\
1644 #if !defined(STM32L4R5xx) && !defined(STM32L4R7xx) && !defined(STM32L4R9xx) && !defined(STM32L4S5xx) && !defined(STM32L4S7xx) && !defined(STM32L4S9xx) 1645 hmmc->Instance->DCTRL &= ~(SDMMC_DCTRL_DTEN);
1647 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_IDMABTC);
1648 __SDMMC_CMDTRANS_DISABLE( hmmc->Instance);
1651 if((context & MMC_CONTEXT_DMA) != 0U)
1653 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1654 hmmc->Instance->DLEN = 0;
1655 hmmc->Instance->DCTRL = 0;
1656 hmmc->Instance->IDMACTRL = SDMMC_DISABLE_IDMA ;
1659 if(((context & MMC_CONTEXT_READ_MULTIPLE_BLOCK) != 0U) || ((context & MMC_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
1662 if(errorstate != HAL_MMC_ERROR_NONE)
1664 hmmc->ErrorCode |= errorstate;
1665 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1666 hmmc->ErrorCallback(hmmc);
1674 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS);
1676 hmmc->State = HAL_MMC_STATE_READY;
1677 if(((context & MMC_CONTEXT_WRITE_SINGLE_BLOCK) != 0U) || ((context & MMC_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
1679 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1680 hmmc->TxCpltCallback(hmmc);
1685 if(((context & MMC_CONTEXT_READ_SINGLE_BLOCK) != 0U) || ((context & MMC_CONTEXT_READ_MULTIPLE_BLOCK) != 0U))
1687 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1688 hmmc->RxCpltCallback(hmmc);
1694 if((context & MMC_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U)
1697 if(errorstate != HAL_MMC_ERROR_NONE)
1699 hmmc->ErrorCode |= errorstate;
1700 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1701 hmmc->ErrorCallback(hmmc);
1707 if(((context & MMC_CONTEXT_READ_SINGLE_BLOCK) == 0U) && ((context & MMC_CONTEXT_READ_MULTIPLE_BLOCK) == 0U))
1711 hmmc->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN);
1713 hmmc->State = HAL_MMC_STATE_READY;
1715 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1716 hmmc->TxCpltCallback(hmmc);
1723 else if((context & MMC_CONTEXT_IT) != 0U)
1726 if(((context & MMC_CONTEXT_READ_MULTIPLE_BLOCK) != 0U) || ((context & MMC_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
1729 if(errorstate != HAL_MMC_ERROR_NONE)
1731 hmmc->ErrorCode |= errorstate;
1732 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1733 hmmc->ErrorCallback(hmmc);
1741 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS);
1743 hmmc->State = HAL_MMC_STATE_READY;
1744 if(((context & MMC_CONTEXT_READ_SINGLE_BLOCK) != 0U) || ((context & MMC_CONTEXT_READ_MULTIPLE_BLOCK) != 0U))
1746 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1747 hmmc->RxCpltCallback(hmmc);
1754 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1755 hmmc->TxCpltCallback(hmmc);
1767 else if((__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_TXFIFOHE) != RESET) && ((context & MMC_CONTEXT_IT) != 0U))
1772 else if (__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_DCRCFAIL| SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_RXOVERR | SDMMC_FLAG_TXUNDERR) != RESET)
1775 if(__HAL_MMC_GET_FLAG(hmmc, SDMMC_IT_DCRCFAIL) != RESET)
1777 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_CRC_FAIL;
1779 if(__HAL_MMC_GET_FLAG(hmmc, SDMMC_IT_DTIMEOUT) != RESET)
1781 hmmc->ErrorCode |= HAL_MMC_ERROR_DATA_TIMEOUT;
1783 if(__HAL_MMC_GET_FLAG(hmmc, SDMMC_IT_RXOVERR) != RESET)
1785 hmmc->ErrorCode |= HAL_MMC_ERROR_RX_OVERRUN;
1787 if(__HAL_MMC_GET_FLAG(hmmc, SDMMC_IT_TXUNDERR) != RESET)
1789 hmmc->ErrorCode |= HAL_MMC_ERROR_TX_UNDERRUN;
1793 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_STATIC_DATA_FLAGS);
1796 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\
1797 SDMMC_IT_TXUNDERR| SDMMC_IT_RXOVERR);
1799 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1800 __SDMMC_CMDTRANS_DISABLE( hmmc->Instance);
1801 hmmc->Instance->DCTRL |= SDMMC_DCTRL_FIFORST;
1802 hmmc->Instance->CMD |= SDMMC_CMD_CMDSTOP;
1805 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1806 hmmc->Instance->CMD &= ~(SDMMC_CMD_CMDSTOP);
1807 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_FLAG_DABORT);
1810 if((context & MMC_CONTEXT_IT) != 0U)
1813 hmmc->State = HAL_MMC_STATE_READY;
1814 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1815 hmmc->ErrorCallback(hmmc);
1820 else if((context & MMC_CONTEXT_DMA) != 0U)
1822 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1823 if(hmmc->ErrorCode != HAL_MMC_ERROR_NONE)
1826 __HAL_MMC_DISABLE_IT(hmmc, SDMMC_IT_IDMABTC);
1827 hmmc->Instance->IDMACTRL = SDMMC_DISABLE_IDMA;
1830 hmmc->State = HAL_MMC_STATE_READY;
1831 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1832 hmmc->ErrorCallback(hmmc);
1839 if(hmmc->hdmatx != NULL)
1849 else if(hmmc->hdmarx != NULL)
1861 hmmc->ErrorCode = HAL_MMC_ERROR_NONE;
1862 hmmc->State = HAL_MMC_STATE_READY;
1863 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1864 hmmc->AbortCpltCallback(hmmc);
1877 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1878 else if(__HAL_MMC_GET_FLAG(hmmc, SDMMC_FLAG_IDMABTC) != RESET)
1880 __HAL_MMC_CLEAR_FLAG(hmmc, SDMMC_IT_IDMABTC);
1881 if(READ_BIT(hmmc->Instance->IDMACTRL, SDMMC_IDMA_IDMABACT) == 0U)
1884 if((context & MMC_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U)
1886 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1887 hmmc->Write_DMADblBuf1CpltCallback(hmmc);
1894 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1895 hmmc->Read_DMADblBuf1CpltCallback(hmmc);
1904 if((context & MMC_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U)
1906 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1907 hmmc->Write_DMADblBuf0CpltCallback(hmmc);
1914 #if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U) 1915 hmmc->Read_DMADblBuf0CpltCallback(hmmc);
void HAL_MMC_AbortCallback(MMC_HandleTypeDef *hmmc)
MMC Abort callbacks.
void HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback(MMC_HandleTypeDef *hmmc)
Read DMA Buffer 0 Transfer completed callbacks.
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
static void MMC_Write_IT(MMC_HandleTypeDef *hmmc)
Wrap up writing in non-blocking mode.
void HAL_MMC_ErrorCallback(MMC_HandleTypeDef *hmmc)
MMC error callbacks.
void HAL_MMC_TxCpltCallback(MMC_HandleTypeDef *hmmc)
Tx Transfer completed callbacks.
void HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback(MMC_HandleTypeDef *hmmc)
Write DMA Buffer 0 Transfer completed callbacks.
static void MMC_Read_IT(MMC_HandleTypeDef *hmmc)
Wrap up reading in non-blocking mode.
uint32_t SDMMC_CmdStopTransfer(SDMMC_TypeDef *SDMMCx)
Send the Stop Transfer command and check the response.
static void MMC_DMARxAbort(DMA_HandleTypeDef *hdma)
DMA MMC Rx Abort callback.
void HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback(MMC_HandleTypeDef *hmmc)
Read DMA Buffer 1 Transfer completed callbacks.
void HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback(MMC_HandleTypeDef *hmmc)
Write DMA Buffer 1 Transfer completed callbacks.
static void MMC_DMATxAbort(DMA_HandleTypeDef *hdma)
DMA MMC Tx Abort callback.
void HAL_MMC_RxCpltCallback(MMC_HandleTypeDef *hmmc)
Rx Transfer completed callbacks.