Подскажите плиз начинающему как выйти из прерывания в нужное место кода по условию , т.е. условие выполнено выходим на определенное место, не выполнено возвращаемся из прерывания как обычно... возможно ли такое вообще?
Очень просто: внутри прерывания извлекаете два значения из стека (там адрес возврата), и делаете переход в нужное место, не забыв включить прерывание. Например:
Код:
-- условие сработало, попали сюда pop r17 pop r17 sei rjmp метка
Или переместить указатель стека ан слово вверх, но это не даст выигрыша ни по скорости, ни по памяти
Вероятно это неправильное проектирование программы, если из прерывания надо переходить в другое место... а если часть алгоритма, который мы прервали не закончил свою работу? То что ты хочешь сделать - это переход внутри прерывания, а выход из прерывания может быть осуществлен только в точку в которой это прерывание возникло, либо на вектор сброса. Остальные варианты чреваты непредсказуемыми последствиями... даже когда кажется что этих последствий просто не может быть.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт сен 04, 2012 22:03:25
Держит паяльник хвостом
Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24 Сообщений: 906 Откуда: ВО
Рейтинг сообщения:0
Но даст возможность, по окончании программы по условию , вытолкнуть стек и продолжить прерванную прерыванием программу с того же места , восстановив все регистры.
Остальные варианты чреваты непредсказуемыми последствиями... даже когда кажется что этих последствий просто не может быть.
и получится ядерная бомба.
что касаемо моего вопроса. то я не могу инициализировать таймер с компаратором. или что то не то инициализировать пытаюсь. щас кода нет под рукой. завтра покажу.
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт сен 04, 2012 22:08:49
Держит паяльник хвостом
Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24 Сообщений: 906 Откуда: ВО
Рейтинг сообщения:0
Alexeyslav писал(а):
Вероятно это неправильное проектирование программы, .
Нет , это обычная многозадачность , когда на одном процессоре и на одной области памяти программ процессор выполняет совершенно разные задачи одновременно.
Вероятно это неправильное проектирование программы, если из прерывания надо переходить в другое место...
В 97% случаев - да. Тем более, если такой вопрос задаётся в этой теме. Но есть и 3% случаев, когда программист чётко знает, что делает, и выиграет от этого драгоценные такты или байты.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт сен 04, 2012 22:16:19
Держит паяльник хвостом
Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24 Сообщений: 906 Откуда: ВО
Рейтинг сообщения:0
Ну о вкусах не будем спорить , покрайней мере в этой теме. Но я согласен с Вами в одном , если такой подход применяется , то надо чётко представлять почему и зачем и главное как делать правильно
я многозадачность делал иначе... щас уже точно не помню... но было так: 16-битный счетчик завязанный на таймере-счетчике. десять (!) задач. хотя и задачи были простые, каждая мигала своим светодиодом с определенной частотой, но память бедного TINY26 была забита на 98.6%
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
У таймера есть режим счета до сравнения и сброс по сравнению, заодно он может АППАРАТНО при этом событии инвертировать значение пина, к которому он подключен - получается сразу генератор на выходе, причем одному таймеру принадлежат сразу два вывода работу которых можно контролировать устанавливая соответствующй режим таймера - к нему может быть задействован либо один вывод, либо два и тогда на втором выводе сигнал будет в противофазе. Поэтому пишут что в контроллере 4 выхода ШИМ при 2-х таймерах в наличии...
Да, пожалуй раздел даташита посвященный режимам работы таймера довольно запутан, но там вроде бы как по картинкам все ясно...
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср сен 05, 2012 08:55:14
Друг Кота
Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 20010 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Alexeyslav писал(а):
но там вроде бы как по картинкам все ясно...
Вот именно! Достаточно взглянуть на эту картинку чтобы понять: это то, что надо! xkp, вот формула из ДШ для генерируемой частоты: OCRnx от 0 до 255 для 8-ми битного таймера и до 65535 для 16-ти битного таймера. Можно нарисовать таблицу (например, в Экселе) всех возможных частот в зависимости от значений OCRnx и N, и оценить точность генерируемых частот.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
.cseg .org $0a RESET: ldi tmp,low(RAMEND) out spl,tmp .macro OUTI LDI R16,@1 OUT @0,R16 .endm OUTI tccr0a,(1<<com0a1)|(0<<COM0A0)|(0<<com0b1)|(0<<COM0b0)|(1<<wgm01)|(0<<wgm00)
ldi tmp,low(RAMEND) out spl,tmp
ldi tmp,$01 ;преддилитель 64 out tccr0b,tmp ldi tmp,0b00000111 out ddrb,tmp ldi tmp,0 out portb,tmp sei main: ldi tmp,$c0 out ocr0a,tmp ; ldi tmp,$10 ; out ocr0b,tmp main_2: rjmp main_2 ; Address Labels Code Comments .org $00 rjmp RESET ; Reset Handler reti ;rjmp EXT_INT0 ; IRQ0 Handler reti ;rjmp PCINT0 ; PCINT0 Handler reti ;rjmp TIM0_OVF ; Timer0 Overflow Handler reti ;rjmp EE_RDY ; EEPROM Ready Handler reti ;rjmp ANA_COMP ; Analog Comparator Handler reti ;rjmp TIM0_COMPA ; Timer0 CompareA Handler reti ;rjmp TIM0_COMPB ; Timer0 CompareB Handler reti ;rjmp WATCHDOG ; Watchdog Interrupt Handler reti ;rjmp ADC_inc ; ADC Conversion Handler .exit
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
кто что сбрасывает? подробнее пожалуйста. эти битики регистра установил согласно даташиту
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср сен 05, 2012 11:17:44
Поставщик валерьянки для Кота
Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22 Сообщений: 2401 Откуда: Россия, Волгоград
Рейтинг сообщения:0 Медали: 1
комбинация :
Код:
OUTI tccr0a,(1<<com0a1)|(0<<COM0A0)....
всегда, т.е. при совпадении OCR0A и TCNT0 переводит вывод OC0A в 0, чтобы значение на выводе менялось каждый раз на противоположенное надо установить COM0A1:COM0A0 = 01, в посте выше,где приведены диаграммы, обрати внимание на надпись Toggle
_________________ Чем дальше, тем больше становлюсь занудой...
вот и заработало!!! начинаются эксперименты по разгону максимальной частоты tiny85
PS хм.. тини13 отлично справляеться с моими поставленными задачами на своей частоте 9.6 мГц. точность не сильно большая но мне хватит, наверное...
следующим вопросом станет время, точнее, как можно точнее измерить ширину импульса. можно даже и не в секундах или миллисекундах, а в условных еденицах. железо: ОУ MCP6022, МК TINY85. ОУ нужен для предварительной обработки сигнала, выдает на МК импульсы лог 1, которые и нужно мерить. из даташита на ОУ он может работать на частоте до 10 мГц. тинька будет на кварце 20 мГц, может и больше, если разгонится. хочу ловить импульсы по переднему фронту, но прерывания по переднему фронту на int0 уже задействованы. какие будут предложения? может просто ждать появления лог 1? например:
Код:
metka: sbis pinb,0 rjmp metka ;тут мерием время в УЕ clr tmp clr tmp0 metka2: inc tmp cpi tmp,$ff brlo metka3 inc tmp0 metka3: sbic pinb,0 rjmp metka2 ; получили време в tmp0,tmp в УЕ
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
режим захвата? не слышал. кстати, освободил int0. теперь можно и по нему. но все же, что за режим захвата?
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср сен 05, 2012 20:08:40
Модератор
Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4596 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Не знаю, есть ли подобное в Атмелах, не силён в них, но в ПИКах есть. Это нечто обратное ШИМу. Т.е. по одному фронту модуль обнуляет таймер и запускает его, а по другому фронту - останавливает. В итоге, имеем событие от модуля и период в тактах таймера, находящийся в регистре таймера.
это у нас называется прерывания по переднему и заднему фронтам входа INT0. хотя... наверное это не совсем то... но идея хорошая. подумаю над этим.
_________________ R5VCH Хотелки: СпойлерАналоговый осциллограф С1-112, С1-118, другие не/рабочие модули от комплекса ОДА-102 всё что касается AVR, arduino, raspberry всё что касается КВ-УКВ-радиосвязи, mashtastic
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения