/* Initializes the SDC card controller */ void Chip_SDC_Init(LPC_SDC_T *pSDC) { uint32_t i = 0; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SDC); Chip_SYSCTL_PeriphReset(SYSCTL_RESET_PCSDC); /* Initialize GPDMA controller */ Chip_GPDMA_Init(LPC_GPDMA); /* Initialize SDC peripheral */ SDC_Init(pSDC); /* Power-up SDC Peripheral */ Chip_SDC_PowerControl(pSDC, SDC_POWER_UP, 0); /* delays for the supply output is stable*/ for ( i = 0; i < 0x80000; i++ ) {} Chip_SDC_SetClock(pSDC, SDC_IDENT_CLOCK_RATE); Chip_SDC_ClockControl(pSDC, SDC_CLOCK_ENABLE, ENABLE); /* Power-on SDC Interface */ Chip_SDC_PowerControl(pSDC, SDC_POWER_ON, 0); }
/******************************************************************************* ** Name: SdcDevInit ** Input:HDC dev ** Return: rk_err_t ** Owner:Aaron.sun ** Date: 2014.2.19 ** Time: 15:59:49 *******************************************************************************/ _DRIVER_SDMMC_SDMMCDEVICE_INIT_ rk_err_t SdcDevInit(SDC_DEVICE_CLASS * pstSdcDev) { //open sdmmc or emmc clk rk_printf("enSdMmcPort =%d\n",pstSdcDev->enSdMmcPort); //Default initialization state, you can change from IOCONTROL //SDC_Init(pstSdcDev->enSdMmcPort, SYS_MAX_FREQ); SDC_Init(pstSdcDev->enSdMmcPort, SYS_MAX_FREQ); return RK_SUCCESS; }
/** * @brief Main program * @param None * @retval None */ int main(void) { uint16_t u16Menu=0; uint32_t u32FlashID = 0; uint8_t Tx_Buffer[] = "miniSTM32 SPI Flash Test Data"; uint8_t Rx_Buffer[READ_BUFFER_SIZE] = {0x20}; /* Initialize SysTick - 1msec resolution */ SysTick_Config(SystemCoreClock / 1000); /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Initialize main board peripherals */ MBD_Init(); printf("miniSTM32 mainboard initialized\n"); /* Initialize SPI FLASH driver */ SFL_Init(); printf("serial FLASH initialized\n"); #ifdef SD_RAW_ACCESS /* Initialize SD subsystem : for FAT test it is automatic */ if(SDC_Init() == SD_OK) { printf("SD interface initialized\n"); } else { printf("SD interface init fail\n"); } #endif while (1) { /* main menu controlled by pushbutton interrupt */ if( uIRQFlag == MAIN_BTN_EXTI_LINE ) { /* clear button interrupt flag */ uIRQFlag = 0; if( u16Menu == MENU_LED_ON ) { MBD_LEDOn(); printf("LED1 Turned On\n"); } else if( u16Menu == MENU_LED_OFF ) { MBD_LEDOff(); printf("LED1 Turned Off\n"); } else if( u16Menu == MENU_FLASH_READID ) { u32FlashID = SFL_ReadID(); printf("JEDEC Flash ID: %X\n", u32FlashID); } else if( u16Menu == MENU_FLASH_WRITE ) { SFL_Erase(EBSIZE_4KB, FLASH_ADDRESS); SFL_WriteBuffer(Tx_Buffer, FLASH_ADDRESS, sizeof(Tx_Buffer)); printf("FLASH Write Data: %s\n", Tx_Buffer); } else if( u16Menu == MENU_FLASH_READ ) { SFL_ReadBuffer(Rx_Buffer, FLASH_ADDRESS, sizeof(Rx_Buffer)); printf("FLASH Read Back: %s\n", Rx_Buffer); } else if( u16Menu == MENU_FLASH_ERASE ) { SFL_Erase(EBSIZE_4KB, FLASH_ADDRESS); printf("FLASH Erase Block: Data Erased\n"); } else if( u16Menu == MENU_FLASH_ERASECHECK ) { SFL_ReadBuffer(Rx_Buffer, FLASH_ADDRESS, sizeof(Rx_Buffer)); printf("FLASH Read Data Again: %s\n", Rx_Buffer); } #ifdef SD_RAW_ACCESS else if( u16Menu == MENU_SD_ERASE ) { // #ifdef SD_DMA_MODE SD_EraseTest(); // #else // printf("EraseTest does not support SD_POLLING_MODE\n"); // #endif } else if( u16Menu == MENU_SD_BLOCK ) { SD_SingleBlockTest(); } else if( u16Menu == MENU_SD_MULTIBLOCK ) { // #ifdef SD_DMA_MODE SD_MultiBlockTest(); // #else // printf("MultiBlockTest does not support SD_POLLING_MODE\n"); // #endif } #else else if( u16Menu == MENU_FAT_TEST ) { if(FAT_Test() == PASSED) printf("FAT Test Passed\n"); else printf("FAT Test Failed\n");; } #endif // SD_RAW_ACCESS if( ++u16Menu == MENU_END ) u16Menu = 0; } /* usual household routine goes here */ { } } }