示例#1
0
int32_t DrvFMC_WriteConfig(uint32_t u32data0, uint32_t u32data1)
{		//Only in LDROM
  uint32_t u32data[256];
  DrvFMC_ReadBuffer(0, u32data, 1024);
  DrvFMC_Erase(0);

	if ( DrvFMC_Erase(CONFIG0) ) //2011.4.7
		return E_DRVFMC_ERR_ISP_FAIL;

  DrvFMC_WriteBuffer(0, u32data, 1024);

	if ( DrvFMC_Write(CONFIG0, u32data0) ) //2011.4.7
		return E_DRVFMC_ERR_ISP_FAIL;
	return DrvFMC_Write(CONFIG1, u32data1);
}
示例#2
0
int32_t DrvFMC_WriteConfig(uint32_t u32data0, uint32_t u32data1)
{       
    if ( DrvFMC_Erase(CONFIG0) != E_SUCCESS )
//        return E_DRVFMC_ERR_ISP_FAIL;
		return 0;
    
    if ( DrvFMC_Write(CONFIG0, u32data0) != E_SUCCESS )
//        return E_DRVFMC_ERR_ISP_FAIL;	
		return 0;
    return DrvFMC_Write(CONFIG1, u32data1);
}
示例#3
0
/**
 * @brief       Config Erase
 *
 * @param       None
 *
 * @return      None
 *
 * @details     Erase Config0 and  Config1
 */
void CONFIG_Erase(void)
{
    int32_t ret;

    FMC_ENABLE_CFG_UPDATE();
    ret = DrvFMC_Erase(CONFIG_START_ADDRESS);
    if(ret < 0)
    {
        printf("Config Erase Error\n");
        while(1);
    }
}
示例#4
0
/**
 * @brief       APROM Erase
 *
 * @param       None
 *
 * @return      None
 *
 * @details     APROM Erase
 */
void APROM_Erase(void)
{
    uint32_t ulCount;
    uint16_t uiPageCount;
    int32_t ret;

    uiPageCount = (uint16_t)((APROM_SIZE-APROM_START_ADDRESS)/PAGE_SIZE);        //中:1024*16/512=32 pages//en:1024*16/512=32 pages
    for(ulCount=0;ulCount<(uint32_t)uiPageCount;ulCount++)
    {
        ret = DrvFMC_Erase(APROM_START_ADDRESS + ulCount*PAGE_SIZE);  //中:写地址//en:Write address
        if(ret < 0)
    	{
            printf("APROM Erase error\n");
            while(1);
    	}
    }
}
示例#5
0
/**
 * @brief       Erase LDROM
 *
 * @param       None
 *
 * @return      None
 *
 * @details     Erase LDROM
 */
