Например TDA7294

Форум РадиоКот • Просмотр темы - atmega 128 прерывание по таймеру
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт июл 11, 2025 12:36:26

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 29 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: atmega 128 прерывание по таймеру
СообщениеДобавлено: Ср май 23, 2012 12:36:51 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
BOB51 писал(а):
Kavka, а в случае применения "перемещенной" таблицы векторов такой подход всегда сработает?(см. адреса переконфигурации таблиц для "больших" мег - язва я) :cry:
Ты вот про такое?
Код:
.include "m128def.inc"

.cseg
.org 0
      jmp RESET
.org INT0addr
      reti
.org INT1addr
      reti
.org INT2addr
      reti
.org INT3addr
      reti

.org INT_VECTORS_SIZE

RESET:
loop:
      jmp loop


.org FIRSTBOOTSTART
      jmp BOOTLOADER
.org FIRSTBOOTSTART + INT0addr
BOOT_INT0:
      reti
.org FIRSTBOOTSTART + INT1addr
BOOT_INT1:
      reti
.org FIRSTBOOTSTART + INT2addr
BOOT_INT2:
      reti
.org FIRSTBOOTSTART + INT3addr
BOOT_INT3:
      reti

.org FIRSTBOOTSTART + INT_VECTORS_SIZE

BOOTLOADER:

loop2:
      jmp loop2


Дык, как бы вот (кусочек из map-файла)
Код:
EQU  FIRSTBOOTSTART 0000fe00
[...злой мышъ съел...]
CSEG RESET        00000046
CSEG loop         00000046
CSEG BOOTLOADER   0000fe46
CSEG BOOT_INT0    0000fe02
CSEG BOOT_INT1    0000fe04
CSEG BOOT_INT2    0000fe06
CSEG BOOT_INT3    0000fe08
CSEG loop2        0000fe46

:))) 8)

ЗЫ: Язвы, в таких, вопросах как правило знают больше, чем остальные. Так как из-за "доставучести" своей они частенько докапываются до вешей, которые остальным не интересны. :)) :beer:

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: atmega 128 прерывание по таймеру
СообщениеДобавлено: Ср май 23, 2012 15:10:28 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1470
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15080
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
ага, про такие вариации :)
вот и выползла необходимость ставить не абсолютный адрес а относительный :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: atmega 128 прерывание по таймеру
СообщениеДобавлено: Ср май 23, 2012 20:03:57 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Ну, просто надо использовать возможности, которые даёт макро-ассемблер - и относительные адреса не помеха.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: atmega 128 прерывание по таймеру
СообщениеДобавлено: Чт май 24, 2012 06:33:11 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1470
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15080
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Возможностей там много, да не все явно прописаны и/или имеют хороший комментарий, а вариаций на тему выполнения дриектив и синтаксиса еще больше :cry:
чего стоит только отсутствие локальных меток в макросах (или я их плохо искал?) :shock:
У АВРок в файле шаблоона-заготовки не помешает описание конфигурационных флагов добавить (по образцу ПИКовых шапок) - жаль только вводить их значения все равно "от руки" прийдется...
Мои образцы нацарапаны только для atmega8515, attiny2313 и attiny13/13a т.е., с которыми удобно работать (удобство совместимости с AT89c/s51/52 (dip40) и at89c2051/4051 (dip20)).
Но это скорее всего другая тема - объективный сравнительный анализ семейств MCS51, PIC10/12/16, PIC18 и ATTINY/MEGA с одной точки зрения (т.е. с одинаковым подходом ко всем, без предвзятости) 8)


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: atmega 128 прерывание по таймеру
СообщениеДобавлено: Чт май 24, 2012 11:12:01 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6014
Откуда: Minsk
Рейтинг сообщения: 0
BOB51 писал(а):
чего стоит только отсутствие локальных меток в макросах


Они есть и прекрасно себя чувствуют. Я вот этот бессмысленный пример накропал, чтобы запутать компайлер, но он прекрасно разобрался что к чему, хотя я даже локальную метку "совпал" с глобальной.

Код:
00002f 0000      asdf:   nop
000030   +     TST_M
000030 1701         cp   r16,r17
000031 f409         brne   stt
000032 cffc         rjmp   asdf
000033 0000      stt:   nop
             .ENDMACRO
000034   +     TST_M
000034 1701         cp   r16,r17
000035 f409         brne   stt
000036 cff8         rjmp   asdf
000037 0000      stt:   nop
             .ENDMACRO
         
