nedoPC.org

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



Reply to topic  [ 12 posts ] 
По теме прерываний 
Author Message
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Привет всем!

Периферийные микрухи Zilog-а имеют всего одну линию прохождения прерываний, см. рисунок:
Code:
+---------+      1             2               N
|         |  +--------+   +--------+       +--------+
|Z80 CPU| <--|IEO  IEI|---|IEO  IEI|--... -|IEO  IEI|--
|         |  +--------+   +--------+       +--------+
+---------+

Ессно самая ближняя к процессору микруха имеет самый высокий приоритет прерывания. Почему Zilog выбрал такую схему ?, ведь в ней будут происходить потери более младших по старшинству прерываний, когда они придут и не смогут дойти до процессора, если в это время уже пришло более старшее прерывание. Т.е. если микруха "1" получила прерывание, то прерывание от микрухи "2" она уже не пропустит (которое пришло чуть позже прерывания 1-й м/с). В итоге теряем прерывание N2.

_________________
Vasil Ivanov
vasil-i@yandex.ru


16 Sep 2009 23:26
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Reply with quote
Post 
Сам это дело не паял, но сейчас, паяя прерывания на базе 1818ВН19, параллельно разбирался с прерываниями вообще. Есть команда RETI, которую слушает вся периферия и в ответ старшая из обслуженных сбрасывает свой запрос. Ближняя это младшая. Ничего не теряется. Прерывания уровнями идут, не фронтами.


17 Sep 2009 08:47
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Mixa64 wrote:
Сам это дело не паял, но сейчас, паяя прерывания на базе 1818ВН19, параллельно разбирался с прерываниями вообще. Есть команда RETI, которую слушает вся периферия и в ответ старшая из обслуженных сбрасывает свой запрос. Ближняя это младшая. Ничего не теряется. Прерывания уровнями идут, не фронтами.

Наверное речь идет об К(Р)580ВН59/К(Р)1816ВН59? Прерывание может быть как по фронту (защелкивается в контроллере), так и по уровню. Прерывание по фронту потеряться не может, оно хранится, а по уровню, если не дождаться ответа можно потерять. NMI у Z80 как раз по заднему фронту (по спаду, т.е. перепад 1=>0), а вот INT как раз по уровню. Так же, Z80 очень неплохо стыкуется с ВН59м контроллером в нативном режиме IM 0. При этом, мы получаем и настраиваемые приоритеты, и настраиваемые вектора и т.д. Причем, 1816ВН59 имеет бОльший сервис, по сравнению с 580ВН59, т.к. предназначался для 1816ВМ86 (ну типо i8086), но программно и аппаратно совместим со старым 580ВН59. Т.е., имеет все те же функции + свое.


17 Sep 2009 10:19
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Reply with quote
Post 
HardWareMan wrote:
Наверное речь идет об К(Р)580ВН59/К(Р)1816ВН59?


Извините, поправлю, 1810. Но 1818ВН19 это аналог AMD Am9519. По разводке полностью совпадает с интеловскими 59/59A :) Но принцип каскадирования другой. А фишка его в том, что он поистине универсальный, для каждого уровня IRQ можно запрограммировать от 1 до 4 байт ответа по INTA. Я свой запрограммировал на одно байтный ответ, а Z80 перевожу в im2 и тащусь от прерываний по таблице безо всяких call как в 59 и с одним INTA в отличие от 59A в режиме 86-го 8)


18 Sep 2009 01:25
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Mixa64 wrote:
HardWareMan wrote:
Наверное речь идет об К(Р)580ВН59/К(Р)1816ВН59?

Извините, поправлю, 1810. Но 1818ВН19 это аналог AMD Am9519. По разводке полностью совпадает с интеловскими 59/59A :) Но принцип каскадирования другой.

Точно. Слишком много провел времени на 1816ВЕ31 %)
Mixa64 wrote:
А фишка его в том, что он поистине универсальный, для каждого уровня IRQ можно запрограммировать от 1 до 4 байт ответа по INTA. Я свой запрограммировал на одно байтный ответ, а Z80 перевожу в im2 и тащусь от прерываний по таблице безо всяких call как в 59 и с одним INTA в отличие от 59A в режиме 86-го 8)

Только 59й выдает RST n, что накладывает жуткие ограничения, которые чуть-чуть снимаются 59А за счет подсовывания JMP. А вот фишка ВН19 с программируемым ответом - это интересно. Тогда получается возможно использование IM 2 режима с векторами (по идее до 256 разных прерываний). Занятный чипик, надо почитать о нем.


18 Sep 2009 04:28
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Post 
HardWareMan wrote:
Mixa64 wrote:
Сам это дело не паял, но сейчас, паяя прерывания на базе 1818ВН19, параллельно разбирался с прерываниями вообще. Есть команда RETI, которую слушает вся периферия и в ответ старшая из обслуженных сбрасывает свой запрос. Ближняя это младшая. Ничего не теряется. Прерывания уровнями идут, не фронтами.

Наверное речь идет об К(Р)580ВН59/К(Р)1816ВН59? Прерывание может быть как по фронту (защелкивается в контроллере), так и по уровню. Прерывание по фронту потеряться не может, оно хранится, а по уровню, если не дождаться ответа можно потерять. NMI у Z80 как раз по заднему фронту (по спаду, т.е. перепад 1=>0), а вот INT как раз по уровню.


Едем дальше. 8259A контроллер запоминает входящие запросы прерываний в массиве D-триггеров. Схема:
Code:
              +-+---+
1-й запрос | | T |
       >------|D|  Q|------>  на блок
           +--|C|   |
           |  | |   |
           |  +-+---+
           |
           |
           |  +-+---+
