#include "FlashConfig.h" #include "FlashOS.h" #include "FlashOperations.h" /* * Initialize Flash Programming Functions * Parameter: adr: Device Base Address * clk: Clock Frequency (Hz) * fnc: Function Code (1 - Erase, 2 - Program, 3 - Verify) * Return Value: 0 - OK, 1 - Failed */ int Init(unsigned long adr, unsigned long clk, unsigned long fnc) { if (Flash_Init() != 0) return 1; /* Verify operation */ if (fnc == 3) { if (Flash_Map() != 0) return 1; } return 0; } /* * De-Initialize Flash Programming Functions * Parameter: fnc: Function Code (1 - Erase, 2 - Program, 3 - Verify) * Return Value: 0 - OK, 1 - Failed */ int UnInit(unsigned long fnc) { if (fnc == 3) { if (Flash_UnMap() != 0) return 1; } if (Flash_Deinit() != 0) return 1; return 0; } /* * Erase complete Flash Memory * Return Value: 0 - OK, 1 - Failed */ int EraseChip(void) { if (Flash_EraseChip() != 0) return 1; return 0; } /* * Erase Sector in Flash Memory * Parameter: adr: Sector Address * Return Value: 0 - OK, 1 - Failed */ int EraseSector(unsigned long adr) { uint32_t sector_offset = (adr - APP_FLASH_BASE) & ~(APP_FLASH_SECTOR_SIZE - 1); if (Flash_EraseSector(sector_offset) != 0) return 1; return 0; } /* * Program Page in Flash Memory * Parameter: adr: Page Start Address * sz: Page Size * buf: Page Data * Return Value: 0 - OK, 1 - Failed */ int ProgramPage(unsigned long adr, unsigned long size, unsigned char *buffer) { uint32_t page_start = (adr - APP_FLASH_BASE); if (Flash_ProgramPage(page_start, buffer, size) != 0) return 1; return 0; } unsigned long Verify(unsigned long adr, unsigned long sz, unsigned char *buf) { while (sz-- > 0) { if (*(char *)adr++ != *((char *)buf++)) return (adr); } return adr; }