надо писать во встроенную Flash
есть функция в оперативке
Код
unsigned char WritePage(unsigned char *data,unsigned short PageNumber)
{
unsigned int i;
*MC0_FMR &= ~(0xFF<<16);
*MC0_FMR |= (36<<16)|0<<FWS; //количество периудов MCK в 1.5 микросекунде
*MC0_FMR &= ~(0x1<<7);
*MC0_FMR &=~( 0x1<<0 | 0x1<<2 | 0x1<<3);
i = 0;
do{IFLASH[i >> 2]=data[i]|(data[i+1]<<8)|(data[i+2]<<16)|(data[i + 3]<<24);i += 4;} while(i<IFLASH_PAGE_SIZE);
*MC0_FCR = 0x5A<<KEY|(PageNumber<<PAGEN)|WP<<FCMD;
while(!((i=*MC0_FSR)&FRDY));
if((i&LOCKE)||(i&PROGE))return (1);
return (0);
}
{
unsigned int i;
*MC0_FMR &= ~(0xFF<<16);
*MC0_FMR |= (36<<16)|0<<FWS; //количество периудов MCK в 1.5 микросекунде
*MC0_FMR &= ~(0x1<<7);
*MC0_FMR &=~( 0x1<<0 | 0x1<<2 | 0x1<<3);
i = 0;
do{IFLASH[i >> 2]=data[i]|(data[i+1]<<8)|(data[i+2]<<16)|(data[i + 3]<<24);i += 4;} while(i<IFLASH_PAGE_SIZE);
*MC0_FCR = 0x5A<<KEY|(PageNumber<<PAGEN)|WP<<FCMD;
while(!((i=*MC0_FSR)&FRDY));
if((i&LOCKE)||(i&PROGE))return (1);
return (0);
}
где #define IFLASH ((unsigned int*)0x00100000)
почему туда ((unsigned int*)0x00100000)?
там же начало моей проги?
почему она еще работает? там временный буфер?
(в даташите написано что все пишется через latch buffer но где этот буфер не написано)
получается я хочу записать в 30 страницу а пишу в 0вую а потом копируется?
а кто востановит 0вую? потому что все продолжает работать и после ресета.