/* 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);

}
예제 #2
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;
}
예제 #3
0
/**
 * @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 */
		{
		}
	}
}