реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Внешний контроллер прерываний
prottoss
сообщение Mar 6 2007, 11:27
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(SasaVitebsk @ Mar 6 2007, 03:58) *
По-моему zltigo прав. На сколько я помню 8259(кр580вн59) и 8259А (кр1810вн59а) банально отключают озу программы и выставляют код команды перехода по прерыванию.
Возможно прав, но судя по временным диаграмам из даташита на i8259 Intel нет. Сам я с этим контроллером не сталкивался, только читал про него smile.gif Конечно, не лучший вариант... Но я спрашивал не именно про него а про аналогичные современные. Возможно, я не совсем ясно и правильно поставил вопрос. Хотелось бы иметь девайс, который бы генерил прерывание и хранил бы в своих регистрах номер прерывания etc. Обработчик прерывания в МК обращался бы к контроллеру, считывал бы спокойно что ему надо из внутренних регистров и решал бы, что делать дальше.

Цитата(Alex_Pol @ Mar 6 2007, 08:43) *
Цитата(Nanobyte @ Mar 5 2007, 23:01) *

Да приладить то как раз можно.

Не спорю. Всё можно приладить. smile.gif Но выйдет не кузяво. На ПЛИСене, наверное, будет совсем красиво, но я с ними дело не имел. Посему, решал бы проблему с помощью ещё одного контроллера.
Да, если реализовать на МК, будет быстро по времени реализации и не быстро по времени работы такого контроллера smile.gif . На ПЛИС заманчиво, к тому же в нее можно до кучи запихать все остальные мелкосхемы относящиеся к шине (у меня это регистр младшего байта адреса и дешифратор выборки чипов, висящих на шине), но я тоже, пока, с ПЛИСами не общался плотно


--------------------
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Mar 6 2007, 12:28
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(prottoss @ Mar 6 2007, 12:27) *
Хотелось бы иметь девайс, который бы генерил прерывание и хранил бы в своих регистрах номер прерывания etc. Обработчик прерывания в МК обращался бы к контроллеру, считывал бы спокойно что ему надо из внутренних регистров и решал бы, что делать дальше.


Плис в данном случае не нужна. Вот схема обрабатывающая 8 каналов прерывания по срезу. Регистр типа ИР23 или ИР37. Вы получаете Int0 и можете с порта (если сигнал /RD постоянно в 0) прочитать источник. Если свободных портов нет, то вы можете повесить всё это на шину данных параллельно внешнему ОЗУ к примеру. В этом случае надо добавить ещё схему И или дешифратор адреса(к примеру на ИД7) для формирования обращения к устройству. Таким образом данная схема ног занимать не будет и будет читаться как внешняя ячейка памяти, расположенная по определённому адресу.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
prottoss
сообщение Mar 6 2007, 12:49
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(SasaVitebsk @ Mar 6 2007, 16:28) *
Плис в данном случае не нужна. Вот схема обрабатывающая 8 каналов прерывания по срезу.
Угу... Только если придут два прерывания подряд с периодом, меньшим, чем время реакции МК на прерывание, то про первое можно забыть, так как второе его затрет


--------------------
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 6 2007, 13:15
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Про захват шины загнули, конечно...
Сигнал INTA работает как признак, означающий, что контроллеру нужно передать вектор.
И микроконтроллер своей логикой сразу после сохранения старого значения счетчика команд помещает этот вектор в счетчик команд.
При использовании неподдерживающего этот режим микроконтроллера все нужно реализовывать программно - прочитать вектор, и ручками перейти по этому адресу. Время, затраченное на вызов прерывания, будет намного больше независимо от того, на чем контроллер делать - на ПЛИС, использовать старый из мусорки или что-то еще.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Mar 6 2007, 14:01
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Dog Pawlowa @ Mar 6 2007, 17:15) *
Про захват шины загнули, конечно...
Да ладно, спишем на возраст smile.gif

Цитата(Dog Pawlowa @ Mar 6 2007, 17:15) *
Сигнал INTA работает как признак, означающий, что контроллеру нужно передать вектор.
И микроконтроллер своей логикой сразу после сохранения старого значения счетчика команд помещает этот вектор в счетчик команд.
При использовании неподдерживающего этот режим микроконтроллера все нужно реализовывать программно - прочитать вектор, и ручками перейти по этому адресу. Время, затраченное на вызов прерывания, будет намного больше независимо от того, на чем контроллер делать - на ПЛИС, использовать старый из мусорки или что-то еще.
Да уж, это точно...Ладно, будем крутить кубик-рубик


--------------------
Go to the top of the page
 
+Quote Post
muravei
сообщение Mar 6 2007, 15:06
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Dog Pawlowa @ Mar 6 2007, 13:15) *
И микроконтроллер своей логикой сразу после сохранения старого значения счетчика команд помещает этот вектор в счетчик команд.

А берет его(вектор) откуда?
Go to the top of the page
 
+Quote Post
m16
сообщение Mar 6 2007, 15:15
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225



Цитата(muravei @ Mar 6 2007, 15:06) *
А берет его(вектор) откуда?

из 8259.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Mar 6 2007, 15:30
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(muravei @ Mar 6 2007, 19:06) *
Цитата(Dog Pawlowa @ Mar 6 2007, 13:15) *

И микроконтроллер своей логикой сразу после сохранения старого значения счетчика команд помещает этот вектор в счетчик команд.

А берет его(вектор) откуда?
Подает на вывод INTA 8259 два(три) строба по которым 8259 выставляет на шину данных два(три) байта вектора прерывания


--------------------
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 6 2007, 15:59
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(m16 @ Mar 6 2007, 16:15) *
Цитата(muravei @ Mar 6 2007, 15:06) *

А берет его(вектор) откуда?

из 8259.

И вектор в свою очередь программируется процессором (старшие биты), а младшие определяются номером прерывания. Можно было парой команд сменить все вектора прерываний.
Вот сейчас вспоминаю, и вижу, что система на 8080 была намного более гибкой и универсальной по сравнению с теперяшними контроллерами smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Alex_Pol
сообщение Mar 6 2007, 16:22
Сообщение #25


Частый гость
**

Группа: Свой
Сообщений: 192
Регистрация: 23-03-05
Из: Украина. Днепропетровск
Пользователь №: 3 626



Цитата(prottoss @ Mar 6 2007, 14:30) *
Подает на вывод INTA 8259 два(три) строба по которым 8259 выставляет на шину данных два(три) байта вектора прерывания
Второй и 3-й стробы подавал ВК28, вроде. Разбирался с этим 22 года тому назад. И с тех пор красивее ИК580 не встречалось. Как первая любовь. smile.gif

Сообщение отредактировал Alex_Pol - Mar 6 2007, 16:25
Go to the top of the page
 
+Quote Post
kv_addr
сообщение Mar 6 2007, 16:59
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-07-04
Из: Полтава
Пользователь №: 279



Если существует определенная детерминированность и никогда не будет одновременного возникновения двух и более прерываний, используя прерывание PinChange можно увеличить число источников прерывания за счет установки на соответствующие линии порта шифратора. В пределе с одного порта можно получить их до 255 штук. В любом случае, прерывание PinChange возникает при изменении уровня на любой из линий порта для которых это прерывание разрешено, и в подпрограмме обработки прерывания происходит "разбор полетов", т.е. какую ногу "дернули", путем анализа, в каком бите произошло изменение вызвавшее это прерывание. Если же сигналы от источников прерывания подключить к шифратору то в случае прихода прерывания одновременно изменяется состояние одной либо более (в зависимости от присвоенного шифратором номера) линий порта, что вызовет самое обыкновенное PinChange прерывание, а вот номер прерывающего сигнала можно выяснить путем дешифрации изменения байта с порта.

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

