/*=====================================================================================================*/
int main( void )
{
  SystemInit();
  LED_Config();
  KEY_Config();

#if FLASH_RW_U8
  Flash_EraseSector(Flash_GetSector(FLASH_SECTOR_6));
  Flash_WriteDataU8(FLASH_SECTOR_6, WriteDataU8, 1024);
  Flash_ReadDataU8(FLASH_SECTOR_6, ReadDataU8, 1024);
  LED_R = (Cmp_ArrU8(WriteDataU8, ReadDataU8, 1024) == SUCCESS) ? 0 : 1;
#endif

#if FLASH_RW_U16
  Flash_EraseSector(Flash_GetSector(FLASH_SECTOR_6));
  Flash_WriteDataU16(FLASH_SECTOR_6, WriteDataU16, 512);
  Flash_ReadDataU16(FLASH_SECTOR_6, ReadDataU16, 512);
  LED_G = (Cmp_ArrU16(WriteDataU16, ReadDataU16, 512) == SUCCESS) ? 0 : 1;
#endif

#if FLASH_RW_U32
  Flash_EraseSector(Flash_GetSector(FLASH_SECTOR_6));
  Flash_WriteDataU32(FLASH_SECTOR_6, WriteDataU32, 256);
  Flash_ReadDataU32(FLASH_SECTOR_6, ReadDataU32, 256);
  LED_B = (Cmp_ArrU32(WriteDataU32, ReadDataU32, 256) == SUCCESS) ? 0 : 1;
#endif

  Delay_10ms(100);
  while(1) {
    LED_R = !LED_R;
    LED_G = !LED_G;
    LED_B = !LED_B;
    Delay_10ms(10);
  }
}
/*====================================================================================================*/
void Flash_EraseSectors( u32 EraseSectorStart, u32 EraseSectorEnd )
{
    FLASH_Status FLASHStatus;

    EraseSectorStart = Flash_GetSector(EraseSectorStart);
    EraseSectorEnd   = Flash_GetSector(EraseSectorEnd);

    FLASH_Unlock();

    FLASH_ClearFlag(FLASH_FLAG_EOP    | FLASH_FLAG_OPERR  | FLASH_FLAG_WRPERR |
                    FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
    while(EraseSectorStart <= EraseSectorEnd) {
        FLASHStatus = FLASH_EraseSector(EraseSectorStart, VoltageRange_3);
        while(FLASHStatus != FLASH_COMPLETE);
        EraseSectorStart += (EraseSectorStart == FLASH_Sector_11)? 40 : 8;
    }

    FLASH_Lock();
}
/*====================================================================================================*/
void Flash_EraseSector( u32 EraseSector )
{
    FLASH_Status FLASHStatus;

    EraseSector = Flash_GetSector(EraseSector);

    FLASH_Unlock();

    FLASH_ClearFlag(FLASH_FLAG_EOP    | FLASH_FLAG_OPERR  | FLASH_FLAG_WRPERR |
                    FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);
    FLASHStatus = FLASH_EraseSector(EraseSector, VoltageRange_3);
    while(FLASHStatus != FLASH_COMPLETE);

    FLASH_Lock();
}