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

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

код(+)

Отправлено IV 10 сентября 2007 г. 17:53
В ответ на: AT91SAM7S64. не могу внутрипрограммно записать флэшку -> отправлено <font color=gray>vovchk</font> 10 сентября 2007 г. 17:19


__ramfunc unsigned int FlashWriteCriticalSection(unsigned long Page)
{
unsigned long status = 0;

/* Устанавливаем базовый адрес Flash контроллера */
AT91PS_MC ptMC = AT91C_BASE_MC;

/* Устанавливаем команду записи Flash */
ptMC->MC_FCR = AT91C_MC_CORRECT_KEY | AT91C_MC_FCMD_START_PROG | (AT91C_MC_PAGEN & (Page << 8)) ;

/* Ожидаем выполнения команды */
while ((status & AT91C_MC_FRDY) != AT91C_MC_FRDY )
status = AT91C_BASE_MC->MC_FSR;

return status;
}

/* Запись во флэш */
int FlashWrite(unsigned char *buf, unsigned long page)
{
unsigned long *Flash = (unsigned long *)(page * AT91C_IFLASH_PAGE_SIZE + (unsigned long)AT91C_IFLASH);

/* Устанавливаем время ожидания записи во флэш */
AT91C_BASE_MC->MC_FMR = ((AT91C_MC_FMCN) & (72 << 16)) | AT91C_MC_FWS_1FWS;

/* Копируем новые значения в буфер */
for (unsigned long i = 0; i < 32; i++)
{
unsigned long lwd = buf[i * 4] + (buf[i * 4 + 1] << 8) + (buf[i * 4 + 2] << 16) + (buf[i * 4 + 3] << 24);
*Flash = lwd;
Flash++;
}

__disable_interrupt(); /* Запрещаем прерывания на время записи */
unsigned int status = FlashWriteCriticalSection(page);
__enable_interrupt(); /* Разрешаем прерывания */

/* Проверка результата */
if ((status & (AT91C_MC_PROGE | AT91C_MC_LOCKE)) != 0)
return 0;

return 1;
}
void *FlashInit(unsigned long page){
return (void*) (page * AT91C_IFLASH_PAGE_SIZE + (unsigned long)AT91C_IFLASH);
}




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

Ответы


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

Сообщение:

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

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

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

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