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

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

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

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

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

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

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

 
Опции темы

AVR Mega48 и самопрограммирование

Непрочитано 16.05.2006, 15:00  
Alex_mel
Прохожий
 
Регистрация: 16.05.2006
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Alex_mel на пути к лучшему
По умолчанию AVR Mega48 и самопрограммирование

Раньше писал на асемблере для AVR-ов, с самопрограммированием вроде все было понятно - деректива .org потом физический адрес с которого будет распологаться дальнейший код загрузчика. Располагаешь это все в хвосте и при необходимости перезаписываешь через SPM весь основной текст. Теперь перешел на С от IAR, и сразу куча вопросов - как в C указать точное физическое место расположения в памяти AVR-а, для подпрограммы (функции) загрузчика. Еще как-то в нестираемую область надо поместить функции для работы с I2C, для этого надо как-то подсчитать их размер, чтоб акуратно сложить в память. Если кто сталкивался с подобным, посоветуйте что-нибудь.
Заранее благодарен!
Реклама:
Alex_mel вне форума  
Непрочитано 17.05.2006, 14:06  
paha1956
Временная регистрация
 
Регистрация: 17.05.2006
Сообщений: 71
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
paha1956 на пути к лучшему
По умолчанию AVR и самопрограммирование

Работаю в IAR AVR v3.20. Для указания адреса, по которому нужно расположить код функции, необходимо использовать директиву

#pragma location = "CODE_BOOT"

где CODE_BOOT - системная константа, которая задаётся в пункте меню Project/Options/XLINL/Extra Options. Там в окошечке нужно записать следующую строку

-Z(CODE)CODE_BOOT=хххх-уууу

где хххх и уууу - адреса начала и конца области памяти начального загрузчика (шестнадцатеричные). Код функции будет расположен по адресу хххх.
Для более ранних версий компиляторов в меню необходимого окошка может не оказаться. Тогда надо ключевую строку записывать в коммандной строке вызова компилятора (такой методом не пользовался).
Вот функция, которая предназначена для программирования памяти контроллера:

#pragma location = "CODE_BOOT"
void write_flash_page(unsigned int Addr_w, unsigned char *flash_buffer)
{
unsigned char ii_w;
unsigned int 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))‹‹;

_Wait_SPMEN;
_SPM_FILLTEMP(Addr_w, data_w);

Addr_w+=2;
}
Addr_w-=128;

_Wait_SPMEN;
_SPM_PAGEWRITE(Addr_w);

_Wait_SPMEN;
_Enable_RWW;
}

Перед вызовом этой функции необходимо считать участок перезаписываемой памяти другой функцией в буфер:

void read_flash_page(unsigned int Addr_r, unsigned char *flash_buffer)
{
unsigned char ii_r;

for (ii_r=0; ii_r ‹ 128; ii_r++)
{
*(flash_buffer+ii_r)=_LPM((unsigned char const __flash *)Addr_r);
Addr_r++;
}
}

Главное, необходимо помнить, что память меги разбита на страницы и начальный адрес считывания и записи должен быть кратен величине этой страницы, иначе результат операции не предсказуем.
paha1956 вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Собираем глюки и "подводные камни" AVR и AVR Studi Don_Ambrosio Коллекция глюков 27 14.11.2010 12:24
Самопрограммирование микроконтроллеров AVR Gn0me Микроконтроллеры, АЦП, память и т.д 4 02.04.2009 10:25
Си -> Assembler (mega48) MKsoft Микроконтроллеры, АЦП, память и т.д 7 12.03.2009 14:31
Замена mega48 на mega8 ? woroba Микроконтроллеры, АЦП, память и т.д 4 04.02.2008 21:55
Вопрос mega48+LCD. Глупо но всё же luck26 Микроконтроллеры, АЦП, память и т.д 4 15.09.2007 09:12


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


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