nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 06:50



Reply to topic  [ 40 posts ]  Go to page 1, 2, 3  Next
Нетрадиционная обработка прерываний 
Author Message
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Есть желание обсудить такую обработку невложенных прерываний с настраиваемым приоритетом - пусть у нас есть до 7 включительно каналов прерываний; при возникновении очередного сигнала устанавливается соответствующий бит в каком-либо регистре. Сигнал INI формируется при наличии как минимум одного бита в этом регистре, при подтверждении прерывания значение устанавливается на шине данных, дополненное нулём в D0, а регистр сбрасывается.

В режиме прерывания 2 у нас оказывается 127 возможных сочетаний (нуль невозможен) и вместе с регистром I - 127 чётных адресов. Вектор полностью определяет все активные на момент его поступления сигналы, например (младший байт) 0x06 означает два самых младших бита в регистре из предыдущего абзаца. Соответственно, нужно выполнить два обработчика в порядке приоритета (причём приоритет не обязан быть транзитивным).

В нулевом режиме прерывания можно примерно так же формировать одну из 7 команд RST для обработки трёх источников.

Хотя подозреваю, что вероятность появления более одного прерывания за раз (за время, пока прерывания были запрещены) невелика.


21 Jan 2021 01:23
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
Сложно вот так сразу по исходным данным, что-то посоветовать. Хотя вот вспомнился простой приоритетный контроллер на 8 прерываний из Орион-Про (555ИВ1 + 555АП6).

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


21 Jan 2021 10:41
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
Сложно вот так сразу по исходным данным, что-то посоветовать. Хотя вот вспомнился простой приоритетный контроллер на 8 прерываний из Орион-Про (555ИВ1 + 555АП6).

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

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


21 Jan 2021 18:33
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
masterspammer wrote:
Посмотрел схему - кажется мне, там если придут вместе два сигнала, то будет обработан только один, а не оба в порядке важности.
Да схема отвечает только за приоритет и формирование вектора.

Сдается мне за этим должен следить инициатор прерывания, что бы не было повторного прерывания, пропуска прерывания и прерывание гарантировано было обработано. Пример, инициатор выставляет прерывание и сбрасывает прерывание только после вычитки регистра состояния инициатора в подпрограмме обработки прерывания. По такому принципу можно обойтись одним прерыванием по схеме И. Проверяя последовательно инициаторов. Но это конечно не аксиома.

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


21 Jan 2021 23:15
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
Да схема отвечает только за приоритет и формирование вектора.

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

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

Alekcandr wrote:
Пример, инициатор выставляет прерывание и сбрасывает прерывание только после вычитки регистра состояния инициатора в подпрограмме обработки прерывания. По такому принципу можно обойтись одним прерыванием по схеме И. Проверяя последовательно инициаторов. Но это конечно не аксиома.

С таких рассуждений моя идея и началась. Так можно, кстати и несколько разных маскируемых сделать.


22 Jan 2021 02:22
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
masterspammer wrote:
В схеме Ориона-про такого точно нет, ну и инициатор (каждый) слишком умным получается; а регистр (в смысле микросхемы) можно сбрасывать или весь (при изначальной моей идее) или побитно (при приоритетном шифраторе как в Орионе).
Регистр это я громко сказал. Достаточно одного триггера и не сложного адресного дешифратора (лучше даже порт использовать). Взводить триггер по необходимости прерывания, а сбрасывать по заднему фронту адресного дешифратора. Вполне себе независимая "единица" источника прерывания получается. Ну а маскировать тогда программно, а то железка начнет разрастаться. Пока как-то так мне это ведется.

Так сказать зашел с другой стороны :)

p.s. Я еще тот схемотехник. Все эти мысли по мотивам MSX.

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


22 Jan 2021 03:06
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
Регистр это я громко сказал. Достаточно одного триггера и не сложного адресного дешифратора (лучше даже порт использовать). Взводить триггер по необходимости прерывания, а сбрасывать по заднему фронту адресного дешифратора.