2-й запрос | | T |
       >---|--|D|  Q|------>  выбора
           o--|C|   |
           |  | |   |
           |  +-+---+
           |
           |
           |  +-+---+
N-й запрос | | T |
       >---|--|D|  Q|------>  приоритетов
           o--|C|   |
           |  | |   |
           |  +-+---+
           |
      синхронизация


Я правильно думаю, что синхронизация блока этих триггеров идет от тактовой процессора, чтобы синхронизировать входящие запросы прерываний (которые по-сути асинхронны) ?.

Отсюда вопрос. D-триггер запоминает входной сигнал "D" на положительном фронте сигнала входа "C". Но если на "C" будет тактовая частота и положительный фронт этого сигнала будет появляться каждый период (а значит и возможность изменения запомненных данных), то как в таком случает удержать запомненным ранее пришедший запрос прерывания ?.

Это для случая, когда более старший запрос прерывания пришел и находится в обработке, и приходят более младшие запросы на прерывание, которые надо сохранить, пока обрабатывается этот старший запрос (возможно "длительное" время, скажем чтение/запись блока в режиме прямого доступа к памяти).

P.S. Сорри за качество рисунка.

_________________
Vasil Ivanov
vasil-i@yandex.ru


18 Sep 2009 09:50
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Post 
Mixa64 wrote:
HardWareMan wrote:
Наверное речь идет об К(Р)580ВН59/К(Р)1816ВН59?


Извините, поправлю, 1810. Но 1818ВН19 это аналог AMD Am9519. По разводке полностью совпадает с интеловскими 59/59A :) Но принцип каскадирования другой. А фишка его в том, что он поистине универсальный, для каждого уровня IRQ можно запрограммировать от 1 до 4 байт ответа по INTA. Я свой запрограммировал на одно байтный ответ, а Z80 перевожу в im2 и тащусь от прерываний по таблице безо всяких call как в 59 и с одним INTA в отличие от 59A в режиме 86-го 8)


8259A хорошо юзать, но у него только 8 входов на прерывания. Для системной платы одной микрухой не обойтись, нужно каскадировать. Хотелось бы засунуть контроллер прерываний (непрограммируемый и входов на 16) в ПЛИС и иметь свой чипсет, а не быть привязанным к доставаемости конкретных микрух и куче корпусов на плате. У меня есть 8259A в VHDL варианте, но при этом занимается 41 пин в ПЛИС, в то время как физическая м/с 8259A имеет 28 пинов. Жалко ноги ПЛИС-а.

_________________
Vasil Ivanov
vasil-i@yandex.ru


18 Sep 2009 09:53
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Vasil Ivanov wrote:
У меня есть 8259A в VHDL варианте, но при этом занимается 41 пин в ПЛИС, в то время как физическая м/с 8259A имеет 28 пинов. Жалко ноги ПЛИС-а.


а о какой плисине речь? палка-галка?

если кусок на VHDL не очень большой - можешь прям сюда запостить в теге code? :roll:

_________________
:dj: https://mastodon.social/@Shaos


18 Sep 2009 13:51
Profile WWW
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Post 
Shaos wrote:
Vasil Ivanov wrote:
У меня есть 8259A в VHDL варианте, но при этом занимается 41 пин в ПЛИС, в то время как физическая м/с 8259A имеет 28 пинов. Жалко ноги ПЛИС-а.


а о какой плисине речь? палка-галка?

если кусок на VHDL не очень большой - можешь прям сюда запостить в теге code? :roll:


В Квартусе ставил, для примера, большую ПЛИС Спринтера.
Сорцы 8259A кинул тебе на е-мыло.

_________________
Vasil Ivanov
vasil-i@yandex.ru


22 Sep 2009 08:22
Profile
Doomed

Joined: 25 Aug 2009 07:02
Posts: 459
Location: Москва
Reply with quote
Post 
Везде пишут, что в режиме IM2 младший бит младшего байта указателя на вход в обработчик должен быть равен 0, потому де как процессор считывает _два_ соседних байта и формирует адрес обработчика, поэтому, мол младший 0 и все тут. Но что-то в этой логике не то, логичнее было бы просто взять байт от ВУ, состыковать его с содержимым регистра I и прочитать адрес по этому адресу. Собственно, так и происходит, я проверил. Не важно, с каким младшим битом ВУ выдает свой байт. Более того, не важно вообще, чтобы вектор адресов обработчиков был в памяти машины компактной структурой. Важно лишь, чтобы адреса не перекрывались. ВУ даже 0FFh может отдать, процессор прочитает ячейки [I][FF] и [I+1][0]


29 Sep 2009 05:32
Profile
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Собственно, вы совершенно правы. А про 0, наверное, пишут спектрумисты.

_________________
Extreme Entertainment


29 Sep 2009 11:12
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Vasil Ivanov wrote:
Сорцы 8259A кинул тебе на е-мыло.


Обнаружил, что это у меня уже было :)

Code:
-rw-r--r-- 1 shaos users 207611 2007-03-06 00:22 8237_OSED.zip
-rw-r--r-- 1 shaos users 361500 2007-03-06 00:22 8251_OSED.zip
-rw-r--r-- 1 shaos users 225953 2007-03-06 00:22 8255_OSED.zip
-rw-r--r-- 1 shaos users 149086 2007-03-06 00:22 8259_OSED.zip


Последняя строчка - по внутренностям отличие от твоего архива только в отсутствии файла www.pudn.com.txt

_________________
:dj: https://mastodon.social/@Shaos


24 Oct 2009 17:49
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 12 posts ] 

Who is online

Users browsing this forum: No registered users and 9 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.