|
Никак не получается сабж.
Пробовал и сам код написать по даташиту,
и готовый кусок из AN201 (F060_FlashPrimitives),
никак не выходит...
Подскажите, какие грабли на этом пути ?
что я делаю неправильно ?
код прилагается:
====================================================
code uchar FLASH_DATA[0x100] _at_ 0xFA00;
void main (void)
{
...
EEmemcpy(FLASH_DATA, NVRAM, 0x100);
...
}
void EEmemcpy(uchar *dest, uchar *src, uint len)
{ uint i;
char SFRPAGE_SAVE = SFRPAGE; // preserve SFRPAGE
bit EA_SAVE = EA; // preserve EA
char xdata * data pwrite; // FLASH write pointer
// это с помощью FlashPrimitives из AN201 EA = 0; // disable interrupts *pwrite = 0; // initiate page erase PSCTL &= ~0x02; // PSEE = 0 for(i=0; i PSCTL &= ~0x03; // PSWE = 0; SFRPAGE = SFRPAGE_SAVE; // restore SFRPAGE
E-mail:
info@telesys.ru
// FLASH_PageErase((FLADDR) dest, 0);
// for (i=0; i
WDTCN = 0xDE; // disable watchdog timer
WDTCN = 0xAD;
pwrite = (char xdata *) dest; // initialize erase pointer
SFRPAGE = LEGACY_PAGE;
FLSCL |= 0x01; // enable FLASH writes/erases
PSCTL |= 0x03; // PSWE = 1; PSEE = 1
PSCTL &= ~0x04; // clear SFLE (don't touch Flash scratchpad)
RSTSRC = 0x02; // enable VDDMON as reset source
}
FLSCL &= ~0x01; // disable FLASH writes/erases
WDTCN = 0x07; // Enable WDT for 47ms at 22 MHz
EA = EA_SAVE;
}
Ответы