Всем привета. Попалась под руку ATMega64L выцарапанная с одного девайса. Разобрался с подключением прошивалщтка, всё стёрлось, вроде всё отлично, но есть вопросы. Попытался собрать на этой меге свой девайс (она отличо подходит по набору переферии) и вот с цем столкнулся. Инструкция ret хрен знает как работает если M103C=0.
банальный код (упрощенно)
Код:
. LIST .def temp = r16
.CSEG .org 0x0000 jmp RESET
RESET: ldi temp, high(RAMEND) out SPH, temp ldi temp, low(RAMEND) out SPL, temp
set temp out DDRA,temp out PORTA,temp
SEI
CBI PORTA,1 //тут работает
rcall wait_1
label1: CBI PORTA,2 //а тут уже нет
end: rjmp end
wait_1: nop ret
При это если заменить (просто для проверки) - то всё работает.
Код:
wait_1: nop rjmp label1
Ошибка в работе ret именно когда в cvavr стоит галка M103C=0
Подозреваю, проблема не корректом размещении
Цитата:
.org 0x0000 jmp RESET
ldi temp, high(RAMEND) out SPH, temp ldi temp, low(RAMEND) out SPL, temp
Я уже пробовал и разные комбинации BOOTRST/BOOTSZ; размещал .org 0x7000 jmp RESET; вызываал rcall/call - ничего... Кто может объяснить, в чем проблема с ret'ом? Спасибо.
_________________ мысли мысли штош вы вйотесь над мойейу головойу вы там мосга нинайдете нед там мосга! йа тупойе (БОР)
Мне требуется два 16-бит. таймера, так что нужна Мега64. Вопрос в другом - т.к. Мега досталась не новая, там фьюзы уже были изменены и код со старта не заработал, хотя до этого такой простенький код на Мегах8/16 работал на ура. Вчера вечер убил, пока случайно не споткнулся об этот M103C. Раньше с Мегами64 дела не имел. Вот и стало интересно - почему так, и как сделать, чтобы работало правильно.
_________________ мысли мысли штош вы вйотесь над мойейу головойу вы там мосга нинайдете нед там мосга! йа тупойе (БОР)
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
У atmega103 можно подключить внешнюю статическую память. Скорее всего указатель стека инициализируются туда, т.е. в никуда. Замените константу RAMEND, на какое-нибудь число, указывающее на реальную память.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Хм, - это было бы вполне логическое объяснение! Спасибо, попробую.
Но, если неправильно подставляется RAMEND, тогде это косяк в AVR Studio виходит? Или, даже мой, т.к. я подключаю инклудник для Меги64, а всулчае с М103С - нужно инклудить для 103-й... Вечером проверю, спасибо, что ткнули носом
_________________ мысли мысли штош вы вйотесь над мойейу головойу вы там мосга нинайдете нед там мосга! йа тупойе (БОР)
Сейчас посмотрел дома инклудники, действительно: m103def: RAMEND = 0x0FFF; m64def: RAMEND = 0x10FF в случае режима совместимости (M103C = 0) указатель стека уходит за предели доступности памяти, из-за этого утечка ret'a.
Тут интересует второй вопрос: ATMega64 должна шиться при продавливании ножки prog в 0 (подтянута к земле). У меня она шьется и так и этак (ножка висит в воздухе) - это нормально? (С той лишь разницей, что если ножка висит - новая прошивка начинает работать сразу по окончании прошивки; а если шить с продавленой в ноль - то мега стартует только если ножку отпускаю).
_________________ мысли мысли штош вы вйотесь над мойейу головойу вы там мосга нинайдете нед там мосга! йа тупойе (БОР)
Тут интересует второй вопрос: ATMega64 должна шиться при продавливании ножки prog в 0 (подтянута к земле). У меня она шьется и так и этак (ножка висит в воздухе) - это нормально?
Да, это нормально.
Цитата:
2.3.15 PEN This is a programming enable pin for the SPI Serial Programming mode. By holding this pin low during a Power-on Reset, the device will enter the SPI Serial Programming mode. PEN is internally pulled high. The pullup is shown in Figure 11-1 on page 49 and its value is given in Section 29.2 “DC Characteristics” on page 304. PEN has no func- tion during normal operation.
Пасиб за подсказку с флагом JTD, я отключил JTAG фьюзом
А относительно ножки PEN - я её на автомате подтянул к плюсу 10К резаком (также как и ресет - типа правило хорошего тона, а посмотреть в букварь ума не хватило) - эх, мало у меня еще опыта, мало.
Пасиб за подсказки.
З.Ы. - коль тема по ATMega64(L) - то, может, сюда вынести всякие вопросы, связанные с ней? Например нарисовать и приаттачить мулюнок подключения SPI (несмотря на то, что (а также потому, что) в инете об этом на каждом углу спрашивают) ?? типа, мини энциклопедия вопрос/ответ*
_________________ мысли мысли штош вы вйотесь над мойейу головойу вы там мосга нинайдете нед там мосга! йа тупойе (БОР)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения