реклама на сайте
подробности

 
 
> Помогите. AVRstudio+Jtag+Atmega128
big_nikolas
сообщение Nov 2 2006, 10:07
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 28-04-06
Пользователь №: 16 574



help.gif
Всем привет! Помогите разобраться, плиз.
Накалякал простую программу:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

#define Freq 16000000

SIGNAL(SIG_OVERFLOW1)
{
TCNT1 = 0x10000 - (Freq / 1024);
PORTA ^= 0x01;
}

int main (void)
{
DDRA = 0x01;
TCCR1A = 0;
TCCR1B = 5;
TCNT1 = 0x10000 - (Freq / 1024);
TIFR = 0;
TIMSK = 0x04;

sei();
while(1);
}
Подключил JTAGice собранный своими руками. Всё вроде нормально. Запустил программу, эмулятор зашуршал, светодиодик через каждую секунду замигал (на тестируемой плате) см. программу. Поставил breakpoint на начало прерывания, всё нормально. Остановился в прерывании, жму RUN, тоже всё нормально возвращается к breakpoint. Начинаю делать step into, когда доходит до конца подпрограммы прерывания и как-бы зависает. Нажимаю на паузу он высвечивает окно Дизассемблера и показывает что жёлтая стрелочка находится вне телы программы на не понятном адресе. Посмотрел окно памяти DATA а там о ужас непонятные числа и причём вся область, и когда он возвращается из подпрограммы он выходит по лже-значениям в DATA, а не по значению адреса сохраннём стеком.
За што зацепится, даже ума не приложу. Мож кто подскажет, ЧТО ЭТО? help.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
big_nikolas
сообщение Nov 3 2006, 06:35
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 28-04-06
Пользователь №: 16 574



Спасибо Klop что откликнулся. Но дело, по ходу, в другом.
Чего я обнаружил: У Atmega128 внутреннее ОЗУ с $0100 по $10FF. Так вот, компилятор С естественно указатель стека записывает в конец ОЗУ. НО! как видно из приложенного фото, ОЗУ забито непонятно чем, начиная с адреса $0FFE по $10FF записано хрен знает што и я даже изменить это значение не могу.
Взял специально в программе указал стек $0FEE и у меня всё заработало.
ЧТО ЭТО? может я настройки какие то в AVRstudio не сделал, но микросхему atmega128 я выбрал, он память определил правильно. Или же это что-то с контроллером? тогда как проверить?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
aesok
сообщение Nov 3 2006, 10:06
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Разберитесь с фюзой M103

Анатолий.
Go to the top of the page
 
+Quote Post
big_nikolas
сообщение Nov 3 2006, 10:50
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 28-04-06
Пользователь №: 16 574



Цитата(aesok @ Nov 3 2006, 13:06) *
Разберитесь с фюзой M103

Анатолий.



Спасибо большое! Тема закрыта. Заработало ОЗУ, а также заработал и бит порта F как цифровой выход, паралельно с другим входом порта F как АЦП

Обязательно знать всем кто связывается с Atmega128:

Режим совместимости с ATmega103

Если запрограммировать конфигурационный бит M103C, то ATmega128 будет функционировать в режиме совместимости с ATmega103, настраивая ОЗУ, линии ввода-вывода и векторы прерываний как описано выше. Однако, некоторые новые функции ATmega128 в этом режиме станут недоступными. Данные функции перечислены ниже:

Один УСАПП вместо двух, только асинхронный режим. Доступны только 8 младших разрядов в регистре скорости связи.
Один 16-разр. таймер-счетчик с двумя регистрами сравнения вместо двух 16-разр. таймер-счетчиков с тремя регистрами сравнения.
Не поддерживается двухпроводной последовательный интерфейс.
Порт C действует только на вывод.
Порт G выполняет только альтернативные функции (не универсальный ввод-вывод).
Порт F действует только как цифровой ввод в дополнение к аналоговому вводу к АЦП.
Не поддерживаются возможности автономного программирования из загрузочного сектора.
Не возможно регулировать частоту внутреннего калиброванного RC-генератора.
Интерфейс внешней памяти не может освободить неиспользуемые адресные сигналы для задач универсального ввода-вывода, не конфигурируются различные паузы для разных диапазонов адресов внешней памяти.
Кроме того, для большей совместимости с ATmega103 выполнены другие незначительные изменения:

В регистре MCUCSR присутствуют только EXTRF и PORF.
Временная последовательность не требуется для изменения периода переполнения сторожевого таймера.
Запросы на внешние прерывания 3 - 0 генерируются только по уровню входного сигнала.
УСАПП не имеет буфера FIFO, поэтому, переполнение при приеме данных происходит раньше.
Неиспользуемые биты ввода-вывода у ATmega103 должны быть сброшены (запись 0) для гарантирования одинакового функционирования в составе ATmega128.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 06:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016