/********************************************************
* Function for erasing of flash memory sector (0x800)
*
********************************************************/
LWord FLASH_EraseSector(LWord destination)
{  
  LWord ret = 0, value = 0;
  CommandObj.regsLong.fccob3210 = destination;
  CommandObj.regs.fccob0 = FLASH_ERASE_SECTOR;

  #if defined(KINETIS_E)
		ret =  FLASH_FlashCommandSequenceStart(ERASE_BLOCK_INDEX);
  #else
		ret =  FLASH_FlashCommandSequenceStart(ERASE_BLOCK_INDEX);
  #endif

  /*
  //Unlock the sec bit
  if((destination >= 0x400)&&(destination < 0x800))
  {
  	  if(HWFSEC == LOCK_MCU)
  	  {
		value = 0xFFFFFFFD;
		FLASH_ProgramLongWord(0x40C,value);
	  }
	  else
	  {
		  value = 0xFFFFFFFE;
		  FLASH_ProgramLongWord(0x40C,value);
	  }
	  
  }
  */
  
  return ret;
}
/********************************************************
* Function for erasing of flash memory sector (0x800)
*
********************************************************/
LWord FLASH_EraseSector(LWord destination)
{  
  CommandObj.regsLong.fccob3210 = destination;
  CommandObj.regs.fccob0 = FLASH_ERASE_SECTOR;

  #if defined(KINETIS_E)
		return FLASH_FlashCommandSequenceStart(ERASE_BLOCK_INDEX);
  #else
		return FLASH_FlashCommandSequenceStart(ERASE_BLOCK_INDEX);
				
  #endif
  
  
}
/********************************************************
* Function for Programming of one Long Word 
*
********************************************************/
LWord FLASH_ProgramLongWord(LWord destination, LWord data32b)
{
  /* preparing passing parameter to program the flash block */
  
  CommandObj.regsLong.fccob3210 = destination;
  CommandObj.regs.fccob0 = FLASH_PROGRAM_LONGWORD;
  CommandObj.regsLong.fccob7654 = data32b; 

#if defined(KINETIS_E)
	return FLASH_FlashCommandSequenceStart(PROGRAM_LONGWORD_INDEX);
#else
	return FLASH_FlashCommandSequenceStart(PROGRAM_LONGWORD_INDEX);
#endif

  
}
/********************************************************
* Function for Programming of one Long Word 
*
********************************************************/
LWord FLASH_ProgramPhrase(LWord destination, LWord * data64b)
{
  /* preparing passing parameter to program the flash block */
  
  CommandObj.regsLong.fccob3210 = destination;
  CommandObj.regs.fccob0 = FLASH_PROGRAM_PHRASE;
  CommandObj.regsLong.fccob7654 = data64b[0];
  CommandObj.regsLong.fccobBA98 = data64b[1];
  
  return FLASH_FlashCommandSequenceStart(PROGRAM_PHRASE_INDEX);
}
/********************************************************
* Function for Programming of one Long Word 
*
********************************************************/
LWord FLASH_ProgramLongWord(LWord destination, LWord data32b)
{
  /* preparing passing parameter to program the flash block */



		
  CommandObj.regsLong.fccob3210 = destination;
  CommandObj.regs.fccob0 = FLASH_PROGRAM_LONGWORD;
  CommandObj.regsLong.fccob7654 = data32b; 
/*
  if(destination == 0x500)
  {
		CommandObj.regsLong.fccob7654  = 0x9804B003;
  }
*/

   return FLASH_FlashCommandSequenceStart(PROGRAM_LONGWORD_INDEX);
  
}