Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Запись страницы с проверкой с тремя попытками(+)

Отправлено misyachniy 25 июня 2007 г. 16:13
В ответ на: предположу, что можно просто увеличить время ожидания перед записью байта :) отправлено nestandart 25 июня 2007 г. 15:56


//********************************************************************
//***** 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 command

adr_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);
}




Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
умножьте 2 на три:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru