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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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
Сообщений: 72
Сказал спасибо: 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 06:30
проблема с записью в EEPROM Zero Микроконтроллеры, АЦП, память и т.д 0 26.04.2004 14:23


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot