|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Нетрадиционная обработка прерываний
Author |
Message |
Alekcandr
Doomed
Joined: 01 Oct 2007 10:30 Posts: 665 Location: Ukraine
|
По мне эти два способа жизнеспособны на 100%. От ZX до ОС реального времени. По остальным способам надо схему в симуляторе рисовать, или схему паять. И проверять. Может Z180 использовать? Там и много частоты, и периферия, и прерывания.
_________________Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
|
27 Jan 2021 11:10 |
|
|
masterspammer
Fanat
Joined: 13 Dec 2020 21:11 Posts: 86
|
Жизнеспособны, мне больше второй нравится, первый имеет цену ошибки выше. Угу, вчера вечером в голову засунул идею, утром уже что-то вырисовалось. Опишу так, на выходных порисую. Описание для одного сигнала: 1. на входе из сигнала берётся фронт (два D-триггера, тактируемые тем же синхросигналом, что и процессор, но в противофазе, дальше логический элемент, дающий импульс, когда уровень на входе сменится на активный - как тут http://www.junradio.com/nach/TTL/Part1/1-6.htm - там рис 1.56, только не XOR, а OR или AND, чтоб импульс был один), это будет установка для обычного RS-триггера. 2. выход RS-триггера (выходы всех таких триггеров на самом деле) выставляется на шину данных тем или иным способом (приоритетным шифратором как у Ориона Про или все биты сразу как я предлагал в первом сообщении). 3. по сочетанию !M1 !IORQ и тактового сигнала формируется сигнал подтверждения; важно чтоб этот сигнал никогда не был одновременно активен с сигналом cброса RS-триггера. 4. сигнал подтверждения тем или иным способом (на самом деле зависит от выбранного варианта в пункте 2 варианта) раскладывается на один или несколько сигналов подтверждения конкретного прерывания; сигнал подтверждения конкретного прерывания - сброс RS-триггера. Теперь разобраться с фазами и выбрать микросхемы так, чтобы по максимуму использовать триггерные сборки, регистры, а не на ТМ2 собирать (получится, но будет очень много корпусов) Не знаю, я пока настроился на Z84C0020 и может быть на KC80. Z180 совсем другой проц по железной части, насколько помню; ну и это не будет решением для Z80
|
27 Jan 2021 18:37 |
|
|
aav8
Maniac
Joined: 05 Nov 2008 19:47 Posts: 287 Location: 81.28.208.238
|
Не обязательно делать отдельные триггеры на запрос прерывания: К примеру ВВ51 сама снимает запросы (RxRdy/TxRdy) после записи/чтения регмстра данных.
|
27 Jan 2021 19:31 |
|
|
masterspammer
Fanat
Joined: 13 Dec 2020 21:11 Posts: 86
|
Рассматривал такой случай (и держал в голове чтоб не потерять с ним совместимость), для ВВ51 просто, а вот если я хочу подать прерывание с произвольной схемы или кнопки, то придётся наворачивать именно то самое, а оставить неснятый сигнал - фатально. Если принимать сигнал по перепаду, то И его можно не снимать И подобные ВВ51 будут работать без изменений. (Конечно, можно сделать триггеры только там, где это требуется, если делать законченное устройство, то на ВВ51 триггер не нужен, а для контроллера/конструктора/микропроцессорного_стенда лучше подстраховаться).
|
27 Jan 2021 21:23 |
|
|
Alekcandr
Doomed
Joined: 01 Oct 2007 10:30 Posts: 665 Location: Ukraine
|
В этих двух вариантах ошибка может возникнуть при не правильной программной обработке прерывания (забыть о IN A,(n) или RETI). Такая же ошибка будет и с ВВ51. Необходима программная реакция на аппаратное прерывание (аппаратную маскировку прерывания пока не рассматриваем). По мне это правильно. Будем посмотреть p.s. Можно почитать в z80-documented.pdf подробненько о этих двух способах.
_________________Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
|
28 Jan 2021 03:37 |
|
|
masterspammer
Fanat
Joined: 13 Dec 2020 21:11 Posts: 86
|
Только в первом случае, во втором обработка аппаратная. Именно обойтись без обязательности программной реакции и хочется. Чтоб поставил REТI и достаточно (прерывание не спамит). Как с NMI. Читал, не сказал бы, что как-то подробненько.
|
28 Jan 2021 18:39 |
|
|
Alekcandr
Doomed
Joined: 01 Oct 2007 10:30 Posts: 665 Location: Ukraine
|
Во 2-м случаи еще как спамит если заместо RETI сделать RET. Там (фирменное прерывание от Zilog) ведь аппаратный детект RETI на стороне источника прерывания c высшим приоритетом. А в 1-м случаи аппаратный детект IN A,(n) по порту n. Что в 1-м, что 2-м требуется специальная команда. Но то такое, если вы считаете по другому спорить не буду. Это как c Z180. Одни считают его микроконтроллером, другие процессором со встроенной периферией. Да уж куда подробней, все разжевано в отличие от фирменного мануала. Дальше только программный практикум
_________________Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
|
28 Jan 2021 23:07 |
|
|
masterspammer
Fanat
Joined: 13 Dec 2020 21:11 Posts: 86
|
Во втором случае (и в обдумываемой схеме) подразумевал детекцию не RETI, а факта попадания вектора на шину (!IOREQ + !M1), если ловить RETI, то да. Но и в случае с RETI всёж легче "обработать" прерывание (по минимуму), даже не зная, кто его породил. Самое смешное, что детектор RETI/RETN у меня в задумках есть... В контексте прерываний что там, что там минимум Скорее даже аппаратный - особенно bonus level - отловить факт обработки NMI. Макетка, светодиоды, кнопки...
|
29 Jan 2021 00:58 |
|
|
Alekcandr
Doomed
Joined: 01 Oct 2007 10:30 Posts: 665 Location: Ukraine
|
Я то думал в контексте Zilog, а если в обдумываемой схеме, то … Аж целый чаптер 5 Я этой брошюркой намного чаще пользуюсь, чем либо другим. Все компактненько и по делу.
_________________Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
|
29 Jan 2021 02:21 |
|
|
masterspammer
Fanat
Joined: 13 Dec 2020 21:11 Posts: 86
|
Аж целый чаптер 5 Я этой брошюркой намного чаще пользуюсь, чем либо другим. Все компактненько и по делу.[/quote] Ну вот очень компактненько и многого просто нет. Например, как понять, что процессор начал обработку NMI? Так и не нашёл.
|
29 Jan 2021 02:45 |
|
|
masterspammer
Fanat
Joined: 13 Dec 2020 21:11 Posts: 86
|
Ну вот очень компактненько и многого просто нет. Например, как понять, что процессор начал обработку NMI? Так и не нашёл.
|
29 Jan 2021 02:46 |
|
|
Alekcandr
Doomed
Joined: 01 Oct 2007 10:30 Posts: 665 Location: Ukraine
|
NMI у основной массы людей, и у Zilog ассоциируется с чем-то типа – ТРЕВОГА! Волк украл зайчат Вот и мало информации. Вон продвинутые программисты делали защиту от NMI на ZX. Там далеко не все сразу очевидно, да. А так, как показа практика спустя много лет, вся эта не документированная инфа фигня (нет. упрощенный дизайн в силу существующей технологии в то время) сейчас вылазит боком. Приятно запустить сегодня на реале Z280 CP/M или MSX, где следовали официальной документации. p.s. чего-то форум опять заглючело. фантомные посты.
_________________Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
|
29 Jan 2021 03:07 |
|
|
masterspammer
Fanat
Joined: 13 Dec 2020 21:11 Posts: 86
|
Угу, а хотелось хотя бы watchdog сделать. И мне по определённым причинам нужно кровь из носу определить его срабатывание, иначе не выходит (адрес 66h будет не на той странице). О, да! Один регистр переключения банков в ZX128 чего стоит (можно только 8 банков, бит выше занят другим, хотя есть и неиспользуемые биты - при простой перестановке можно было бы потом сделать 32 банка, но нет, пусть там видеостраница переключается), ну или "прерывания" в Радио-86РК... Я редактировать хотел, но получилось хуже.
|
29 Jan 2021 19:18 |
|
|
masterspammer
Fanat
Joined: 13 Dec 2020 21:11 Posts: 86
|
Так... порисовал эпюры, схему прикинул (вариант из изначального поста с прямой подачей). Выходит сложновато, но релизуемо. Самое муторное - приведение "диких" сигналов к требуемой синхронизации и выделение фронтов. "Диких" это значит чёрт-те откуда, с шумами и дребезгом.
С другой стороны, модуль получается изолированный (входы и подтверждения прерываний, !M1, !IORQ, CLK, выход на шину данных) можно сделать на в виде отдельной платки. К вечеру схему отсканирую (ну и ещё посмотрю глазами) и выложу.
Сейчас главный вопрос для меня в том, чего я хочу больше - программируемого приоритета (и заплатить за это числом прерываний) или как раз их числа. Сделать 5-7 программируемых или 10 с фиксированным приоритетом (это если взять ИВ3). Режим прерываний явно IM2 - не хочу терять RST.
|
30 Jan 2021 20:16 |
|
|
masterspammer
Fanat
Joined: 13 Dec 2020 21:11 Posts: 86
|
Вот схема; пояснения - красным показаны сигналы прерывания, в итоге преобразуемые в INT_S; "обработка" выделена зелёным, INT_R - сброс триггеров, важно, что INT_S и INT_R невозможны одновременно; защёлка в ИР23 - по окончанию !M1 (возможно её надо задержать добавлением 1-2 лог. элемента для работы на высокой частоте).
Верхний вариант - несколько (до 7) сигналов проходят через "очищающие" регистры на входе (какие именно - зависит от числа каналов и имеющихся микросхем - ТМ9, ИР23) и по фронту устанавливают каждый свой RS-триггер, далее защёлкиваются в регистр и выдаются как есть на шину данных, вместе с регистром I образуя вектор; во время выставления по сигналу INT_R они сбрасывают каждый свой RS триггер через "прозрачный" регистр ИР40 (можно применить ЛП4, ЛП6, да хоть сборку инверторов с третьим состоянием).
Ниже - вариант с приоритетным шифратором (изменяемый фрагмент) - защёлкивается уже номер прерывания, а по сигналу INT_R сбрасивается один триггер по расшифрованному коду.
Схема сброса не показана.
|
30 Jan 2021 22:30 |
|
|
Who is online |
Users browsing this forum: No registered users and 32 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
|
|