/* Partition flash routine. This function can be used to setup * the flash for enhanced EEPROM operation. In order to guarantee * the eEE endurance the partition command should only be used one * time (re-partitioning in a different configuration will erase * wear-leveling data, so endurance can no longer be guaranteed). * This function will test to make sure the flash has not been * partitioned already. * * Parameters: * eeprom_size size of the two EEPROM data sets (A and B) defines in flexmem_demo.h * dlfash_size amount of dflash memory available after partitioning defines in flexmem_demo.h * * Returns: * 1 partitioning completed successfully * 0 partitioning not completed (device is already partitioned) */ int partition_flash(int eeprom_size, int dflash_size) { /* Test to make sure the device is not already partitioned. If it * is already partitioned, then return with no action performed. */ if ((SIM_FCFG1 & SIM_FCFG1_DEPART(0xF)) != 0x00000F00) { printf("\nDevice is already partitioned.\n"); return 0; } /* Write the FCCOB registers */ FTFL_FCCOB0 = FTFL_FCCOB0_CCOBn(0x80); // Selects the PGMPART command FTFL_FCCOB1 = 0x00; FTFL_FCCOB2 = 0x00; FTFL_FCCOB3 = 0x00; /* FCCOB4 is written with the code for the subsystem sizes (eeprom_size define) */ FTFL_FCCOB4 = eeprom_size; /* FFCOB5 is written with the code for the Dflash size (dflash_size define) */ FTFL_FCCOB5 = dflash_size; /* All required FCCOBx registers are written, so launch the command */ FTFL_FSTAT = FTFL_FSTAT_CCIF_MASK; /* Wait for the command to complete */ while(!(FTFL_FSTAT & FTFL_FSTAT_CCIF_MASK)); return 1; }
U8 Flash_Erase(U16 num){ union{ U32 Word; U8 Byte[4]; }FlashDestination; FlashDestination.Word=ADDR+num*SECTOR_SIZE; FTFL->FCCOB0=FTFL_FCCOB0_CCOBn(ERSSCR); FTFL->FCCOB1=FlashDestination.Byte[2]; FTFL->FCCOB2=FlashDestination.Byte[1]; FTFL->FCCOB3=FlashDestination.Byte[0]; if(FlashCMD()==1){return 1;}//Error return 0;//Success }