Но это на каждую линию, а можно общее на весь механизм. Регистр выставляется на шину данных и тут же сбрасывается; если по-моему (7 бит - вектор в IM2), то весь, если по-орионовски, то только один его бит (установить значение = регистр XOR дешифратор того, что на выводе шифратора).

И в Орионе-Про нет такого провода на разъёме прерываний, чтоб уведомлять, там HOLD зачем-то хотя можно и INTA притащить.

Alekcandr wrote:
Вполне себе независимая "единица" источника прерывания получается. Ну а маскировать тогда программно, а то железка начнет разрастаться. Пока как-то так мне это ведется.

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

OOPS! Выше я ошибся - имел в виду "несколько разных НЕмаскируемых сделать"! Аппаратное-то одно, причину узнавать надо как-то иначе, например, через порт.


22 Jan 2021 04:37
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
По хорошему надо бы перейти на язык схем, что бы не уточнять свою идею. Пока я о своем. Самый простой вариант. В идеале нужен некий компромисс между аппаратным и программным решением.

1. Не трогаем схему Ориона. От нее только приоритет и вектор. Изменять приоритет нельзя.
2. Дешифратор адреса I/O узкое место. Согласен. Тут надо отталкиваться от дизайна. Возможна пред дешифрация, или общий дешифратор для источников прерывания.
3. Триггер(ы), которым(ы) удерживаем прерывание(я), до момента пока мы не подтвердим конкретное прерывание. Надо подумать. Микросхем с триггерами много. Задачи для него. Установка по прерыванию. Сброс по общему сбросу. Подтверждение прерывания - сброс по "фиктивному" чтению порта (порт с адресом из пункта 2), т.е. на шину данных мы ничего не выдаем.

Остается маска, если она нужна. Пусть пока будет программная. Это одна общая ячейка памяти, и одна проверка на конкретный бит в векторе прерывания.

masterspammer wrote:
если по-моему (7 бит - вектор в IM2), то весь, если по-орионовски, то только один его бит (установить значение = регистр XOR дешифратор того, что на выводе шифратора).


Допустим, используется схема Ориона.

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

P.S. Триггер из пункта 3 надо рассматривать совместно с источником прерывания, тогда схема вырисуется.

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


22 Jan 2021 09:11
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
Допустим, используется схема Ориона.

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

Регистр это набор входных триггеров; убираем из него этот бит; если остаются другие, то они обработаются следующими входами в режим прерывание и так пока не кончатся.

Alekcandr wrote:
P.S. Триггер из пункта 3 надо рассматривать совместно с источником прерывания, тогда схема вырисуется.

Именно это и смущает; источник хочется иметь готовый и возможно тупой - типа кнопки. Обработка - по перепаду.


22 Jan 2021 18:28
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
masterspammer wrote:
Регистр это набор входных триггеров; убираем из него этот бит; если остаются другие, то они обработаются следующими входами в режим прерывание и так пока не кончатся.
На уровне программы для микроконтроллера мысль понятна в первом приближение.

Со схемой – нет. Чем тактируется регистр? Выходы дешифратора подключаются через XOR ко входу регистра. Что на втором входе XOR? И т.д.

Если не затруднит, нарисуйте пожалуйста схему.

masterspammer wrote:
Именно это и смущает; источник хочется иметь готовый и возможно тупой - типа кнопки. Обработка - по перепаду.
Тогда ставим классику - TM2.

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


23 Jan 2021 01:15
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
masterspammer wrote:
Регистр это набор входных триггеров; убираем из него этот бит; если остаются другие, то они обработаются следующими входами в режим прерывание и так пока не кончатся.
На уровне программы для микроконтроллера мысль понятна в первом приближение.

Со схемой – нет. Чем тактируется регистр? Выходы дешифратора подключаются через XOR ко входу регистра. Что на втором входе XOR? И т.д.