000038 d002         rcall   stt
000039 0000         nop
00003a cff0         rjmp   start
         
00003b ef8f      stt:   ldi   r24,255



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: atmega 128 прерывание по таймеру
СообщениеДобавлено: Чт май 24, 2012 13:23:55 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1470
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15080
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
я про то, что описания локальных меток нет в хелпах по асму, а как на практике- пока пробовать не приходилось :beer:


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: atmega 128 прерывание по таймеру
СообщениеДобавлено: Чт май 24, 2012 23:23:12 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6014
Откуда: Minsk
Рейтинг сообщения: 0
Мне тоже показалсь вначале, что их нет, :) пришлось даже в макросе ставить :( машинный код перехода куда надо , а попробовал - работает классно и без вопросов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: atmega 128 прерывание по таймеру
СообщениеДобавлено: Пт май 25, 2012 06:18:26 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1470
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15080
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
значит атмель как всегда описание директив не доработал :(
у мпасма и у с51asm и у кейла этот пунктик явно прописан, а тут нету :cry:
но... зато директивы условного ассемблирования натыканы... досадка работать в "недокументированном режиме", а у меня последний релиз studio 4.19 однако, - можно было бы и прописать уже к этому времени, да видно у них все внимание давно в Сии... :facepalm:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: atmega 128 прерывание по таймеру
СообщениеДобавлено: Ср янв 30, 2013 19:39:43 
Опытный кот
Аватар пользователя

Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42
Сообщений: 744
Откуда: Караганда, Казахстан
Рейтинг сообщения: 0
BOB51 писал(а):
Alkul, вот это как раз и есть классическая ошибка... :shock:
в стандартном заголовочном файле avr studio обычно всегда подключается шаблон (в данном случае m128def.inc) - а там уже заявлены адреса векторов под собственными именами, которые повторно использовать не рекомендуется! А вот пользоваться этими именами весьма полезно:
Да, пользовать имена типа INT0addr, SPIaddr и пр. не стоит. Но прием совершенно правильный, просто не совсем правильно использован. А делать надо так: берем даташит на новый для себя контроллер, находим в нем после таблицы прерываний пример ассемблерного кода. Например, для Меги-8 это будет на стр. 45. - The most typical and general program setup for the Reset and Interrupt Vector
Addresses in ATmega8 is:
addressLabels Code Comments
Код:
$000 rjmp RESET ; Reset Handler
$001 rjmp EXT_INT0 ; IRQ0 Handler
$002 rjmp EXT_INT1 ; IRQ1 Handler
$003 rjmp TIM2_COMP ; Timer2 Compare Handler
$004 rjmp TIM2_OVF ; Timer2 Overflow Handler
. . . . . .
$011 rjmp TWSI ; Two-wire Serial Interface
Handler
$012 rjmp SPM_RDY ; Store Program Memory Ready
Handler
;
$013 RESET: ldi r16,high(RAMEND); Main program start
$014 out SPH,r16 ; Set Stack Pointer to top of RAM
$015 ldi r16,low(RAMEND)
$016 out SPL,r16
Выделяем кусок от 0х000 по 0х16 (для другого контроллера адрес будет другим, но смысл, думаю, понятен). и вставляем его в начало текста своей программы. Удаляем в начале каждой строки адрес, пробел заменяем на <tab>, пробел между rjmp (jmp) и меткой адресом перехода - тоже. Теми же табами выравниваем комментарии, чтобы они хорошо смотрелись.

Далее вставляем этот кусок еще один раз. На этот раз удаляем в начале каждой строки как адрес, так и команду rjmp (jmp) и пробел после нее. Превращаем бывшие адреса перехода в метки - вместо пробела между меткой и точкой с запятой ставим двоеточие, а комментарий, опять же, табами, отгоняем правее, чтобы красиво смотрелось После полученного набора меток ставим reti или какую-нибудь диагностическую ловушку для "левых" прерываний. И все. Полученный файлик где-нибудь сохраняем с именем, включающим название контроллера и используем для вставки в начало каждого нового проекта.

Для Меги-8 у меня получился вот такой файлик: http://yadi.sk/d/Oa7EDqKN2Epqe (что-то не нашел, как приаттачить файл к сообщению, положил его на Яндекс-Диск).

Можно подумать на тему сделать из него два .inc-файла, один для начала, второй - для таблицы "заглушек", используя директивы условного ассемблирования, но лень...

_________________
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 29 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y