This function handles SD card interrupt request.
1738 uint32_t errorstate;
1739 uint32_t context = hsd->Context;
1742 if((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_RXFIFOHF) != RESET) && ((context & SD_CONTEXT_IT) != 0U))
1747 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DATAEND) != RESET)
1749 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DATAEND);
1751 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT |\
1752 SDMMC_IT_TXUNDERR | SDMMC_IT_RXOVERR | SDMMC_IT_TXFIFOHE |\
1755 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1756 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC);
1757 __SDMMC_CMDTRANS_DISABLE( hsd->Instance);
1759 hsd->Instance->DCTRL &= ~(SDMMC_DCTRL_DTEN);
1762 if((context & SD_CONTEXT_IT) != 0U)
1764 if(((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U) || ((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
1767 if(errorstate != HAL_SD_ERROR_NONE)
1769 hsd->ErrorCode |= errorstate;
1770 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1771 hsd->ErrorCallback(hsd);
1779 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS);
1781 hsd->State = HAL_SD_STATE_READY;
1782 hsd->Context = SD_CONTEXT_NONE;
1783 if(((context & SD_CONTEXT_READ_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U))
1785 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1786 hsd->RxCpltCallback(hsd);
1793 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1794 hsd->TxCpltCallback(hsd);
1800 else if((context & SD_CONTEXT_DMA) != 0U)
1802 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1803 hsd->Instance->DLEN = 0;
1804 hsd->Instance->DCTRL = 0;
1805 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA;
1808 if(((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U) || ((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
1811 if(errorstate != HAL_SD_ERROR_NONE)
1813 hsd->ErrorCode |= errorstate;
1814 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1815 hsd->ErrorCallback(hsd);
1822 hsd->State = HAL_SD_STATE_READY;
1823 hsd->Context = SD_CONTEXT_NONE;
1824 if(((context & SD_CONTEXT_WRITE_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
1826 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1827 hsd->TxCpltCallback(hsd);
1832 if(((context & SD_CONTEXT_READ_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U))
1834 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1835 hsd->RxCpltCallback(hsd);
1841 if((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U)
1844 if(errorstate != HAL_SD_ERROR_NONE)
1846 hsd->ErrorCode |= errorstate;
1847 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1848 hsd->ErrorCallback(hsd);
1854 if(((context & SD_CONTEXT_READ_SINGLE_BLOCK) == 0U) && ((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) == 0U))
1858 hsd->Instance->DCTRL &= (uint32_t)~((uint32_t)SDMMC_DCTRL_DMAEN);
1860 hsd->State = HAL_SD_STATE_READY;
1862 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1863 hsd->TxCpltCallback(hsd);
1876 else if((__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXFIFOHE) != RESET) && ((context & SD_CONTEXT_IT) != 0U))
1881 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_RXOVERR | SDMMC_FLAG_TXUNDERR) != RESET)
1884 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DCRCFAIL) != RESET)
1886 hsd->ErrorCode |= HAL_SD_ERROR_DATA_CRC_FAIL;
1888 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_DTIMEOUT) != RESET)
1890 hsd->ErrorCode |= HAL_SD_ERROR_DATA_TIMEOUT;
1892 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_RXOVERR) != RESET)
1894 hsd->ErrorCode |= HAL_SD_ERROR_RX_OVERRUN;
1896 if(__HAL_SD_GET_FLAG(hsd, SDMMC_IT_TXUNDERR) != RESET)
1898 hsd->ErrorCode |= HAL_SD_ERROR_TX_UNDERRUN;
1902 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_STATIC_DATA_FLAGS);
1905 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_DATAEND | SDMMC_IT_DCRCFAIL | SDMMC_IT_DTIMEOUT|\
1906 SDMMC_IT_TXUNDERR| SDMMC_IT_RXOVERR);
1908 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1909 __SDMMC_CMDTRANS_DISABLE( hsd->Instance);
1910 hsd->Instance->DCTRL |= SDMMC_DCTRL_FIFORST;
1911 hsd->Instance->CMD |= SDMMC_CMD_CMDSTOP;
1914 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1915 hsd->Instance->CMD &= ~(SDMMC_CMD_CMDSTOP);
1916 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_DABORT);
1919 if((context & SD_CONTEXT_IT) != 0U)
1922 hsd->State = HAL_SD_STATE_READY;
1923 hsd->Context = SD_CONTEXT_NONE;
1924 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1925 hsd->ErrorCallback(hsd);
1930 else if((context & SD_CONTEXT_DMA) != 0U)
1932 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1933 if(hsd->ErrorCode != HAL_SD_ERROR_NONE)
1936 __HAL_SD_DISABLE_IT(hsd, SDMMC_IT_IDMABTC);
1937 hsd->Instance->IDMACTRL = SDMMC_DISABLE_IDMA;
1940 hsd->State = HAL_SD_STATE_READY;
1941 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1942 hsd->ErrorCallback(hsd);
1949 if(((context & SD_CONTEXT_WRITE_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U))
1959 else if(((context & SD_CONTEXT_READ_SINGLE_BLOCK) != 0U) || ((context & SD_CONTEXT_READ_MULTIPLE_BLOCK) != 0U))
1971 hsd->ErrorCode = HAL_SD_ERROR_NONE;
1972 hsd->State = HAL_SD_STATE_READY;
1973 hsd->Context = SD_CONTEXT_NONE;
1974 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1975 hsd->AbortCpltCallback(hsd);
1988 #if defined(STM32L4R5xx) || defined(STM32L4R7xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx) 1989 else if(__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_IDMABTC) != RESET)
1991 __HAL_SD_CLEAR_FLAG(hsd, SDMMC_FLAG_IDMABTC);
1992 if(READ_BIT(hsd->Instance->IDMACTRL, SDMMC_IDMA_IDMABACT) == 0U)
1995 if((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U)
1997 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 1998 hsd->Write_DMADblBuf1CpltCallback(hsd);
2005 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 2006 hsd->Read_DMADblBuf1CpltCallback(hsd);
2015 if((context & SD_CONTEXT_WRITE_MULTIPLE_BLOCK) != 0U)
2017 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 2018 hsd->Write_DMADblBuf0CpltCallback(hsd);
2025 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U) 2026 hsd->Read_DMADblBuf0CpltCallback(hsd);
void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd)
SD error callbacks.
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)
Rx Transfer completed callbacks.
static void SD_DMARxAbort(DMA_HandleTypeDef *hdma)
DMA SD Rx Abort callback.
static void SD_DMATxAbort(DMA_HandleTypeDef *hdma)
DMA SD Tx Abort callback.
void HAL_SDEx_Write_DMADoubleBuffer0CpltCallback(SD_HandleTypeDef *hsd)
Write DMA Buffer 0 Transfer completed callbacks.
void HAL_SDEx_Read_DMADoubleBuffer0CpltCallback(SD_HandleTypeDef *hsd)
Read DMA Buffer 0 Transfer completed callbacks.
void HAL_SDEx_Write_DMADoubleBuffer1CpltCallback(SD_HandleTypeDef *hsd)
Write DMA Buffer 1 Transfer completed callbacks.
static void SD_Read_IT(SD_HandleTypeDef *hsd)
Wrap up reading in non-blocking mode.
uint32_t SDMMC_CmdStopTransfer(SDMMC_TypeDef *SDMMCx)
Send the Stop Transfer command and check the response.
void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd)
SD Abort callbacks.
void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)
Tx Transfer completed callbacks.
void HAL_SDEx_Read_DMADoubleBuffer1CpltCallback(SD_HandleTypeDef *hsd)
Read DMA Buffer 1 Transfer completed callbacks.
static void SD_Write_IT(SD_HandleTypeDef *hsd)
Wrap up writing in non-blocking mode.