Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Помогите с записью в програмную память

Непрочитано 14.06.2007, 14:57  
alkl
Временная регистрация
 
Регистрация: 14.04.2007
Сообщений: 65
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alkl на пути к лучшему
По умолчанию Помогите с записью в програмную память

Ребята, в HI-TECH есть макрос :
flash_write(source_pointer, length, dest_pointer);
Помогите мне с ним разобраться.
Мне нужно по конкретному адресу записывать конкретный байт, как мне это сделать ?
Реклама:
alkl вне форума  
Непрочитано 15.06.2007, 17:09  
paha1956
Временная регистрация
 
Регистрация: 17.05.2006
Сообщений: 71
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
paha1956 на пути к лучшему
По умолчанию

Если речь идёт об атмегах, то запись флэш-памяти осуществляется там только страницами по 128 байт. То есть перед записью данных в флэш, необходимо считать страницу памяти, начиная с адреса, кратного 128, поменять нужные байты и записать страницу обратно.
Вот функция чтения страницы:
Код:
void read_flash_page(UINT Addr_r, UCHAR *flash_buffer)
{
UCHAR ii_r;

for (ii_r=0; ii_r ‹ 128; ii_r++)
  {
  *(flash_buffer+ii_r)=_LPM((UCHAR const __flash *)Addr_r);
  Addr_r++;
  }
}
А вот функция записи данных в флэш:

Код:
#pragma location = "CODE_BOOT"
void write_flash_page(UINT Addr_w, UCHAR *flash_buffer)
{
UCHAR ii_w;
UINT data_w;

_Wait_SPMEN;
_SPM_ERASE(Addr_w);

_Wait_SPMEN;
_Enable_RWW;

for (ii_w=0; ii_w ‹ 64; ii_w++)
  {
  data_w=(*(flash_buffer+ii_w*2))+((*(flash_buffer+i  i_w*2+1))‹‹8);

  _Wait_SPMEN;
  _SPM_FILLTEMP(Addr_w, data_w);

  Addr_w+=2;
  }
Addr_w-=128;

_Wait_SPMEN;
_SPM_PAGEWRITE(Addr_w);

_Wait_SPMEN;
_Enable_RWW;
}
Строка #pragma location = "CODE_BOOT" вставлена потому, что команда записи данных в флэш должна располагаться в области начального загрузчика, то есть в конце флэши (см. даташит).
Переменная CODE_BOOT устанавливается в параметрах при вызове компилятора.
__________________
"Имею честь иметь Вашу честь в своём доме..."
paha1956 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с записью на микроконтроллер Vitalminator Микроконтроллеры, АЦП, память и т.д 0 10.05.2008 22:03
память (внешняя память) satnettv Микроконтроллеры, АЦП, память и т.д 0 04.09.2007 15:20
Проблема с записью в EEPROM PIC Tujman Микроконтроллеры, АЦП, память и т.д 4 02.05.2007 22:32
USB Флэш память: помогите подобрать контроллер чтения/записи Vaicartana Микроконтроллеры, АЦП, память и т.д 0 30.01.2005 05:30
проблема с записью в EEPROM Zero Микроконтроллеры, АЦП, память и т.д 0 26.04.2004 15:23


Часовой пояс GMT +4, время: 11:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.