void LDROM_Erase(void)
{
    uint32_t ulCount;
    uint8_t ucPageCount;
    int32_t ret;

    FMC_ENABLE_LD_UPDATE();                             //中:使能更新LDROM功能//en:Enable update LDROM

    ucPageCount = (uint8_t)(LDROM_SIZE/PAGE_SIZE);         //中: 页数 //en: page number
    for(ulCount=0;ulCount<(uint32_t)ucPageCount;ulCount++)
    {
    	ret = DrvFMC_Erase(LDROM_START_ADDRESS + ulCount*PAGE_SIZE);  //中:擦除//en:erase
    	if(ret < 0)
    	{
            printf("LDROM Erase error\n");
    	    while(1);
    	}
    }
}
示例#6
0
//============================================================================
// DATA FLASH OPERATION
// u32addr : 0-1024 (For 4KBytes Data Flash)
// u32data : 0-0xFFFFFFFF (4Bytes)
//============================================================================
void DATA_FLASH_Write(uint32_t u32addr,uint32_t u32data)
{
    uint32_t i=0;
#ifdef M451
    SYS_UnlockReg();
    FMC_Open();

    for(i=0; i<PAGE_SIZE; i++)
        data_buff[i] = FMC_Read(DATA_Flash_Start_ADD+i*4+ u32addr/PAGE_SIZE*2048);

    FMC_Erase(DATA_Flash_Start_ADD+u32addr/PAGE_SIZE*2048);
    data_buff[u32addr%PAGE_SIZE]=u32data;

    for(i=0; i<PAGE_SIZE; i++)
        FMC_Write(DATA_Flash_Start_ADD+i*4+ u32addr/PAGE_SIZE*2048, data_buff[i]);

    FMC_Close();
    SYS_LockReg();
#else
    uint32_t data_buff[PAGE_SIZE];
    __set_PRIMASK(1);//Avoid interrupt

    UNLOCKREG();
    DrvFMC_EnableISP();

    for(i=0; i<PAGE_SIZE; i++)
        DrvFMC_Read(DATA_Flash_Start_ADD+i*4+ u32addr/128*512, &data_buff[i]);

    DrvFMC_Erase(DATA_Flash_Start_ADD+u32addr/128*512);

    data_buff[u32addr%128]=u32data;

    for(i=0; i<PAGE_SIZE; i++)
        DrvFMC_Write(DATA_Flash_Start_ADD+i*4+ u32addr/128*512, data_buff[i]);

    DrvFMC_DisableISP();
    LOCKREG();
    __set_PRIMASK(0);
#endif

}
示例#7
0
/******************************************************************************//**
 *@brief  A simple FMC example. It Erase the LDROM and Verify ,then Program LDROM
 *        and read out data to compare.
 *@param  None
 *@return None 
**********************************************************************************/
void FMC_LDROM(void)
{
	uint32_t u32Data, i;
	int32_t  i32Err;
//	STR_UART_T sParam;

	/* Unlock the protected registers */
	UNLOCKREG();

	/* Enable the 12MHz oscillator oscillation */
	SYSCLK->PWRCON.XTL12M_EN = 1;

	/* Waiting for 12M Xtal stable */
	while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1);

	/* Set UART Pin */
	DrvGPIO_InitFunction(E_FUNC_UART0);

	/* UART Setting */
/*	sParam.u32BaudRate 		= 115200;
	sParam.u8cDataBits 		= DRVUART_DATABITS_8;
	sParam.u8cStopBits 		= DRVUART_STOPBITS_1;
	sParam.u8cParity 		= DRVUART_PARITY_NONE;
	sParam.u8cRxTriggerLevel= DRVUART_FIFO_1BYTES;
*/
	/* Select UART Clock Source From 12MHz */
	DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0);

	/* Set UART Configuration */
//	DrvUART_Open(UART_PORT0, &sParam);

	/* Enable ISP function */
	DrvFMC_EnableISP();
	/* Enable LDROM update */
	DrvFMC_EnableLDUpdate();

	/* Page Erase LDROM */
	printf("Erase LDROM test...............................");
	for(i=0; i<4096; i+=PAGE_SIZE)
		DrvFMC_Erase(LDROM_BASE + i);
	/* Erase Verify */
	i32Err = 0;
	for(i = LDROM_BASE; i < (LDROM_BASE+4096); i += 4)
	{
		DrvFMC_Read(i, &u32Data);

		if(u32Data != 0xFFFFFFFF)
		{
			i32Err = 1;
		}
	}
    if (i32Err)
        printf("[FAIL]\n\r");
    else
        printf("[OK]\n\r");

	/* Program LD ROM and read out data to compare */
	printf("Program LDROM test.............................");
	for(i = LDROM_BASE; i < (LDROM_BASE+4096); i += 4)
	{
		DrvFMC_Write(i, i);
	}
	i32Err = 0;
	for(i = LDROM_BASE; i < (LDROM_BASE+4096); i += 4)
	{
		DrvFMC_Read(i, &u32Data);
		if(u32Data != i)
		{
			i32Err = 1;
		}
	}
    if (i32Err)
        printf("[FAIL]\n\r");
    else
        printf("[OK]\n\r");

	/* Disable ISP function */
	DrvFMC_DisableISP();

	/* Lock protected registers */
	LOCKREG();

	printf("FMC Sample Code Completed!\n\r");
}