Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
//********************************************************************
//***** Write page AT91SAM7S128
//********************************************************************
int AT91_write_page_flash(unsigned int *adrFlash, unsigned int *adrImage)
{
unsigned int attempt, i, page;
unsigned int *adr_sors, *adr_code;page = (unsigned int)adrFlash >> SAM7S128_FLASH_PAGE_SIZE_BYTE_EXP;
adrFlash += (unsigned int)AT91C_IFLASH / sizeof(unsigned int);
adr_sors=adrImage;
for(attempt=0; attempt < 3; attempt++)
{
while(!(*AT91C_MC_FSR & AT91C_MC_FRDY));adr_code = adrFlash;
for( i=0; i < SAM7S128_FLASH_PAGE_SIZE_LONG; i++) *adr_code++ =*adrImage++;*AT91C_MC_FCR = (unsigned int)AT91C_MC_CORRECT_KEY |
(unsigned int)((page << 8) & AT91C_MC_PAGEN) |
(unsigned int)AT91C_MC_FCMD_START_PROG;
delay();
while(!(*AT91C_MC_FSR & AT91C_MC_FRDY)); // Wait the end of commandadr_code = adrFlash;
for(i=0; i < SAM7S128_FLASH_PAGE_SIZE_LONG; i++) if(*adr_code++ != *adr_sors++) break;
if(i == SAM7S128_FLASH_PAGE_SIZE_LONG) return(OPERATION_OK);
}
return(ERR_WR_PAGE);
}