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

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

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

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

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

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

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

Закрытая тема
Опции темы
Непрочитано 16.05.2006, 15:00   #1
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   #2
paha1956
Временная регистрация
 
Регистрация: 17.05.2006
Сообщений: 72
Сказал спасибо: 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, время: 22:01.


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