Еще раз повторю, такое возможно при заведомом невозникновении одновременно двух и более прерываний, в противном случае неопределенность состояния шифратора не даст возможности определить источник.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Mar 6 2007, 17:00
Сообщение #27


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(Dog Pawlowa @ Mar 6 2007, 15:59) *
... Вот сейчас вспоминаю, и вижу, что система на 8080 была намного более гибкой и универсальной по сравнению с теперяшними контроллерами smile.gif

Да-а-а, многие из нас с 580-й серии начинали smile.gif . Ностальгия однако.
Но насчёт гибкости и универсальности я бы не стал говорить. Да, снаружи процессора можно было много наворотить. Но удобство использования всего этого, как бы это помягче сказать .....
Попробуйте на такой системе изобразить аналог команд SBI/CBI sad.gif . Сколько бы это тактов/циклов заняло? А прерывания ? Не-е-е-т, к хорошему привыкаешь быстро!


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
prottoss
сообщение Mar 6 2007, 17:22
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(kv_addr @ Mar 6 2007, 20:59) *
Если существует определенная детерминированность и никогда не будет одновременного возникновения двух и более прерываний...
Прерывания асинхронные и заведомо не известно, сколько их возникнет одновременно.



PS: Сорри, конечно, всем, но зря я упомянул 8259. Похоже, кроме "Ода семейству 8080" ничего путнего я не узнаю smile.gif


--------------------
Go to the top of the page
 
+Quote Post
kv_addr
сообщение Mar 6 2007, 18:21
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 208
Регистрация: 6-07-04
Из: Полтава
Пользователь №: 279



Цитата(prottoss @ Mar 6 2007, 18:22) *
Прерывания асинхронные и заведомо не известно, сколько их возникнет одновременно.

А количество то их какое? Сколько тысяч? wink.gif
Можно, конечно, для каждого прерывания по аппаратной защелке приделать, кроме этого собрать их в кучу при помощи И либо ИЛИ, и на тот же INT. А в подпрограмме обработки опросить и сбросить защелки. Естественно, задействовав дополнительные ноги контроллера. Думаю, на какой-нибудь подходящей программируемой логической мелкосхеме это вполне можно реализовать.

Цитата(prottoss @ Mar 6 2007, 18:22) *
PS: Сорри, конечно, всем, но зря я упомянул 8259. Похоже, кроме "Ода семейству 8080" ничего путнего я не узнаю smile.gif

Дык, 8259 по принципу обработки прерывания напрямую с AVR не совместим. Все равно какие-то аппаратно-программные костыли приделывать придется и не факт, что они окажутся приемлемыми.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Mar 6 2007, 18:39
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(kv_addr @ Mar 6 2007, 22:21) *
Цитата(prottoss @ Mar 6 2007, 18:22) *

Прерывания асинхронные и заведомо не известно, сколько их возникнет одновременно.

А количество то их какое? Сколько тысяч? wink.gif
Можно, конечно, для каждого прерывания по аппаратной защелке приделать, кроме этого собрать их в кучу при помощи И либо ИЛИ, и на тот же INT. А в подпрограмме обработки опросить и сбросить защелки. Естественно, задействовав дополнительные ноги контроллера. Думаю, на какой-нибудь подходящей программируемой логической мелкосхеме это вполне можно реализовать.

Цитата(prottoss @ Mar 6 2007, 18:22) *
PS: Сорри, конечно, всем, но зря я упомянул 8259. Похоже, кроме "Ода семейству 8080" ничего путнего я не узнаю smile.gif

Дык, 8259 по принципу обработки прерывания напрямую с AVR не совместим. Все равно какие-то аппаратно-программные костыли приделывать придется и не факт, что они окажутся приемлемыми.
Прерываний как раз 8 штук. Я, когда задавал вопрос, в даташите подробно не копаля в 8259, но принцип его работы знал. Плохо, конечно, что он заточен под 8080 и 8086. Про 8259 я упомянул, потому как внешне он красиво смотрится:
1.Наличие 8 линий прерываний
2.Наличие 8-и разрядной шины данных + набор стандартных сигналов (RD/WR/CS)
3.Настройка через внутренние регистры.

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


--------------------
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016