#define FLASH_BURST_PROG 0x25 // Byte Program - Burst Mode #define FLASH_PAGE_ERASE 0x40 // Page Erase (512 bytes) #define FLASH_BACKUP_ADDR (char*)0xFE00 char FlashPageErase(char *StartAddr) { unsigned char tmp_data; FSTAT_FACCERR = 0; // Clear error flags FSTAT_FPVIOL = 0; *StartAddr = tmp_data; FCMD = FLASH_PAGE_ERASE; // Page erase program command, takes 4000cycles FSTAT_FCBEF = 1; // Run the command _asm NOP; // wait four bus cycles _asm NOP; _asm NOP; _asm NOP; if(FSTAT_FACCERR || FSTAT_FPVIOL) return(0); // error // is the command in progress? while(!FSTAT_FCCF) __RESET_WATCHDOG(); return(1); } char FlashWrite(char* StartAddr, char* Data, unsigned int length) { FSTAT_FACCERR = 0; // Clear error flags FSTAT_FPVIOL = 0; do { unsigned char tmp_data = *Data++; while(!FSTAT_FCBEF); // wait if buffer is full *StartAddr = tmp_data; FCMD = FLASH_BURST_PROG; // Burst Byte program command FSTAT_FCBEF = 1; // Run the command _asm NOP; // wait four bus cycles _asm NOP; _asm NOP; _asm NOP; if(FSTAT_FACCERR || FSTAT_FPVIOL) return(0); // error StartAddr++; } while(--length); // is the command in progress? while(!FSTAT_FCCF) __RESET_WATCHDOG(); return(1); } char CreateBackupPoint(void) { if(FlashPageErase(FLASH_BACKUP_ADDR)) if(FlashWrite(FLASH_BACKUP_ADDR, &NV, sizeof(TNVRAM))) // sizeof(TNVRAM) = 413byte return(1); return(0); }
/* This is a linker parameter file for the mc9s08lc60 */ NAMES END SEGMENTS Z_RAM = READ_WRITE 0x0060 TO 0x00FF; // 160 byte RAM = READ_WRITE 0x0100 TO 0x085F; // 1888 byte NO_INIT_RAM_SEG = NO_INIT 0x0860 TO 0x0C5F; // 1024 byte MY_STK = NO_INIT 0x0C60 TO 0x105F; // 1024 byte ROM1 = READ_ONLY 0x1060 TO 0x17FF; ROM = READ_ONLY 0x1870 TO 0xFFAF; ROM2 = READ_ONLY 0xFFC0 TO 0xFFD1; END PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */ _DATA_ZEROPAGE, MY_ZEROPAGE INTO Z_RAM; DEFAULT_RAM INTO RAM; NO_INIT_RAM INTO NO_INIT_RAM_SEG; SSTACK INTO MY_STK; DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM; /* ROM1,ROM2 In case you want to use ROM1,ROM2 as well, be sure the option -OnB=b is passed to the compiler. */ END STACKSIZE 0x400 VECTOR 0 _Startup /* Reset vector: this is the default entry point for an application. */
Message Edited by Alban on 2007-03-14 11:41 AM