Запись в flash для Cygnal C8051F064
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ПиТёК 05 августа 2005 г. 17:47

Никак не получается сабж.
Пробовал и сам код написать по даташиту,
и готовый кусок из 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
// FLASH_PageErase((FLADDR) dest, 0);
// for (i=0; i// а это свое...

EA = 0; // disable interrupts
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

*pwrite = 0; // initiate page erase

PSCTL &= ~0x02; // PSEE = 0

for(i=0; i *pwrite++=src[i];
}

PSCTL &= ~0x03; // PSWE = 0;
FLSCL &= ~0x01; // disable FLASH writes/erases
WDTCN = 0x07; // Enable WDT for 47ms at 22 MHz

SFRPAGE = SFRPAGE_SAVE; // restore SFRPAGE
EA = EA_SAVE;
}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru