Например TDA7294

Форум РадиоКот • Просмотр темы - Вопрос к знатокам, почему не работают 2 прерывания совмесно
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 01:14:57

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


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



Начать новую тему Ответить на тему  [ Сообщений: 38 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Вт сен 26, 2017 08:52:40 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Можно ради интереса и тренировки мозгов подумать как организовать вложенность прерываний на AVR. Хотя на практике это скорее всего будет ни к чему и рисует грабли на горизонте.

Предположим что есть три прерывания. Для примера пускай будут вектора что выложил knyaz*. Int0, ADC и Т0CompB. При том что последний по каким-то соображениям надо обслуживать всегда, даже если находишься в других обработчиках прерывания, а первые два не должны друг друга перебивать.

Думаю обрабтчики должны быть написаны на ассме.

При входе в ADC или INT, после сохранения регистра статуса на стеке, дополнительно скинуть на стек регистры масок прерываний INT и ADC, выключаем маски ADC и INT, после этого разрешить прерывания глобально и далее текст обработчика.

Вроде должно работать, но такое чувство что что-то упустил. При написании проекта на ЯВУ, думается мне что вложенность лучше совсем не делать.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Вт сен 26, 2017 08:54:32 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14053
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Всего - то разрешить вложенные прерывания установкой флага I в SREG сразу за входом в первую из процедур обработки.
8)

флаг I разрешает все прерывания, а не вложенные. В атмеге одноуровневая система прерываний


Вот как раз он и выполняет роль разрешения/запрета -
при входе в любое прерывание сбрасывается и по RETI восстанавливается АППАРАТНО.
Для разрешения вложенных прерываний этот флаг должен быть установлен программно (SEI) внутри исполнителя того прерывания, которое мы сочтем более "низкоуровневым".
Для атмег/тинек нет аппаратного контроллера приоритета (как в mcs51/PIC18), однако программное обеспечение подобного алгоритма никто не отменял.
8)
Можно еще "позаимствовать" метод определения вектора для прерываний от внешних устройств у Z80 (вектор предоставляет внешнее устройство при том, что используется всего одна линия прерывания для всех имеющихся).
:roll:


Последний раз редактировалось BOB51 Вт сен 26, 2017 09:01:46, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Вт сен 26, 2017 08:59:48 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
BOB51 писал(а):
Для разрешения вложенных прерываний этот флаг должен быть установлен программно
Нужно не забыть про возможность зациклится в одном прерывании. Или обязательно выключать маску того прерывания в котором находишься или уже слишком точно просчитать все тайминги.

ИМХО: не нужны вложенности на МК где они не предусмотрены.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Вт сен 26, 2017 09:07:53 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14053
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
ДЫК...
Ничего сверхестественного - весьма часто применяемо.
НО... в большинстве случаев...
Это удел ассемблера.
:hunger:


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Чт сен 28, 2017 04:40:57 
Первый раз сказал Мяу!

Зарегистрирован: Ср сен 13, 2017 05:53:24
Сообщений: 31
Рейтинг сообщения: 0
При наличии нескольких необработанных событий МК уйдёт в прерывание с более высоким приоритетом. Обработав его прмется за другое, если конечно за это время опять не произойдёт событие с высоким приоритетом. Как правило обработчик прерывания делается с максимально быстрым кодом.


а что становится с прерываниями с более низким приоритетом, когда они наполовину уже выполнились?? продолжит выполнятся с того места на котором их остановило прерывание с более высоким приоритетом?? или вовсе не выполнится? или выполнится заново после прерывания с высоким приоритетом?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Чт сен 28, 2017 06:41:39 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4220
Откуда: Ижевск
Рейтинг сообщения: 0
fulky писал(а):

-Контроллер устанавливает флаги требования обработки прерываний независимо от разрешения/запрета их обработки
-Вход в обработчик прерывания выполняется с аппаратным сбросом I-флага
-Выход из обработчика может быть по RETI с аппаратным взводом I-флага или RET без изменения оного.
Вот из этих посылов и будет дальнейшая реакция контроллера, но уже на программном уровне.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Чт сен 28, 2017 08:53:14 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 1
fulky писал(а):
а что становится с прерываниями с более низким приоритетом, когда они наполовину уже выполнились?? продолжит выполнятся с того места на котором их остановило прерывание с более высоким приоритетом?? или вовсе не выполнится? или выполнится заново после прерывания с высоким приоритетом?

При входе в любое прерывание аппаратно сбрасывается флаг I. Это значит, что любое прерывание будет выполняться от и до, если в обработчике прерывания программист выставляет флаг I, то выполнится то прерывание, которое сработало и программа вернется обратно.
Приоритет прерывания означает, что если вдруг какие-то прерывания сработали одновременно (события), к примеру, переполнение таймера и внешнее прерывание, то первым выполнится прерывание с наименьшим адресом вектора.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Чт сен 28, 2017 13:20:29 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Пн фев 11, 2008 20:32:45
Сообщений: 255
Откуда: Краснодарский край
Рейтинг сообщения: 0
fulky писал(а):
а что становится с прерываниями с более низким приоритетом, когда они наполовину уже выполнились?? продолжит выполнятся с того места на котором их остановило прерывание с более высоким приоритетом?? или вовсе не выполнится? или выполнится заново после прерывания с высоким приоритетом?

Когда происходит прерывание, то ядро контроллера запоминает текущий адрес в стеке и делает прыжок на адрес вектора соответствующего прерывания.
Когда процессор уходит на обработку прерывания, то аппаратно происходит запрет всех остальных прерываний.
Прерывание можно включить программно, установив флаг I в регистре SREG и тогда у нас будут вложенные прерывания.
Но с эти нужно быть очень аккуратным, особенно если программировать на высокоуровневом языке.
После выхода из обработчика, флаг I вернется.
Если во время обработки одного прерывания придет другое, у него взведется флаг и как только мы завершим первый обработчик автоматом произойдет переход к отложенному прерыванию.
И все отложенные прерывания будут выполняться в соответствии приоритета (таблицу я выложил).
Ах да если будет несколько однотипных прерываний, например при выполнении обработчика произойдет три внешних прерывания, программа будет знать только об последние.
Ну как то так, если в чем то не прав поправьте.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Чт сен 28, 2017 15:25:19 
Первый раз сказал Мяу!

Зарегистрирован: Ср сен 13, 2017 05:53:24
Сообщений: 31
Рейтинг сообщения: 0
fulky писал(а):
а что становится с прерываниями с более низким приоритетом, когда они наполовину уже выполнились?? продолжит выполнятся с того места на котором их остановило прерывание с более высоким приоритетом?? или вовсе не выполнится? или выполнится заново после прерывания с высоким приоритетом?

Когда происходит прерывание, то ядро контроллера запоминает текущий адрес в стеке и делает прыжок на адрес вектора соответствующего прерывания.
Когда процессор уходит на обработку прерывания, то аппаратно происходит запрет всех остальных прерываний.
Прерывание можно включить программно, установив флаг I в регистре SREG и тогда у нас будут вложенные прерывания.
Но с эти нужно быть очень аккуратным, особенно если программировать на высокоуровневом языке.
После выхода из обработчика, флаг I вернется.
Если во время обработки одного прерывания придет другое, у него взведется флаг и как только мы завершим первый обработчик автоматом произойдет переход к отложенному прерыванию.
И все отложенные прерывания будут выполняться в соответствии приоритета (таблицу я выложил).
Ах да если будет несколько однотипных прерываний, например при выполнении обработчика произойдет три внешних прерывания, программа будет знать только об последние.
Ну как то так, если в чем то не прав поправьте.


Спасибо, теперь всё стало ясно


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Чт сен 28, 2017 15:40:45 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 3
Медали: 1
Получил миской по аватаре (1)
knyaz* писал(а):
Ну как то так, если в чем то не прав поправьте.

Для программирования на ЯВУ может и достаточно такого объяснения.Но лучше понимать аппаратную реализацию работу прерываний.

