sdio: fix missing SDIO IRQHandler

This commit is contained in:
Daniel Fekete 2017-06-13 18:59:18 +02:00
parent d100258029
commit df9c5dbb96
2 changed files with 12 additions and 2 deletions

View File

@ -23,6 +23,7 @@
#include "Arduino.h" #include "Arduino.h"
static SDIOClass *_sdio_this;
//============================================================================= //=============================================================================
// Error function and macro. // Error function and macro.
@ -96,6 +97,9 @@ uint8_t SDIOClass::begin() {
*/ */
return true; return true;
} }
_sdio_this = this;
__HAL_RCC_SDIO_CLK_ENABLE(); __HAL_RCC_SDIO_CLK_ENABLE();
stm32AfSDIO4BitInit(SDIO, NULL, 0, NULL, 0, stm32AfSDIO4BitInit(SDIO, NULL, 0, NULL, 0,
@ -137,6 +141,9 @@ uint8_t SDIOClass::begin() {
__HAL_LINKDMA(&hsd, hdmatx, hdma_sdio); __HAL_LINKDMA(&hsd, hdmatx, hdma_sdio);
__HAL_LINKDMA(&hsd, hdmarx, hdma_sdio); __HAL_LINKDMA(&hsd, hdmarx, hdma_sdio);
HAL_NVIC_SetPriority(SDIO_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(SDIO_IRQn);
if (HAL_DMA_Init(&hdma_sdio) != HAL_OK) { if (HAL_DMA_Init(&hdma_sdio) != HAL_OK) {
return false; return false;
} }
@ -340,3 +347,6 @@ void SDIOClass::useDMA(bool useDMA){
} }
extern "C" void SDIO_IRQHandler() {
HAL_SD_IRQHandler(&(_sdio_this->hsd));
}

View File

@ -39,6 +39,7 @@
#define SDIO_CmdInitTypeDef SDMMC_CmdInitTypeDef #define SDIO_CmdInitTypeDef SDMMC_CmdInitTypeDef
#define SDIO_SendCommand SDMMC_SendCommand #define SDIO_SendCommand SDMMC_SendCommand
#define SDIO_TypeDef SDMMC_TypeDef #define SDIO_TypeDef SDMMC_TypeDef
#define SDIO_IRQHandler SDMMC1_IRQHandler
#endif #endif
@ -105,9 +106,9 @@ class SDIOClass {
uint32_t errorLine(); uint32_t errorLine();
void useDMA(bool useDMA); void useDMA(bool useDMA);
SD_HandleTypeDef hsd;
private: private:
uint32_t cardStatus(); uint32_t cardStatus();
SD_HandleTypeDef hsd;
DMA_HandleTypeDef hdma_sdio; DMA_HandleTypeDef hdma_sdio;
HAL_SD_CardInfoTypeDef SDCardInfo; HAL_SD_CardInfoTypeDef SDCardInfo;
HAL_SD_CardStateTypeDef CardState; HAL_SD_CardStateTypeDef CardState;
@ -117,6 +118,5 @@ class SDIOClass {
static uint32_t m_errorLine = 0; static uint32_t m_errorLine = 0;
static uint8_t m_errorCode = 0x64; //TODO cleanup, SdFat errors do not belong to SDIO driver (SD_CARD_ERROR_INIT_NOT_CALLED); static uint8_t m_errorCode = 0x64; //TODO cleanup, SdFat errors do not belong to SDIO driver (SD_CARD_ERROR_INIT_NOT_CALLED);
static void (*_sdio_this);
#endif #endif