Страница 1 из 1
Atmega168A и PA
Добавлено: Пн янв 16, 2017 20:27:40
Z_h_e
Вот такой вопрос у меня возник. Под спойлером нарезка из ДШ.
Спойлер

Видно что в 168А нет команд jmp и call. Но тут же используется jmp в таблице векторов. Атемл студио 6 смело компиллит jmp в вектора и в дезасемблере видел команды call при выбранном камне 168A. Программа работает нормально, в железе.
Вопрос. В чем прикол? Ошибка ДШ. В ерате вроде этого нет или я не туда гляжу?
Re: Atmega168A и PA
Добавлено: Пн янв 16, 2017 22:51:04
Demiurg
После того как передали ATMEL микрочипу, даташиты переделали по одним им известным шаблонам. Из-за чего в даташитах на сайте ошибки, опечатки, неточности, нарезки из разных даташитов. Из-за этого я храню старые версии даташитов.
На будущее запомните. МК от 8 кб (то есть 16, 32 и так далее) поддерживают команды jmp и call. Начиная от 16 кб векторы таблицы прерывания по 2 слова, 4 байта. То бишь - jmp. Если пишете программу на ассмеблере, можно использовать и команду rjmp, но НЕ ЗАБЫВАЙТЕ, что вектор 4 байтный! Чтобы не нарваться на такой косяк используйте следующий шаблон:
Код: Выделить всё
// vectors_atmega32.inc
.cseg
.org 0x0000
jmp Reset
; ***** INTERRUPT VECTORS ************************************************
.org INT0addr ; External Interrupt Request 0
reti ; jmp EXT_INT0
.org INT1addr ; External Interrupt Request 1
reti
.org INT2addr ; External Interrupt Request 2
reti
.org OC2addr ; Timer/Counter2 Compare Match
// jmp TIMER2_COMP
rjmp TIMER2_COMP // Пример !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.org OVF2addr ; Timer/Counter2 Overflow
reti
.org ICP1addr ; Timer/Counter1 Capture Event
reti
.org OC1Aaddr ; Timer/Counter1 Compare Match A
reti
.org OC1Baddr ; Timer/Counter1 Compare Match B
reti
.org OVF1addr ; Timer/Counter1 Overflow
reti
.org OC0addr ; Timer/Counter0 Compare Match
reti ; jmp TIMER0_COMP
.org OVF0addr ; Timer/Counter0 Overflow
reti
.org SPIaddr ; Serial Transfer Complete
reti
.org URXCaddr ; USART, Rx Complete
reti
.org UDREaddr ; USART Data Register Empty
reti
.org UTXCaddr ; USART, Tx Complete
reti
.org ADCCaddr ; ADC Conversion Complete
reti
.org ERDYaddr ; EEPROM Ready
reti
.org ACIaddr ; Analog Comparator
reti
.org TWIaddr ; 2-wire Serial Interface
reti
.org SPMRaddr ; Store Program Memory Ready
reti
;-------------------------------------------------------------------------
;-------------------------------------------------------------------------
.org INT_VECTORS_SIZE ; size in words
;===================
Я, когда писал на асме, делал такой файл на каждый используемый мк. Таблица берется из заголовочного файла на конкретный мк. Фишка в том, что .org не дает ошибиться в адресации. Ставим двухсловную команду, мы впаковываемся до следующей .org. Ставим однословную команду, компилятор следующий вектор определяет правильно адрес следующей org.
Код: Выделить всё
//---------------------------------------------------------
[] - jmp 0x0000
[] - 0x0001
[] - следующий вектор 0x02
[] -
//------------------------------------------------------
[] - reti 0x0000
[] - 0xff (заглушка) 0x0001
[] - следующий вектор 0x02
[] -
//---------------------------------------------------------
Re: Atmega168A и PA
Добавлено: Пн янв 16, 2017 23:58:27
Z_h_e
Demiurg писал(а):Из-за этого я храню старые версии даташитов.
В старом нет такой сноски на данные команды?
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 00:28:35
Demiurg
С чего вы вообще взяли, что команды не поддерживаются? Перечитайте внимательно то, что читали.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 00:31:19
Z_h_e
Note: 1. These instructions are only available in ATmega168PA and ATmega328P.
Не получается у меня по другому перевести эту фразу.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 00:38:53
Demiurg
Яндекс переводчик: Эти инструкции доступны только для микроконтроллеров atmega168pa и схема atmega328p.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 00:41:28
Z_h_e
Никакого тут яндекса не надо чтобы это понять. Данная запись указывать, что данные инструкции недоступны для Atmega168A и Atmega328.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 00:43:19
Demiurg
AVR-Studio 4.19
Код: Выделить всё
;===================
.nolist
.include "m168Adef.inc"
.list
;===================
jmp Reset
Reset:
jmp Reset
Компилируется без проблем.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 00:44:38
Z_h_e
Я говорил что не компилируется?
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 00:46:17
Demiurg
Короче, я вам написал насчет МК выше 8 кб. Ищите старые версии даташитов. Скорее всего вы их найдете в дисках AVR Technical Library.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 00:48:31
Z_h_e
Вы сказали что у Вас есть старые версии. Потому и спросил у Вас есть в старой такая сноска или нет.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 00:58:01
Demiurg
Ищу
Добавлено after 1 minute 59 seconds:
Могли бы и сами уже скачать avr technical library dvd за 2008-2010 год к примеру. Я сейчас этим и занимаюсь...
Добавлено after 6 minutes 57 seconds:
Это что по вашему? На будущее. Исходите из здравого смысла. Выше 8 кб - поддержка jmp и call. Это аксиома.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 01:02:37
Z_h_e
Demiurg писал(а):Исходите из здравого смысла.
По-моему здравый смысл - это четкое соблюдение ДШ, без догадок. Вот я и спрашивал у форумчан, ошибка или это, есть ли где указание на нее.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 01:06:15
Demiurg
На заборе бывает загадочная формула написана. И что? Будем неукоснительно следовать формуле?
Здравый смысл - rjmp и rcall - адресация на 4 кб. На ассемблере вы заколупаетесь выстраивать программу в соответствии с опечаткой в даташите.
Ваша ошибка еще и в том, что вы плохо пробежались дальше по даташиту.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 08:08:40
Engineer_Keen
Z_h_e писал(а):Никакого тут яндекса не надо чтобы это понять. Данная запись указывать, что данные инструкции недоступны для Atmega168A и Atmega328.
Смысл этой фразы в даташите в том, что инструкции доступны не относительно букв A-PA, а относительно ядер 48-88-168-328, т.к. даташит обычно общий на несколько моделей контроллеров. Т.е. в данном случае эти команды отсутствуют в 48 и 88 контролерах, независимо от того, есть там буква на конце или нет.
Вы же наверно знаете, что буквы в конце модели говорят в о корпусе или энергопотребелнии, на которые ассемблеру по барабану? Ему важна только адресуемая память, а это как раз циферки.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 08:12:20
Z_h_e
Нее. Явная опечатка. Это ж технический документ. Я ее и понял как написано и видел русский сайт, где тоже так поняли.
Re: Atmega168A и PA
Добавлено: Вт янв 17, 2017 09:47:32
BOB51
Согласно 2545T–AVR–05/11
(8-bit Atmel
Microcontroller
with 4/8/16K
Bytes In-System
Programmable
Flash
ATmega48/V
ATmega88/V
ATmega168/V)
"These instructions are only available in Atmel ATmega168" - это относительно JMP и CALL
Правда у тех 48/88/68 еррат...
