nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 18 Apr 2024 04:43



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

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Теперь осталось найти требуемые микросхемы (и выбрать вариант, конечно же) - вопрос - смогу ли уместиться на левую макетку к процессору (на фото позирует другая микросхема, но Z80 тоже есть) и оставить место для тактового генератора, если нет, то соберу часть, инвариантную к способу снятия сигнала (регистры, шифратор, если он будет), а выходные буферы/триггеры - уже для отдельных прерываний, приходящих извне.


Attachments:
img_0002.jpg
img_0002.jpg [ 444.03 KiB | Viewed 6868 times ]
31 Jan 2021 00:32
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Не решаюсь отредактировать сообщение (был матёрый глюк с их дублированием), нашёл ошибку при перерисовывании схемы - сигнал IB должен браться с инверсного вывода триггера / регистра.


01 Feb 2021 23:38
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
Интересно. По первой схеме. Если вернутся в начало. За каждое прерывание отвечает один бит (INT1 – 000 0001, INT2 – 000 0010 и т.д.). Вроде нормально пока не прилетит два прерывания одновременно, тогда получится 000 0011 (вектор). И как на этот вектор реагировать программе? При условии, что прерывания подтверждаются сразу аппаратно автоматически на стороне источника (как я понял). А если одновременно прерываний будет 3...7?

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


02 Feb 2021 03:30
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Alekcandr wrote:
Интересно. По первой схеме. Если вернутся в начало. За каждое прерывание отвечает один бит (INT1 – 000 0001, INT2 – 000 0010 и т.д.). Вроде нормально пока не прилетит два прерывания одновременно, тогда получится 000 0011 (вектор). И как на этот вектор реагировать программе? При условии, что прерывания подтверждаются сразу аппаратно автоматически на стороне источника (как я понял). А если одновременно прерываний будет 3...7?

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

Тогда пусть у нас вектор будет 0000 0100 ... 1111 1100, а таблица такая:
Code:
адрес    что там
00000000 00 00 00 00  - тут можно хранить что угодно
00000100 C3 XX XX 00 - JP INT_1
00001000 C3 XX XX 00 - JP INT_2
00001100 C3 XX XX 00 - JP INT_1_2
00010000 C3 XX XX 00 - JP INT_3
00010100 C3 XX XX 00 - JP INT_1_3
00011000 C3 XX XX 00 - JP INT_2_3
00011100 C3 XX XX 00 - JP INT_1_2_3 ... и так далее

где INT_1 INT_2 INT_3... - обычные обработчики, а вот необычные - такие:

Quote:
INT_1_2: CALL INT_1
JP INT_2

или наоборот - вот именно так (порядком вызова в составных обработчиков) и реализуется любой приоритет без перепайки..
Quote:
INT_1_2: CALL INT_2
JP INT_1

и так далее
Quote:
INT_1_2_3: CALL INT_1
CALL INT_2
JP INT_3

...так до 6 прерываний, если поиграть с JR, то можно сделать и 7 (но через :obye: )

Думал попробовать с дешифрацией (должно прикольно отщёлкивать триггеры по одному), да не нашёл ИВ1, а заказывать издалека влом.


02 Feb 2021 03:53
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
P.S. Если схему делать без аппаратного снятия сигналов, то вообще простая получается - буфер и логический элемент.


02 Feb 2021 04:00
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Выше я напутал, глядя на mode 0, на самом деле подаются 7 бит, а в таблице не JP ADDR, а просто ADDR, так что легко получить честные 7 прерываний с софтовым приоритетом.
Code:
адрес    что там
00000000 00 00  - тут можно хранить что угодно
00000010 XX XX - INT_1
00000100 XX XX - INT_2
00000110 XX XX - INT_1_2
00001000 XX XX - INT_3
00001010 XX XX - INT_1_3
00001100 XX XX - INT_2_3
00001110 XX XX - INT_1_2_3 ... и так далее


03 Feb 2021 05:20
Profile
Doomed

Joined: 01 Oct 2007 10:30
Posts: 665
Location: Ukraine
Reply with quote
masterspammer wrote:
Выше я напутал, глядя на mode 0, на самом деле подаются 7 бит, а в таблице не JP ADDR, а просто ADDR, так что легко получить честные 7 прерываний с софтовым приоритетом.
Я сообразил :), не надо уточнений. Тема у нас ведь "Нетрадиционная обработка прерываний".

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


05 Feb 2021 04:10
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
Маленький постскриптум - ради чего это придумывалось (в том числе и в процессе обсуждения)

Во-первых, для возможности аппаратно конфигурировать устройство с шиной - если сделать параллельную шину с разъёмами, примерно как у RC2014, то на неё можно вывесить INT1, INT2... INT_ASK и установить конфигурацию джамперами (привет, ISA); для Daisy Chain надо вставлять устройства в определённой последовательности и замыкать пропуски.

Во-вторых, ради возможности подключать сильно разные источники прерывания; например, что-то Zilogовское, а что-то - самодельное. Делать свою реализацию Daisy Chain почему-то не хочется (будет не сильно проще, причём по экземпляру на устройство). Ограничиваться Zilogовскими контроллерами - тоже.

В третьих для собственно программной установки приоритета.

Что держалось в голове в качестве примерной конфигурации:

Условный COVOX (скорее всего тут максимальный приоритет); пара последовательных портов на Z85C3; параллельный порт на ВВ55; какой-нибудь таймер плюс ещё свободные прерывания на вырост. При этом не хочется заранее делать предположений о приоритетах свободных прерываний, да и те же последовательные порты при работе на разных скоростях имеют разную важность.

----
Где-то там же (скорее всего на буфере шины данных) нужно блокировать выставление вектора контроллером (если я не напутал и это не отключается программно), точнее - не читать ничего с шины данных, когда идёт чтение вектора с регистра ИРчто-то_там.


08 Feb 2021 20:07
Profile
Junior

Joined: 14 Feb 2022 16:22
Posts: 1
Reply with quote
masterspammer wrote:
Маленький постскриптум - ради чего это придумывалось (в том числе и в процессе обсуждения)

Во-первых, для возможности аппаратно конфигурировать устройство с шиной - если сделать параллельную шину с разъёмами, примерно как у RC2014, то на неё можно вывесить INT1, INT2... INT_ASK и установить конфигурацию джамперами (привет, ISA); для Daisy Chain надо вставлять устройства в определённой последовательности и замыкать пропуски.

......

Тема ещё актуальна?


14 Feb 2022 16:29
Profile
Fanat
User avatar

Joined: 13 Dec 2020 21:11
Posts: 86
Reply with quote
apendix wrote:
Тема ещё актуальна?


Пардон, не отследил момент.
Тут получилось попасть в два переезда подряд (в сумме всего км. на 20, но два раза это два раза), доперевожу запчасти.
Максимум покупал детальки и продумывал логику. Так что актуально, но приторможено.


24 Oct 2022 03:18
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 40 posts ]  Go to page Previous  1, 2, 3

Who is online

Users browsing this forum: Google [Bot] and 4 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.