Atmega168A и PA

Обсуждаем контроллеры компании Atmel.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Вот такой вопрос у меня возник. Под спойлером нарезка из ДШ.
СпойлерИзображение
Видно что в 168А нет команд jmp и call. Но тут же используется jmp в таблице векторов. Атемл студио 6 смело компиллит jmp в вектора и в дезасемблере видел команды call при выбранном камне 168A. Программа работает нормально, в железе.

Вопрос. В чем прикол? Ошибка ДШ. В ерате вроде этого нет или я не туда гляжу?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение 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
[] - 
//---------------------------------------------------------
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Demiurg писал(а):Из-за этого я храню старые версии даташитов.
В старом нет такой сноски на данные команды?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

С чего вы вообще взяли, что команды не поддерживаются? Перечитайте внимательно то, что читали.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Note: 1. These instructions are only available in ATmega168PA and ATmega328P.
Не получается у меня по другому перевести эту фразу.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Яндекс переводчик: Эти инструкции доступны только для микроконтроллеров atmega168pa и схема atmega328p.
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Никакого тут яндекса не надо чтобы это понять. Данная запись указывать, что данные инструкции недоступны для Atmega168A и Atmega328.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

AVR-Studio 4.19

Код: Выделить всё

;===================
.nolist
.include	"m168Adef.inc"
.list
;===================

jmp Reset

Reset:
jmp Reset
Компилируется без проблем.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Я говорил что не компилируется?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Короче, я вам написал насчет МК выше 8 кб. Ищите старые версии даташитов. Скорее всего вы их найдете в дисках AVR Technical Library.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Вы сказали что у Вас есть старые версии. Потому и спросил у Вас есть в старой такая сноска или нет.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Ищу

Добавлено after 1 minute 59 seconds:
Могли бы и сами уже скачать avr technical library dvd за 2008-2010 год к примеру. Я сейчас этим и занимаюсь...

Добавлено after 6 minutes 57 seconds:
Это что по вашему? На будущее. Исходите из здравого смысла. Выше 8 кб - поддержка jmp и call. Это аксиома.
Вложения
atmega168a.jpg
(97.58 КБ) 344 скачивания
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Demiurg писал(а):Исходите из здравого смысла.
По-моему здравый смысл - это четкое соблюдение ДШ, без догадок. Вот я и спрашивал у форумчан, ошибка или это, есть ли где указание на нее.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Сообщения: 1492
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

На заборе бывает загадочная формула написана. И что? Будем неукоснительно следовать формуле?
Здравый смысл - rjmp и rcall - адресация на 4 кб. На ассемблере вы заколупаетесь выстраивать программу в соответствии с опечаткой в даташите.
Ваша ошибка еще и в том, что вы плохо пробежались дальше по даташиту.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Z_h_e писал(а):Никакого тут яндекса не надо чтобы это понять. Данная запись указывать, что данные инструкции недоступны для Atmega168A и Atmega328.
Смысл этой фразы в даташите в том, что инструкции доступны не относительно букв A-PA, а относительно ядер 48-88-168-328, т.к. даташит обычно общий на несколько моделей контроллеров. Т.е. в данном случае эти команды отсутствуют в 48 и 88 контролерах, независимо от того, есть там буква на конце или нет.
Вы же наверно знаете, что буквы в конце модели говорят в о корпусе или энергопотребелнии, на которые ассемблеру по барабану? Ему важна только адресуемая память, а это как раз циферки.
Последний раз редактировалось Engineer_Keen Вт янв 17, 2017 08:17:26, всего редактировалось 1 раз.
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Нее. Явная опечатка. Это ж технический документ. Я ее и понял как написано и видел русский сайт, где тоже так поняли.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Друг Кота
Аватара пользователя
Сообщения: 15700
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение 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 еррат... :facepalm:
Ответить

Вернуться в «AVR»