beautypg.com

Texas Instruments MSC1210 User Manual

Page 193

background image

Flash Memory as Data Memory

15-11

Advanced Topics

unsigned char i;

// synchronize baud rate

autobaud();

// Set the pointer to the beginning of the page to modify

pFlashPage = (char xdata * ) PAGE_START;

// before writing the flash, we have to initialize

// the usec and msec SFRs because the flash programming

// routines rely on these SFRs

USEC = 12−1; // assume a 12 MHz clock

MSEC = 12000−1;

while(1)

{

// copy the page from FLASH to RAM

for(i=0;i

Buffer[i] = *pFlashPage++;

// increment the counter

Buffer[0] += 1;

// now erase the page

page_erase(PAGE_START, 0xff, DATA_FLASH);

Result = 0;

// and write the modified contents back into flash

for(i=0;i

Result |= write_flash_chk (PAGE_START+i, Buffer[i],

DATA_FLASH);

// re−read the counter

pFlashPage = (char xdata *) PAGE_START;

printf(”flash write returned %d, Reset counter is now %d,

press any key\n”, (int) Result, (int)(*pFlashPage));

while(RI==0);

RI = 0;

}

}

Note:

Your program must use the boot ROM routines, such as write_flash_chk, in
order to modify flash data memory, if your program is itself executing from
flash memory. That is because the instructions are being fetched from flash
memory, and writing to flash memory simultaneously causes a conflict that
results in undesired program execution. The boot ROM routines must be
used to modify flash memory whenever your program itself resides on-chip
in flash memory.