diff --git a/bsp/stm32f20x/board.c b/bsp/stm32f20x/board.c index 3dab26b11a1e08c281648e103bef3a953196cdf5..bb94e7449dcff60ae4bc86d9ca8ef352859ac59e 100644 --- a/bsp/stm32f20x/board.c +++ b/bsp/stm32f20x/board.c @@ -15,7 +15,6 @@ #include #include -#include #include "board.h" /** @@ -24,6 +23,196 @@ /*@{*/ +#if STM32_USE_SDIO + + +/** + * @brief DeInitializes the SDIO interface. + * @param None + * @retval None + */ +void SD_LowLevel_DeInit(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /*!< Disable SDIO Clock */ + SDIO_ClockCmd(DISABLE); + + /*!< Set Power State to OFF */ + SDIO_SetPowerState(SDIO_PowerState_OFF); + + /*!< DeInitializes the SDIO peripheral */ + SDIO_DeInit(); + + /* Disable the SDIO APB2 Clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, DISABLE); + + GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_MCO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_MCO); + + /* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* Configure PD.02 CMD line */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; + GPIO_Init(GPIOD, &GPIO_InitStructure); + + /* Configure PC.12 pin: CLK pin */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; + GPIO_Init(GPIOC, &GPIO_InitStructure); +} + +/** + * @brief Initializes the SD Card and put it into StandBy State (Ready for + * data transfer). + * @param None + * @retval None + */ +void SD_LowLevel_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* GPIOC and GPIOD Periph clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | SD_DETECT_GPIO_CLK, ENABLE); + + GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SDIO); + GPIO_PinAFConfig(GPIOD, GPIO_PinSource2, GPIO_AF_SDIO); + + /* Configure PC.08, PC.09, PC.10, PC.11 pins: D0, D1, D2, D3 pins */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /* Configure PD.02 CMD line */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; + GPIO_Init(GPIOD, &GPIO_InitStructure); + + /* Configure PC.12 pin: CLK pin */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + /*!< Configure SD_SPI_DETECT_PIN pin: SD Card detect pin */ + GPIO_InitStructure.GPIO_Pin = SD_DETECT_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(SD_DETECT_GPIO_PORT, &GPIO_InitStructure); + + /* Enable the SDIO APB2 Clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO, ENABLE); + + /* Enable the DMA2 Clock */ + RCC_AHB1PeriphClockCmd(SD_SDIO_DMA_CLK, ENABLE); +} + +/** + * @brief Configures the DMA2 Channel4 for SDIO Tx request. + * @param BufferSRC: pointer to the source buffer + * @param BufferSize: buffer size + * @retval None + */ +void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize) +{ + DMA_InitTypeDef SDDMA_InitStructure; + + DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_FEIF | SD_SDIO_DMA_FLAG_DMEIF | SD_SDIO_DMA_FLAG_TEIF | SD_SDIO_DMA_FLAG_HTIF | SD_SDIO_DMA_FLAG_TCIF); + + /* DMA2 Stream3 or Stream6 disable */ + DMA_Cmd(SD_SDIO_DMA_STREAM, DISABLE); + + /* DMA2 Stream3 or Stream6 Config */ + DMA_DeInit(SD_SDIO_DMA_STREAM); + + SDDMA_InitStructure.DMA_Channel = SD_SDIO_DMA_CHANNEL; + SDDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS; + SDDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)BufferSRC; + SDDMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + SDDMA_InitStructure.DMA_BufferSize = 0; + SDDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + SDDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + SDDMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + SDDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + SDDMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + SDDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + SDDMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + SDDMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + SDDMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_INC4; + SDDMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_INC4; + DMA_Init(SD_SDIO_DMA_STREAM, &SDDMA_InitStructure); + + DMA_FlowControllerConfig(SD_SDIO_DMA_STREAM, DMA_FlowCtrl_Peripheral); + + /* DMA2 Stream3 or Stream6 enable */ + DMA_Cmd(SD_SDIO_DMA_STREAM, ENABLE); + +} + +/** + * @brief Configures the DMA2 Channel4 for SDIO Rx request. + * @param BufferDST: pointer to the destination buffer + * @param BufferSize: buffer size + * @retval None + */ +void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize) +{ + DMA_InitTypeDef SDDMA_InitStructure; + + DMA_ClearFlag(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_FEIF | SD_SDIO_DMA_FLAG_DMEIF | SD_SDIO_DMA_FLAG_TEIF | SD_SDIO_DMA_FLAG_HTIF | SD_SDIO_DMA_FLAG_TCIF); + + /* DMA2 Stream3 or Stream6 disable */ + DMA_Cmd(SD_SDIO_DMA_STREAM, DISABLE); + + /* DMA2 Stream3 or Stream6 Config */ + DMA_DeInit(SD_SDIO_DMA_STREAM); + + SDDMA_InitStructure.DMA_Channel = SD_SDIO_DMA_CHANNEL; + SDDMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SDIO_FIFO_ADDRESS; + SDDMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)BufferDST; + SDDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + SDDMA_InitStructure.DMA_BufferSize = 0; + SDDMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + SDDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + SDDMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; + SDDMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; + SDDMA_InitStructure.DMA_Mode = DMA_Mode_Normal; + SDDMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; + SDDMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; + SDDMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + SDDMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_INC4; + SDDMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_INC4; + DMA_Init(SD_SDIO_DMA_STREAM, &SDDMA_InitStructure); + + DMA_FlowControllerConfig(SD_SDIO_DMA_STREAM, DMA_FlowCtrl_Peripheral); + + /* DMA2 Stream3 or Stream6 enable */ + DMA_Cmd(SD_SDIO_DMA_STREAM, ENABLE); +} + +/** + * @brief Returns the DMA End Of Transfer Status. + * @param None + * @retval DMA SDIO Stream Status. + */ +uint32_t SD_DMAEndOfTransferStatus(void) +{ + return (uint32_t)DMA_GetFlagStatus(SD_SDIO_DMA_STREAM, SD_SDIO_DMA_FLAG_TCIF); +} +#endif + /******************************************************************************* * Function Name : NVIC_Configuration * Description : Configures Vector Table base location. diff --git a/bsp/stm32f20x/board.h b/bsp/stm32f20x/board.h index e1677a26352a61cd5fd959cbcc5ddf448914beae..73bc066dda4a35e448262c4a1c6a93572cafc6d8 100644 --- a/bsp/stm32f20x/board.h +++ b/bsp/stm32f20x/board.h @@ -16,10 +16,12 @@ #ifndef __BOARD_H__ #define __BOARD_H__ +#include + /* board configuration */ // SDCard Driver <1=>SDIO sdcard <0=>SPI MMC card // Default: 1 -#define STM32_USE_SDIO 0 +#define STM32_USE_SDIO 1 /* whether use board external SRAM memory */ // Use external SRAM memory on the board @@ -42,6 +44,9 @@ // Default: 1 #define STM32_CONSOLE_USART 1 +// Ethernet Interface: <0=> Microchip ENC28J60 +#define STM32_ETH_IF 0 + void rt_hw_board_led_on(int n); void rt_hw_board_led_off(int n); void rt_hw_board_init(void); @@ -56,6 +61,54 @@ void rt_hw_board_init(void); #define CONSOLE_DEVICE "uart3" #endif +#if STM32_USE_SDIO +/** + * @brief SD FLASH SDIO Interface + */ +#define SD_DETECT_PIN GPIO_Pin_0 /* PB.0 */ +#define SD_DETECT_GPIO_PORT GPIOB /* GPIOB */ +#define SD_DETECT_GPIO_CLK RCC_AHB1Periph_GPIOB + +#define SDIO_FIFO_ADDRESS ((uint32_t)0x40012C80) +/** + * @brief SDIO Intialization Frequency (400KHz max) + */ +#define SDIO_INIT_CLK_DIV ((uint8_t)0x76) +/** + * @brief SDIO Data Transfer Frequency (25MHz max) + */ +#define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x0) + +#define SD_SDIO_DMA DMA2 +#define SD_SDIO_DMA_CLK RCC_AHB1Periph_DMA2 + +#define SD_SDIO_DMA_STREAM3 3 +//#define SD_SDIO_DMA_STREAM6 6 + +#ifdef SD_SDIO_DMA_STREAM3 + #define SD_SDIO_DMA_STREAM DMA2_Stream3 + #define SD_SDIO_DMA_CHANNEL DMA_Channel_4 + #define SD_SDIO_DMA_FLAG_FEIF DMA_FLAG_FEIF3 + #define SD_SDIO_DMA_FLAG_DMEIF DMA_FLAG_DMEIF3 + #define SD_SDIO_DMA_FLAG_TEIF DMA_FLAG_TEIF3 + #define SD_SDIO_DMA_FLAG_HTIF DMA_FLAG_HTIF3 + #define SD_SDIO_DMA_FLAG_TCIF DMA_FLAG_TCIF3 +#elif defined SD_SDIO_DMA_STREAM6 + #define SD_SDIO_DMA_STREAM DMA2_Stream6 + #define SD_SDIO_DMA_CHANNEL DMA_Channel_4 + #define SD_SDIO_DMA_FLAG_FEIF DMA_FLAG_FEIF6 + #define SD_SDIO_DMA_FLAG_DMEIF DMA_FLAG_DMEIF6 + #define SD_SDIO_DMA_FLAG_TEIF DMA_FLAG_TEIF6 + #define SD_SDIO_DMA_FLAG_HTIF DMA_FLAG_HTIF6 + #define SD_SDIO_DMA_FLAG_TCIF DMA_FLAG_TCIF6 +#endif /* SD_SDIO_DMA_STREAM3 */ + +void SD_LowLevel_DeInit(void); +void SD_LowLevel_Init(void); +void SD_LowLevel_DMA_TxConfig(uint32_t *BufferSRC, uint32_t BufferSize); +void SD_LowLevel_DMA_RxConfig(uint32_t *BufferDST, uint32_t BufferSize); + +#endif void rt_hw_usart_init(void); /* SD Card init function */ diff --git a/bsp/stm32f20x/project.uvopt b/bsp/stm32f20x/project.uvopt index 374477780c991b477c70b9798a802edafff25f39..0ee2f6284b9ae2d0511cc3bf60066bccc9f54c45 100644 --- a/bsp/stm32f20x/project.uvopt +++ b/bsp/stm32f20x/project.uvopt @@ -170,7 +170,7 @@ Startup - 1 + 0 0 0 @@ -179,10 +179,10 @@ 1 0 0 - 6 + 50 0 - 1 - 18 + 3 + 26 0 .\application.c application.c @@ -257,6 +257,34 @@ .\serial.c serial.c + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\rtc.c + rtc.c + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + .\sdio_sd.c + sdio_sd.c + @@ -266,7 +294,7 @@ 0 2 - 7 + 9 1 0 0 @@ -280,7 +308,7 @@ 2 - 8 + 10 1 0 0 @@ -294,7 +322,7 @@ 2 - 9 + 11 1 0 0 @@ -308,7 +336,7 @@ 2 - 10 + 12 1 0 0 @@ -322,7 +350,7 @@ 2 - 11 + 13 1 0 0 @@ -336,7 +364,7 @@ 2 - 12 + 14 1 0 0 @@ -350,7 +378,7 @@ 2 - 13 + 15 1 0 0 @@ -364,7 +392,7 @@ 2 - 14 + 16 1 0 0 @@ -378,7 +406,7 @@ 2 - 15 + 17 1 0 0 @@ -392,7 +420,7 @@ 2 - 16 + 18 1 0 0 @@ -406,7 +434,7 @@ 2 - 17 + 19 1 0 0 @@ -420,7 +448,7 @@ 2 - 18 + 20 1 0 0 @@ -434,7 +462,7 @@ 2 - 19 + 21 1 0 0 @@ -448,7 +476,7 @@ 2 - 20 + 22 1 0 0 @@ -462,7 +490,7 @@ 2 - 21 + 23 1 0 0 @@ -483,7 +511,7 @@ 0 3 - 22 + 24 1 0 0 @@ -497,7 +525,7 @@ 3 - 23 + 25 2 0 0 @@ -511,7 +539,7 @@ 3 - 24 + 26 1 0 0 @@ -525,7 +553,7 @@ 3 - 25 + 27 1 0 0 @@ -539,7 +567,7 @@ 3 - 26 + 28 1 0 0 @@ -560,7 +588,7 @@ 0 4 - 27 + 29 1 0 0 @@ -574,7 +602,7 @@ 4 - 28 + 30 1 0 0 @@ -588,7 +616,7 @@ 4 - 29 + 31 1 0 0 @@ -602,7 +630,7 @@ 4 - 30 + 32 1 0 0 @@ -616,7 +644,7 @@ 4 - 31 + 33 1 0 0 @@ -630,7 +658,7 @@ 4 - 32 + 34 1 0 0 @@ -644,7 +672,7 @@ 4 - 33 + 35 1 0 0 @@ -658,7 +686,7 @@ 4 - 34 + 36 1 0 0 @@ -672,7 +700,7 @@ 4 - 35 + 37 1 0 0 @@ -686,7 +714,7 @@ 4 - 36 + 38 1 0 0 @@ -700,7 +728,7 @@ 4 - 37 + 39 1 0 0 @@ -714,7 +742,7 @@ 4 - 38 + 40 1 0 0 @@ -728,7 +756,7 @@ 4 - 39 + 41 1 0 0 @@ -749,7 +777,7 @@ 0 5 - 40 + 42 1 0 0 @@ -763,7 +791,7 @@ 5 - 41 + 43 1 0 0 @@ -777,7 +805,7 @@ 5 - 42 + 44 1 0 0 @@ -791,7 +819,7 @@ 5 - 43 + 45 1 0 0 @@ -805,7 +833,7 @@ 5 - 44 + 46 1 0 0 @@ -819,7 +847,7 @@ 5 - 45 + 47 1 0 0 @@ -833,7 +861,7 @@ 5 - 46 + 48 1 0 0 @@ -847,7 +875,7 @@ 5 - 47 + 49 1 0 0 @@ -861,7 +889,7 @@ 5 - 48 + 50 1 0 0 @@ -875,7 +903,7 @@ 5 - 49 + 51 1 0 0 @@ -889,7 +917,7 @@ 5 - 50 + 52 1 0 0 @@ -903,7 +931,7 @@ 5 - 51 + 53 1 0 0 @@ -917,7 +945,7 @@ 5 - 52 + 54 1 0 0 @@ -931,7 +959,7 @@ 5 - 53 + 55 1 0 0 @@ -945,7 +973,7 @@ 5 - 54 + 56 1 0 0 @@ -959,7 +987,7 @@ 5 - 55 + 57 1 0 0 @@ -973,7 +1001,7 @@ 5 - 56 + 58 1 0 0 @@ -987,7 +1015,7 @@ 5 - 57 + 59 1 0 0 @@ -1001,7 +1029,7 @@ 5 - 58 + 60 1 0 0 @@ -1015,7 +1043,7 @@ 5 - 59 + 61 1 0 0 @@ -1029,7 +1057,7 @@ 5 - 60 + 62 1 0 0 @@ -1043,7 +1071,7 @@ 5 - 61 + 63 1 0 0 @@ -1057,7 +1085,7 @@ 5 - 62 + 64 1 0 0 @@ -1071,7 +1099,7 @@ 5 - 63 + 65 1 0 0 @@ -1085,7 +1113,7 @@ 5 - 64 + 66 1 0 0 @@ -1099,7 +1127,7 @@ 5 - 65 + 67 1 0 0 @@ -1113,7 +1141,7 @@ 5 - 66 + 68 1 0 0 @@ -1127,7 +1155,7 @@ 5 - 67 + 69 1 0 0 @@ -1141,7 +1169,7 @@ 5 - 68 + 70 1 0 0 @@ -1155,7 +1183,7 @@ 5 - 69 + 71 1 0 0 @@ -1169,7 +1197,7 @@ 5 - 70 + 72 1 0 0 @@ -1183,7 +1211,7 @@ 5 - 71 + 73 1 0 0 @@ -1197,7 +1225,7 @@ 5 - 72 + 74 1 0 0 @@ -1211,7 +1239,7 @@ 5 - 73 + 75 2 0 0 @@ -1230,13 +1258,13 @@ 0 100 - 0 + 2 - .\application.c - 6 - 1 - 18 + .\stm32f20x_it.c + 0 + 80 + 80 .\board.c @@ -1245,10 +1273,10 @@ 65 - .\stm32f20x_it.c - 0 - 80 - 80 + .\application.c + 50 + 3 + 26 diff --git a/bsp/stm32f20x/project.uvproj b/bsp/stm32f20x/project.uvproj index e1b6175d9d861ff40023cc58dddd881da988556d..9c5a59ebc91ac940d46611af0cfeeea12b7e3b7a 100644 --- a/bsp/stm32f20x/project.uvproj +++ b/bsp/stm32f20x/project.uvproj @@ -416,6 +416,16 @@ 1 .\serial.c + + rtc.c + 1 + .\rtc.c + + + sdio_sd.c + 1 + .\sdio_sd.c + diff --git a/bsp/stm32f20x/rtconfig.h b/bsp/stm32f20x/rtconfig.h index d3cd90dbf65d08773f5a0dacc700a5b7fc8b7973..31ca5853b4f6b5c2728383607c057ec65486c708 100644 --- a/bsp/stm32f20x/rtconfig.h +++ b/bsp/stm32f20x/rtconfig.h @@ -75,6 +75,12 @@ /* SECTION: device filesystem */ /* #define RT_USING_DFS */ #define RT_USING_DFS_ELMFAT +#define RT_DFS_ELM_REENTRANT +#define RT_DFS_ELM_WORD_ACCESS +#define RT_DFS_ELM_DRIVES 1 +#define RT_DFS_ELM_USE_LFN 2 +#define RT_DFS_ELM_MAX_LFN 255 +#define RT_DFS_ELM_MAX_SECTOR_SIZE 512 /* the max number of mounted filesystem */ #define DFS_FILESYSTEMS_MAX 2 diff --git a/bsp/stm32f20x/startup.c b/bsp/stm32f20x/startup.c index a326e4419317faf17197d9b2ed6dc1d5b64d7a59..2ce6b62a113b46ad1fb7cbcfc6c762e34e62ad69 100644 --- a/bsp/stm32f20x/startup.c +++ b/bsp/stm32f20x/startup.c @@ -105,6 +105,8 @@ void rtthread_startup(void) #endif #endif + rt_hw_rtc_init(); + /* init all device */ rt_device_init_all(); diff --git a/bsp/stm32f20x/stm32f20x_it.c b/bsp/stm32f20x/stm32f20x_it.c index 2b2947391c55f47b30d18683f06d7c1618277e0e..f652129b3cd9f4fb1edf1a5a3bae0768503f11ac 100644 --- a/bsp/stm32f20x/stm32f20x_it.c +++ b/bsp/stm32f20x/stm32f20x_it.c @@ -22,6 +22,7 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32f20x_it.h" +#include /** @addtogroup Template_Project * @{ @@ -104,6 +105,30 @@ void DebugMon_Handler(void) { } +#if defined(RT_USING_DFS) && STM32_USE_SDIO +/******************************************************************************* +* Function Name : SDIO_IRQHandler +* Description : This function handles SDIO global interrupt request. +* Input : None +* Output : None +* Return : None +*******************************************************************************/ +void SDIO_IRQHandler(void) +{ + extern int SD_ProcessIRQSrc(void); + + /* enter interrupt */ + rt_interrupt_enter(); + + /* Process All SDIO Interrupt Sources */ + if( SD_ProcessIRQSrc() == 2) + rt_kprintf("SD Error\n"); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif + /** * @} */