X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=pyfrprog.git;a=blobdiff_plain;f=pkernel%2Fflash.c;fp=pkernel%2Fflash.c;h=fb160dd137192efa3cb879e434680f09ec9766a1;hp=c72b4633eb3dfd991932f455f644158d3bb1ae69;hb=179d0a77f47e6b4c1e5f72d19352d121511812ab;hpb=89576267a3ec91de6d4ac380969ae5d19ac7f1af diff --git a/pkernel/flash.c b/pkernel/flash.c index c72b463..fb160dd 100644 --- a/pkernel/flash.c +++ b/pkernel/flash.c @@ -63,6 +63,53 @@ void FLASH_PrepareReadMode() FMWT_WTC = 4; } +unsigned char FLASH_ChipErase(void) +{ + unsigned char flag = 0; + + /*Disable Interrupts if necessary*/ + IFlag = FLASH_SaveDisableInterruptFlag(); + + /*Set FLASH access mode to 16Bit Write Mode*/ + FLASH_PrepareWriteHalfWordMode(); + + /*Start FLASH Sector Erase Sequence*/ + *hseq_1 = 0x00AA; + *hseq_2 = 0x0055; + *hseq_1 = 0x0080; + *hseq_1 = 0x00AA; + *hseq_2 = 0x0055; + *hseq_1 = 0x0010; + + /*Wait for the Auto Algorithm to finish*/ + while( flag == 0 ) { + /* Feed Hardware Watchdog */ + HWWD_CL = 0; + + if(*hseq_1 & DPOLL) { + flag = 1; + } + if(*hseq_1 & TLOVER) { + if(*hseq_1 & DPOLL) { + flag = 1; + } + else { + /*Reset FLASH (keep in mind 16Bit access to FLASH)*/ + *hseq_1 = 0x00F0; // Keep in Mind (16Bit access) + + flag = 2; + } + } + } + + /*Set FLASH access mode to 32Bit Read Mode*/ + FLASH_PrepareReadMode(); + + /*Restore the original Interrupt Flag*/ + FLASH_RestoreInterruptFlag(IFlag); + + return flag; +} unsigned char FLASH_SectorErase(unsigned int secadr) {