#include void FLASH_PageErase(ui32_t pageaddr) { HVAR(unsigned short, (pageaddr & 0xFF0000) | 0xAAAA) = 0x8080; HVAR(unsigned short, (pageaddr & 0xFF0000) | 0x5554) = 0xAAAA; HVAR(unsigned short, pageaddr) = 0x0303; while(IMB_FSR_BUSY & 0x07); } void FLASH_EnterPageMode(ui32_t pageaddr) { HVAR(unsigned short, (pageaddr & 0xFFFF00) | 0x00AA) = 0x5050; HVAR(unsigned short, pageaddr) = 0xAAAA; while(IMB_FSR_BUSY & 0x07); } void FLASH_LoadPageWord(ui32_t pageaddr, ui16_t data) { volatile ui16_t cnt; HVAR(unsigned short, (pageaddr & 0xFFFF00) | 0x00F2) = data; while(IMB_FSR_BUSY & 0x07); cnt = 0xFF; while(cnt--); } void FLASH_ProgramPage(ui32_t pageaddr) { HVAR(unsigned short, (pageaddr & 0xFFFF00) | 0x00AA) = 0xA0A0; HVAR(unsigned short, (pageaddr & 0xFFFF00) | 0x005A) = 0xAAAA; while(IMB_FSR_BUSY & 0x07); } void FLASH_ResetToRead(ui32_t pageaddr) { HVAR(unsigned short, (pageaddr & 0xFFFF00) | 0x00AA) = 0xF0F0; while(IMB_FSR_BUSY & 0x07); } ui32_t FLASH_GetPageAddress(ui8_t array, ui8_t sector, ui8_t page) { ui32_t flashbase = 0xC00000; ui32_t arraybase = (ui32_t) array * 0x040000; ui32_t sectorbase = (ui32_t) sector * 0x001000; ui32_t pagebase = (ui32_t) page * 0x000080; ui32_t retval = flashbase + arraybase + sectorbase + pagebase; return retval; }