Цитата(MiklPolikov @ Dec 26 2008, 10:23)

Как записать во FLASH ?
Для начала прочитать в DS раздел Embedded Flash Controller (EFC).
Затем можно воспользоваться таким кодом:
Код
//******************************************************************************
//* Flash service subroutines
#define FMCN1 (0x30 << 0x10)
#define FMCN1_5 (0x48 << 0x10)
int flash_write_page(u_int addr, u_char *data)
{
u_int a, page;
page = addr >> 8;
AT91C_BASE_MC->MC_FMR = (AT91C_BASE_MC->MC_FMR & ~(AT91C_MC_FMCN | AT91C_MC_NEBP)) | FMCN1_5;
a = 0;
do
{
((reg_32 *)AT91C_IFLASH)[a >> 2] =
data[a] | (data[a + 1] << 8) | (data[a + 2] << 16) | (data[a + 3] << 24);
a += 4;
} while(a < AT91C_IFLASH_PAGE_SIZE);
AT91C_BASE_MC->MC_FCR = (0x5a << 24) | ((page << 8) & AT91C_MC_PAGEN) | AT91C_MC_FCMD_START_PROG;
while(!((a = AT91C_BASE_MC->MC_FSR) & AT91C_MC_FRDY));
if((a & AT91C_MC_LOCKE) || (a & AT91C_MC_PROGE))
{
dprintf("Flash: Write Error (FSR = 0x%08x, Page = %03x).\r\n", a, page);
return -1;
}
return 0;
}
Только нужно помнить, что читать flash во время записи нельзя, т.е. код должен быть расположен в RAM, любые обращения к flash во время записи (в прерываниях, например) должны быть исключены.