|
|
  |
Внешний контроллер прерываний |
|
|
|
Mar 6 2007, 11:27
|

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

|
Цитата(SasaVitebsk @ Mar 6 2007, 03:58)  По-моему zltigo прав. На сколько я помню 8259(кр580вн59) и 8259А (кр1810вн59а) банально отключают озу программы и выставляют код команды перехода по прерыванию. Возможно прав, но судя по временным диаграмам из даташита на i8259 Intel нет. Сам я с этим контроллером не сталкивался, только читал про него  Конечно, не лучший вариант... Но я спрашивал не именно про него а про аналогичные современные. Возможно, я не совсем ясно и правильно поставил вопрос. Хотелось бы иметь девайс, который бы генерил прерывание и хранил бы в своих регистрах номер прерывания etc. Обработчик прерывания в МК обращался бы к контроллеру, считывал бы спокойно что ему надо из внутренних регистров и решал бы, что делать дальше. Цитата(Alex_Pol @ Mar 6 2007, 08:43)  Цитата(Nanobyte @ Mar 5 2007, 23:01)  Да приладить то как раз можно.
Не спорю. Всё можно приладить.  Но выйдет не кузяво. На ПЛИСене, наверное, будет совсем красиво, но я с ними дело не имел. Посему, решал бы проблему с помощью ещё одного контроллера. Да, если реализовать на МК, будет быстро по времени реализации и не быстро по времени работы такого контроллера  . На ПЛИС заманчиво, к тому же в нее можно до кучи запихать все остальные мелкосхемы относящиеся к шине (у меня это регистр младшего байта адреса и дешифратор выборки чипов, висящих на шине), но я тоже, пока, с ПЛИСами не общался плотно
--------------------
|
|
|
|
|
Mar 6 2007, 13:15
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

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

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

|
Цитата(Dog Pawlowa @ Mar 6 2007, 17:15)  Про захват шины загнули, конечно... Да ладно, спишем на возраст Цитата(Dog Pawlowa @ Mar 6 2007, 17:15)  Сигнал INTA работает как признак, означающий, что контроллеру нужно передать вектор. И микроконтроллер своей логикой сразу после сохранения старого значения счетчика команд помещает этот вектор в счетчик команд. При использовании неподдерживающего этот режим микроконтроллера все нужно реализовывать программно - прочитать вектор, и ручками перейти по этому адресу. Время, затраченное на вызов прерывания, будет намного больше независимо от того, на чем контроллер делать - на ПЛИС, использовать старый из мусорки или что-то еще. Да уж, это точно...Ладно, будем крутить кубик-рубик
--------------------
|
|
|
|
|
Mar 6 2007, 15:15
|
Местный
  
Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225

|
Цитата(muravei @ Mar 6 2007, 15:06)  А берет его(вектор) откуда? из 8259.
|
|
|
|
|
Mar 6 2007, 15:59
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(m16 @ Mar 6 2007, 16:15)  Цитата(muravei @ Mar 6 2007, 15:06)  А берет его(вектор) откуда?
из 8259. И вектор в свою очередь программируется процессором (старшие биты), а младшие определяются номером прерывания. Можно было парой команд сменить все вектора прерываний. Вот сейчас вспоминаю, и вижу, что система на 8080 была намного более гибкой и универсальной по сравнению с теперяшними контроллерами
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Mar 6 2007, 16:59
|

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

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

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

|
Цитата(Dog Pawlowa @ Mar 6 2007, 15:59)  ... Вот сейчас вспоминаю, и вижу, что система на 8080 была намного более гибкой и универсальной по сравнению с теперяшними контроллерами  Да-а-а, многие из нас с 580-й серии начинали  . Ностальгия однако. Но насчёт гибкости и универсальности я бы не стал говорить. Да, снаружи процессора можно было много наворотить. Но удобство использования всего этого, как бы это помягче сказать ..... Попробуйте на такой системе изобразить аналог команд SBI/CBI  . Сколько бы это тактов/циклов заняло? А прерывания ? Не-е-е-т, к хорошему привыкаешь быстро!
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Mar 6 2007, 18:21
|

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

|
Цитата(prottoss @ Mar 6 2007, 18:22)  Прерывания асинхронные и заведомо не известно, сколько их возникнет одновременно. А количество то их какое? Сколько тысяч?  Можно, конечно, для каждого прерывания по аппаратной защелке приделать, кроме этого собрать их в кучу при помощи И либо ИЛИ, и на тот же INT. А в подпрограмме обработки опросить и сбросить защелки. Естественно, задействовав дополнительные ноги контроллера. Думаю, на какой-нибудь подходящей программируемой логической мелкосхеме это вполне можно реализовать. Цитата(prottoss @ Mar 6 2007, 18:22)  PS: Сорри, конечно, всем, но зря я упомянул 8259. Похоже, кроме "Ода семейству 8080" ничего путнего я не узнаю  Дык, 8259 по принципу обработки прерывания напрямую с AVR не совместим. Все равно какие-то аппаратно-программные костыли приделывать придется и не факт, что они окажутся приемлемыми.
|
|
|
|
|
Mar 6 2007, 18:39
|

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

|
Цитата(kv_addr @ Mar 6 2007, 22:21)  Цитата(prottoss @ Mar 6 2007, 18:22)  Прерывания асинхронные и заведомо не известно, сколько их возникнет одновременно.
А количество то их какое? Сколько тысяч? Можно, конечно, для каждого прерывания по аппаратной защелке приделать, кроме этого собрать их в кучу при помощи И либо ИЛИ, и на тот же INT. А в подпрограмме обработки опросить и сбросить защелки. Естественно, задействовав дополнительные ноги контроллера. Думаю, на какой-нибудь подходящей программируемой логической мелкосхеме это вполне можно реализовать. Цитата(prottoss @ Mar 6 2007, 18:22)  PS: Сорри, конечно, всем, но зря я упомянул 8259. Похоже, кроме "Ода семейству 8080" ничего путнего я не узнаю  Дык, 8259 по принципу обработки прерывания напрямую с AVR не совместим. Все равно какие-то аппаратно-программные костыли приделывать придется и не факт, что они окажутся приемлемыми. Прерываний как раз 8 штук. Я, когда задавал вопрос, в даташите подробно не копаля в 8259, но принцип его работы знал. Плохо, конечно, что он заточен под 8080 и 8086. Про 8259 я упомянул, потому как внешне он красиво смотрится: 1.Наличие 8 линий прерываний 2.Наличие 8-и разрядной шины данных + набор стандартных сигналов (RD/WR/CS) 3.Настройка через внутренние регистры. В идеале, имея такой, достаточно всего одной линии прерывания. Конечно, развесистый обработчик тоже не фонтан, но прерывания возникают относительно не часто, с периодом примерно в одну мс... НО асинхронно. Скорее всего, буду пытаться делать на ПЛИСине, как говорил выше.
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|