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

 
 
> Самодельный JTAG ICE + Mega128: при отладке "прыгает не туда"
gluckmaker
сообщение Jan 20 2008, 01:14
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 17-09-07
Из: Москва
Пользователь №: 30 594



Пытаюсь отлаживать простейшую программу в AVR Studio 4.13:

.include "m128def.inc"
rjmp RESET ;Reset Handle
RESET:
ldi r16,$40
out DDRD,r16
lp:
ldi r16,$40
out PORTD,r16
ldi r16,$00
out PORTD,r16
rjmp lp

Запускаю её через Auto Step. Через некоторое время отладка останавливается: курсор стоит на какой-то строчке, в статусной строке Студия показывает "Running", светодиод на отладчике горит постоянно или "подмигивает". Когда до метки RESET и после последнего rjmp был какой-то неиспользуемый код, оно не висло, а переходило вместо очередного шага в произвольную точку этого кода. Возникает резонный вопрос: WTF?

Сделал 2 варианта JTAG ICE: и с отдельным питанием, супервизором и согласованием с таргетом, и упрощённый, в котором Mega16 напрямую подключается к меге в таргете - оба ведут себя одинаково. Таргет - ATMega128-16AI c кварцем на 16.384 МГц, к ней подключен светодиод и MAX232. Цепь сброса - конденсатор на землю и резистор на питание. Плата с мегой без отладчика работает нормально. Кабель между отладчиком и таргетом пробовал сначала длинный (30 см), потом укоротил до 5 см. Частоту TCK в настройках уменьшал до 50 кГц. Скорость пробовал и 19200 (по умолчанию), и 9600. Симптомы всегда одни и те же.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Qwertty
сообщение Jan 20 2008, 01:56
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Вектора у М128 расчитаны на использование команды jmp, а не rjmp. У Вас метка RESET находится ВНУТРИ 0-го вектора. Попробуйте так:
.include "m128def.inc"
.cseg
.org 0x0000
jmp RESET ;Reset Handle

.cseg
.org 0x0046
RESET:
ldi r16,$40
out DDRD,r16
lp:
ldi r16,$40
out PORTD,r16
ldi r16,$00
out PORTD,r16
rjmp lp
Не уверен, что решит Вашу роблему, но так все же правильнее.

Сообщение отредактировал Qwertty - Jan 20 2008, 01:57
Go to the top of the page
 
+Quote Post
Guest_=VRA=_*
сообщение Jan 20 2008, 13:01
Сообщение #3





Guests






Цитата(Qwertty @ Jan 20 2008, 04:56) *
Вектора у М128 расчитаны на использование команды jmp, а не rjmp. У Вас метка RESET находится ВНУТРИ 0-го вектора
Вектора у М128 расчитаны не на jmp, а на правильное понимание их сути, разжеванной в ДШ до безобразия. Следующие примеры работают одинаково корректно, а почему - попробуй догадаться самостоятельно:

Код
.cseg
.org 0x0000
        jmp RESET;Reset Handle

.org 0x0046
RESET:
        ldi r16,$40
        out DDRD,r16

;-----------------------------------------------




Код
.cseg
.org 0x0000
        rjmp RESET;Reset Handle

.org 0x0046
RESET:
        ldi r16,$40
        out DDRD,r16

;-----------------------------------------------




Код
.cseg
.org 0x0000
RESET:
        ldi r16,$40
        out DDRD,r16

;-----------------------------------------------


Из этого сделай вывод - не учи других тому, чего не знаешь сам.



gluckmaker: попробуй вставить внутрь цикла команду WDR
Go to the top of the page
 
+Quote Post



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

 


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


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