Alekcandr wrote:
Если не затруднит, нарисуйте пожалуйста схему.

Затруднит - за компом бываю набегами, если будет время на схему, я скорее сяду паять. Поэтому только текстом - на втором входе XOR - выход регистра. XORим регистр сам с собой.
Alekcandr wrote:
Тогда ставим классику - TM2.

Или сразу несколько штук одной штукой.


23 Jan 2021 04:28
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
Со схемой – нет. Чем тактируется регистр? Выходы дешифратора подключаются через XOR ко входу регистра. Что на втором входе XOR? И т.д.

Если не затруднит, нарисуйте пожалуйста схему.

Затруднит - за компом бываю набегами, если будет время на схему, я скорее сяду паять. Поэтому только текстом - на втором входе XOR - выход регистра. XORим регистр сам с собой.
Alekcandr wrote:
Тогда ставим классику - TM2.

Или сразу несколько штук одной штукой.


23 Jan 2021 04:29
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
masterspammer wrote:
Затруднит - за компом бываю набегами, если будет время на схему, я скорее сяду паять. Поэтому только текстом - на втором входе XOR - выход регистра. XORим регистр сам с собой.

Ок.

Постараюсь оформить свою писанину в схему. Может, кому пригодиться.

p.s. Ксорить регистр самим с собой чревато на первый взгляд, но я еще тот схемотехник. Может вся задумка сработает при неком тактировании регистра.

_________________
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru


Last edited by Alekcandr on 27 Jan 2021 11:11, edited 3 times in total.



23 Jan 2021 04:56
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
p.s. Ксорить регистр самим с собой чревато на первый взгляд, но я еще тот схемотехник. Может вся задумка сработает при неком тактировании регистра.

Кстати, да, можно ненароком выставить прерывание ещё раз; можно тактированием решить (но вдруг гонки возникнут), а можно взять другую функцию, например, при активном нулевом уровне сигнала прерывания и вывода дешифратора new=old OR NOT processed, если я ничего не перепутал...


23 Jan 2021 20:05
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Посмотрел ещё раз схемы по ссылкам, сформулировал такие проблемы и риски:
1. если делать сигнал прерывания, снимаемый работой обработчика с устройством (обработчик пишет в порт, устройство снимает сигнал), то получается очень хрупкая архитектура - достаточно не обработать любое одно прерывание любым способом и обработчик будет вызываться после каждой команды, причём отключить программно это одно прерывание будет невозможно.
2. если делать сигнал прерывания, снимаемый уведомлением, формируемым аппаратно (по выставлению вектора на шину данных), то в принципе для отключения обработки достаточно поставить RETI по вектору.
3. если обрабатывать прерывание не по уровню, а по фронту, то все проблемы с уведомлением становятся не важны, зато возникает ситуация появление двух запросов на одно прерывание за время ожидания и/или обработки (пока считаю, что это не самое страшное дело).
4. в любом случае недопустимо "проглатывание" прерываний - запрос был, но обработчик не был вызван ни разу; ситуация может возникнуть из-за гонок, из-за слишком короткого сигнала при работе по уровню, а не по фронту или ещё по какой-либо причине; если вдруг возможно, что прерывание может стать неактуально, устареть (не могу придумать примера), это какой-то особый случай, пусть его решает обработчик, когда будет вызван.
5. в любом случае недопустима экранировка низкого приоритета высоким - приоритет влияет только на очерёдность обработки. Если таймер пропускает такты из-за вывода на условный covox, это баг.

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

P.S. Для устройств - источников прерываний интерфейс хочется такой - вход для запроса и выход для подтверждения; в идеале - можно игнорировать подтверждение, а на запрос приделать просто кнопку, при нажатии на которую будет однократно вызываться прерывание.


27 Jan 2021 07:50
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 40 posts ]  Go to page 1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 11 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.