Собственно тут уже все написали, но и я напишу. По большому счету повторюсь, что уже написано.
•контроллер не знает и не будет знать какую часть программы выполняет, основной ли это цикл или обработчик прерывания. Ему все равно, берет очередную инструкцию на которую указывает счетчик программ и выполняет.
•флаг события при возникновении соответствующего события устанавливается всегда, вне зависимости он настроек МК, разве что соответствующий модуль периферии должен быть включен.
•прерывание возникнет если установлены флаг события, ему соответствующая маска разрешения прерывания и разрешены прерывания глобально. Как только собралась данная комбинация из трех битов, само собой после завершения инструкции которую выполнял,контроллер тут же:
.....сохраняет на стек адрес инструкции которую МК хотел выполнить следующей, если бы не возникло прерывание и уменьшает указатель стека на размер адреса ;
.....запрещает прерывания глобально и в большинстве случаев сбрасывает соответствующий флаг события(в зависимости от вектора прерывания);
.....загружает в программный счетчик адрес вектора прерывания и выбирает оттуда инструкцию, как правило там лежит инструкция безусловного перехода на обработчик прерывания.
.... все это он делает одновременно и если не ошибаюсь, то за 7 тактов (точно не помню)....
.... после этой "встряски" так же весело выполняет инструкции из памяти программ, только уже из другого участка памяти программ и абсолютно "не задумываясь" что куда-то перепрыгнул.

•Весело добежав до инструкции RETI (если такая будет), загрузит программный счетчик со стека адрес возврата, указатель стека вернется как былО, включится разрешение глобальных прерываний. Т.е. по факту вернется к месту, откуда прервался.

Тут кончено лучше на ассме попрогать немного, чтобы прочувствовать как это.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Чт сен 28, 2017 16:02:19 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
RETI - return + установка флага I (interrupt).
RET - return без установки флага I (но и не сброс флага, если он установлен). Бывают ситуации, когда из прерывания нужно выйти, не включая прерывания. Тогда в обработчиках прерываний ставят эту команду.

Компиляторы ЯВУ в обработчиках прерываний автоматом ставят RETI в конце обработчика. Возможно, что есть специальные директивы, указывающие ставить команду RET.

На ассемблере программист сам определяет, как ему быть в тех или иных случаях.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Чт сен 28, 2017 16:18:01 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Demiurg писал(а):
Возможно, что есть специальные директивы, указывающие ставить команду RET.
Помню что есть макрос прерывания для (gnu-avr) не сохраняющий контент. Кажется есть и макрос возврата по ret, не уверен.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Пт сен 29, 2017 06:58:39 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 3
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Z_h_e писал(а):
Помню что есть макрос прерывания для (gnu-avr) не сохраняющий контент
такого нет, но есть ISR(VECTOR, ISR_NACKED), что вынуждает программиста написать ВЕСЬ ОБРАБОТЧИК САМОМУ, включая сохранение и восстановление контекста.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Пт сен 29, 2017 07:00:53 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ну значит не совсем верно запомнил из-за невостребованности.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Вс окт 01, 2017 17:18:58 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Можно ради интереса и тренировки мозгов подумать как организовать вложенность прерываний на AVR.


В AVR GCC какбэ уже есть директива ISR_NOBLOCK. Но пользоваться ей, особенно без опыта, я б не советовал, ибо
Цитата:
на практике это скорее всего будет ни к чему и рисует грабли на горизонте.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Вс окт 01, 2017 20:17:01 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
Нет, имеется в виду эмуляция полноценных вложенных прерываний, когда прерывание не вызывается внутри себя же. А то и с приоритетами.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Пн окт 02, 2017 10:33:24 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 14, 2012 22:53:50
Сообщений: 225
Рейтинг сообщения: 0
Проблема вложенных прерываний в том, что теряется сам смысл прерываний.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос к знатокам, почему не работают 2 прерывания совме
СообщениеДобавлено: Пн окт 02, 2017 10:42:17 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
philosoraptor писал(а):
Проблема вложенных прерываний в том, что теряется сам смысл прерываний.
???

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


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

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


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

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


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

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


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