Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Внешний контроллер прерываний
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
prottoss
Hi All!

Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные. Есть необходимость использовать таковой с ATmega128, т.к. практически все внешние линии INTx прерываний задействованны под другие функции
Alex_Pol
Цитата(prottoss @ Mar 5 2007, 16:11) *
Hi All!
Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные.
Возьми ещё один контроллер, Мегу8, к примеру, и на ней реализуй что надо. smile.gif
prottoss
Цитата(Alex_Pol @ Mar 5 2007, 21:36) *
Цитата(prottoss @ Mar 5 2007, 16:11) *

Hi All!
Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные.
Возьми ещё один контроллер, Мегу8, к примеру, и на ней реализуй что надо. smile.gif
Хм...Идея smile.gif , надо будет подумать
GDI
Новые меги имеют прерывания на ВСЕХ ногах, например мега 48, да и мега 1280, 1281, наверняка также (нет мануалов под рукой чтобы точно сказать).
Dopler
Цитата(GDI @ Mar 5 2007, 19:08) *
Новые меги имеют прерывания на ВСЕХ ногах, например мега 48, да и мега 1280, 1281, наверняка также (нет мануалов под рукой чтобы точно сказать).


Подтверждаю, имеют. Они к тому же пин совместимые со 128, правда не такие распространенные.
prottoss
Цитата(GDI @ Mar 5 2007, 23:08) *
Новые меги имеют прерывания на ВСЕХ ногах, например мега 48, да и мега 1280, 1281, наверняка также (нет мануалов под рукой чтобы точно сказать).
Да нет, не на всех (1280, 1281 etc)... "Всего" на 24 smile.gif . Но всеж хотса узнать про внешний контроллер. Заманчиво иметь прерывания с задаваемым приоритетом
zltigo
Цитата(prottoss @ Mar 5 2007, 16:11) *
Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные. Есть необходимость использовать таковой с ATmega128, т.к. практически все внешние линии INTx прерываний задействованны под другие функции

Мил человек, ну почитайте PDF хоть по диагонали на 8259 и почие внешние контролеры. Это КОНТРОЛЛЕРЫ, которые ЗАХВАТЫВАЮТ ШИНУ ПРОЦЕССОРА и выставляют на нее команду чтения области векторов прерывания. Ну и причем здесь ATmegа???
prottoss
Цитата(zltigo @ Mar 6 2007, 00:10) *
Цитата(prottoss @ Mar 5 2007, 16:11) *

Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные. Есть необходимость использовать таковой с ATmega128, т.к. практически все внешние линии INTx прерываний задействованны под другие функции

Мил человек, ну почитайте PDF хоть по диагонали на 8259 и почие внешние контролеры. Это КОНТРОЛЛЕРЫ, которые ЗАХВАТЫВАЮТ ШИНУ ПРОЦЕССОРА и выставляют на нее команду чтения области векторов прерывания. Ну и причем здесь ATmegа???
Аха... Это где про захват шины то писанно???
prottoss
Цитата(zltigo @ Mar 6 2007, 00:10) *
Цитата(prottoss @ Mar 5 2007, 16:11) *

Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные. Есть необходимость использовать таковой с ATmega128, т.к. практически все внешние линии INTx прерываний задействованны под другие функции

Мил человек, ну почитайте PDF хоть по диагонали на 8259 и почие внешние контролеры. Это КОНТРОЛЛЕРЫ, которые ЗАХВАТЫВАЮТ ШИНУ ПРОЦЕССОРА и выставляют на нее команду чтения области векторов прерывания. Ну и причем здесь ATmegа???
На сколько я знаю, ни какого захвата шины они не производят, (я про 8259), имеют 8-бит шину данных, сигналы RD/WR/CS/A0 для общения выход прерывания INT. Для считывания вектора существует вход INTA. По отрицательным стробам от МК по этой линии, с линий данных 8253 считывается вектор и код команды для 8080. Какой захват шины то???
bomick
Цитата(prottoss @ Mar 5 2007, 17:11) *
Hi All!

Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные. Есть необходимость использовать таковой с ATmega128, т.к. практически все внешние линии INTx прерываний задействованны под другие функции


Интересовался подобным вопросом пару лет назад. Полных аналогов 8259 не нашел (кроме советских).
Дело втом что с 286 компьтеров стали истользовать итегрированные микросхемы т.е. два контроллера прерываний , контроллера прерываний , пара таймеров(8253) и часы реального времени в одном флаконе. Название микросхемы не помню. Но если надо то могу уточнитью
Alex_Pol
Вот описания работы программируемого контроллера прерываний КР580ВН59, он же 8259. "Схема управления формирует сигнал запроса на прерывание на вход INT МП. Если ему разрешено прерывание, он отвечает контроллеру сигналом на вход INTA. По этому сигналу на шину данных выдаётся первый байт команды CALL. Входящий в состав МП системы системный контроллер формирует ещё 2 сигнала, на вход INTA, по которым выдаются 2-й и 3-й байты команды CALL, содержащий адрес подпрограммы обработки прерываний." К.Г Самофалов, О.В. Викторов. "Микропроцессоры". Кіев, Тєхніка. 1989г.
Так шта... Не приладить его к AVR. А на каком нить мелком авре сделаешь контроллер прерываний, какой хошь.
SasaVitebsk
Цитата(prottoss @ Mar 5 2007, 21:58) *
Цитата(zltigo @ Mar 6 2007, 00:10) *
Цитата(prottoss @ Mar 5 2007, 16:11) *

Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные. Есть необходимость использовать таковой с ATmega128, т.к. практически все внешние линии INTx прерываний задействованны под другие функции

Мил человек, ну почитайте PDF хоть по диагонали на 8259 и почие внешние контролеры. Это КОНТРОЛЛЕРЫ, которые ЗАХВАТЫВАЮТ ШИНУ ПРОЦЕССОРА и выставляют на нее команду чтения области векторов прерывания. Ну и причем здесь ATmegа???
На сколько я знаю, ни какого захвата шины они не производят, (я про 8259), имеют 8-бит шину данных, сигналы RD/WR/CS/A0 для общения выход прерывания INT. Для считывания вектора существует вход INTA. По отрицательным стробам от МК по этой линии, с линий данных 8253 считывается вектор и код команды для 8080. Какой захват шины то???


По-моему zltigo прав. На сколько я помню 8259(кр580вн59) и 8259А (кр1810вн59а) банально отключают озу программы и выставляют код команды перехода по прерыванию. А именно RSTx её код был до 0fh. Или код входа в п/п типа 0cdh xxh xxh. Начальный адрес задавался. А вектора шли с определённым шагом. Кстати похоже работал и ПДП типа 8257. Да и ещё один не очень приятный момент для Вас. 8259 не имел приоритетов.

Теперь по сути вопроса. Такую структуру контроллера прерываний в принципе не сложно создать самому. Достаточно поставить элемент ИЛИ ну и регистр защёлкивающий состояние в момент его вызова. Регистр читается с порта либо по шине. Таким образом Вы можете расширить базу векторов прерываний.
Как сделать контроль приоритетов прерываний я в принципе описывал кратко в статье на http://nix-06.nm.ru/ и где-то здесь мы спорили с defunct.

Кстати в этой теме вообще нет ничего невозможного. Так я к примеру создавал систему с тремя МП работающими на общей памяти. Реализовывал работу 8515 с динамической памятью. Странично расширял ОЗУ для 8051 до 1Мб. Вполне представляю как включить внешний сопроцессор. Возможно и использование ПДП. (Видел в инете схему, сварганенную японцем для прямого доступа к графическому контроллеру)

А вообще если разобраться все идеи - банальны. (я о 8259, 8257, 8087). Когда смотришь на принципы обращения к полному ОЗУ из-под i8086, то сразу становится понятной схема контроллера память в самом CPU к примеру. Боже! До чего банально. Принцип реализуется одной микросхемой сумматора. smile.gif
Nanobyte
Цитата(Alex_Pol @ Mar 5 2007, 22:41) *
... Не приладить его к AVR. А на каком нить мелком авре сделаешь контроллер прерываний, какой хошь.

Да приладить то как раз можно. Но у ВН59 (Soviet) ошибочка во внутренней логике, он не формирует все 3 байта команды перехода к обработке прерывания. В 1987 году прошли с этим контроллером всю камасутру, так и не удалось заставить правильно работать. А вот 1810ВН59 вроде уже был правильный.
Если действительно нужно много прерываний, наверное лучше использовать ПЛИС. Внутри неё можно реализовать любую логику и приоритеты. Повесить его как внешнее ОЗУ и прерывать МК в нужный момент. Явно будет работать быстрее, чем дополнительный МК.
SasaVitebsk
Цитата(Nanobyte @ Mar 6 2007, 01:01) *
Да приладить то как раз можно. Но у ВН59 (Soviet) ошибочка во внутренней логике, он не формирует все 3 байта команды перехода к обработке прерывания. В 1987 году прошли с этим контроллером всю камасутру, так и не удалось заставить правильно работать. А вот 1810ВН59 вроде уже был правильный.
Если действительно нужно много прерываний, наверное лучше использовать ПЛИС. Внутри неё можно реализовать любую логику и приоритеты. Повесить его как внешнее ОЗУ и прерывать МК в нужный момент. Явно будет работать быстрее, чем дополнительный МК.


Применяли серийно. Шли - сотнями. Никаких ошибок не было. Правда было это после 88 года. 8259А самостоятельно я уже не применял.
Alex_Pol
Цитата(Nanobyte @ Mar 5 2007, 23:01) *
Да приладить то как раз можно.

Не спорю. Всё можно приладить. smile.gif Но выйдет не кузяво. На ПЛИСене, наверное, будет совсем красиво, но я с ними дело не имел. Посему, решал бы проблему с помощью ещё одного контроллера.
prottoss
Цитата(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 . На ПЛИС заманчиво, к тому же в нее можно до кучи запихать все остальные мелкосхемы относящиеся к шине (у меня это регистр младшего байта адреса и дешифратор выборки чипов, висящих на шине), но я тоже, пока, с ПЛИСами не общался плотно
SasaVitebsk
Цитата(prottoss @ Mar 6 2007, 12:27) *
Хотелось бы иметь девайс, который бы генерил прерывание и хранил бы в своих регистрах номер прерывания etc. Обработчик прерывания в МК обращался бы к контроллеру, считывал бы спокойно что ему надо из внутренних регистров и решал бы, что делать дальше.


Плис в данном случае не нужна. Вот схема обрабатывающая 8 каналов прерывания по срезу. Регистр типа ИР23 или ИР37. Вы получаете Int0 и можете с порта (если сигнал /RD постоянно в 0) прочитать источник. Если свободных портов нет, то вы можете повесить всё это на шину данных параллельно внешнему ОЗУ к примеру. В этом случае надо добавить ещё схему И или дешифратор адреса(к примеру на ИД7) для формирования обращения к устройству. Таким образом данная схема ног занимать не будет и будет читаться как внешняя ячейка памяти, расположенная по определённому адресу.
prottoss
Цитата(SasaVitebsk @ Mar 6 2007, 16:28) *
Плис в данном случае не нужна. Вот схема обрабатывающая 8 каналов прерывания по срезу.
Угу... Только если придут два прерывания подряд с периодом, меньшим, чем время реакции МК на прерывание, то про первое можно забыть, так как второе его затрет
Dog Pawlowa
Про захват шины загнули, конечно...
Сигнал INTA работает как признак, означающий, что контроллеру нужно передать вектор.
И микроконтроллер своей логикой сразу после сохранения старого значения счетчика команд помещает этот вектор в счетчик команд.
При использовании неподдерживающего этот режим микроконтроллера все нужно реализовывать программно - прочитать вектор, и ручками перейти по этому адресу. Время, затраченное на вызов прерывания, будет намного больше независимо от того, на чем контроллер делать - на ПЛИС, использовать старый из мусорки или что-то еще.
prottoss
Цитата(Dog Pawlowa @ Mar 6 2007, 17:15) *
Про захват шины загнули, конечно...
Да ладно, спишем на возраст smile.gif

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

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

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

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

А берет его(вектор) откуда?
Подает на вывод INTA 8259 два(три) строба по которым 8259 выставляет на шину данных два(три) байта вектора прерывания
Dog Pawlowa
Цитата(m16 @ Mar 6 2007, 16:15) *
Цитата(muravei @ Mar 6 2007, 15:06) *

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

из 8259.

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

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

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

Да-а-а, многие из нас с 580-й серии начинали smile.gif . Ностальгия однако.
Но насчёт гибкости и универсальности я бы не стал говорить. Да, снаружи процессора можно было много наворотить. Но удобство использования всего этого, как бы это помягче сказать .....
Попробуйте на такой системе изобразить аналог команд SBI/CBI sad.gif . Сколько бы это тактов/циклов заняло? А прерывания ? Не-е-е-т, к хорошему привыкаешь быстро!
prottoss
Цитата(kv_addr @ Mar 6 2007, 20:59) *
Если существует определенная детерминированность и никогда не будет одновременного возникновения двух и более прерываний...
Прерывания асинхронные и заведомо не известно, сколько их возникнет одновременно.



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

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

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

Дык, 8259 по принципу обработки прерывания напрямую с AVR не совместим. Все равно какие-то аппаратно-программные костыли приделывать придется и не факт, что они окажутся приемлемыми.
prottoss
Цитата(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.Настройка через внутренние регистры.

В идеале, имея такой, достаточно всего одной линии прерывания. Конечно, развесистый обработчик тоже не фонтан, но прерывания возникают относительно не часто, с периодом примерно в одну мс... НО асинхронно. Скорее всего, буду пытаться делать на ПЛИСине, как говорил выше.
GDI
Так а чем тогда мега 1280/1281/... не катит?
aesok
Цитата(prottoss @ Mar 5 2007, 17:11) *
Hi All!

Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные. Есть необходимость использовать таковой с ATmega128, т.к. практически все внешние линии INTx прерываний задействованны под другие функции

Попробуйте посмотреть на ATmega1280/1281, они дополнительно имеют 8/24 линии 'Pin Change Interrupt', может это то что вам нужно.

Анатолий.

Сорри, вы про них уже знаете.
prottoss
Цитата(GDI @ Mar 6 2007, 22:52) *
Так а чем тогда мега 1280/1281/... не катит?
Во первых, уже заложена М128, во вторых практически все линии МК заняты...:-(
kamedi_clab
Цитата(prottoss @ Mar 5 2007, 17:11) *
Hi All!

Есть ли в природе внешние контроллеры прерываний типа


можно попробовать расширители i2c pfcXXXX philips - у них при изменении на любой из 16 ног дергается специальня нога.

Еще есть контроллер 22 линий у моторолы - теперь freescell.com
prottoss
Цитата(kamedi_clab @ Mar 6 2007, 23:19) *
можно попробовать расширители i2c pfcXXXX philips - у них при изменении на любой из 16 ног дергается специальня нога.
Еще есть контроллер 22 линий у моторолы - теперь freescell.com
А че И2Ц-то??? Мож че на 1Ware подскажете?
SasaVitebsk
Цитата(Dog Pawlowa @ Mar 6 2007, 14:15) *
Про захват шины загнули, конечно...
Сигнал INTA работает как признак, означающий, что контроллеру нужно передать вектор.
И микроконтроллер своей логикой сразу после сохранения старого значения счетчика команд помещает этот вектор в счетчик команд.
При использовании неподдерживающего этот режим микроконтроллера все нужно реализовывать программно - прочитать вектор, и ручками перейти по этому адресу. Время, затраченное на вызов прерывания, будет намного больше независимо от того, на чем контроллер делать - на ПЛИС, использовать старый из мусорки или что-то еще.


Собственно спорить я не собираюсь, но так в порядке ответа Чемберлену.

А.Г.Алексенко и др. "Проектирование радио-электронной аппаратуры на микропроцессоре". стр.44.

"...с возможностью маскирования и динамического изменения дисциплины обслуживания. Для перехода к подпрограммам обслуживания прерываний контроллер формирует и подаёт на ШД процессора код команды CALL. Каскадированием БИС ...."

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


Работа ч/з внутренние регистры Вам ничего не даст. То есть удобства не добавит. Это же не внутренняя переферия. Всё равно придётся опрашивать-анализировать-переходить на подвектор. Подвесить 8259A конечно можно, но ещё одна засада. Макс. F=5МГц. smile.gif Ну и в серийное изделие я бы не закладывал. Он будет дороже чем ATMEGA128. smile.gif
SasaVitebsk
Критикуйте. smile.gif
Alex_Pol
Дык, ног свободных у prottossа, в смысле, у его меги 128, нет.
aesok
Чего-то я prottossа не понимаю. Вместо 128 меги поставить 1280-ную и получить дополнительно 32 линии ввода выводы из них 16 с прерываниями по изменению состояния он не может. А поставить рядом плисину с которыми не работал или микросхему 30-летней свежести пожалуйста.... странно.

Анатолий.
SasaVitebsk
Цитата(Alex_Pol @ Mar 7 2007, 01:20) *
Дык, ног свободных у prottossа, в смысле, у его меги 128, нет.


Так она вешается как ячейка памяти. То есть из ног берёт не больше чем 8259, если её прикручивать. То есть одну ногу.
=GM=
Цитата(SasaVitebsk @ Mar 6 2007, 18:49) *
Критикуйте. smile.gif

Что будет, если на RS-триггер подать ноль на R-вход и S-вход одновременно?
Имею в виду, какое будет состояние на выходе?

Кроме того, что будет, если IRQn будет достаточно продолжительным по времени, по сравнению с временем обработки всех прерываний?
Dopler
Цитата(aesok @ Mar 7 2007, 00:31) *
Чего-то я prottossа не понимаю. Вместо 128 меги поставить 1280-ную и получить дополнительно 32 линии ввода выводы из них 16 с прерываниями по изменению состояния он не может. А поставить рядом плисину с которыми не работал или микросхему 30-летней свежести пожалуйста.... странно.

Анатолий.


Согласен, Мега1280 со всех сторон новее, в два раза больше таймеров, ОЗУ, USART, внешних прерываний, 100! ножек корпуса, за дополнительные 3$ по сравнению с устаревающей мегой 128.
Самая дешевая (и маленькая) плис Altera будет иметь те же 100 ножек и стоить минимум 6$, а ей еще нужны такты подавать.
beer_warrior
Цитата
Самая дешевая (и маленькая) плис Altera будет иметь те же 100 ножек и стоить минимум 6$, а ей еще нужны такты подавать.

Будет стоить $2 и синхронизм ей не обязателен.

По теме. Варианты SasaVitebsk вполне правильны, только вот триггера стоило бы использовать JK. А вместо регистра - приоритетный шифратор. Тогда на 3 ноги можно будет пустить 8 прерываний. А в коде, сразу после захода в прерывание анализировать состояние соответсющего порта, и отправлять к соответсвующей строке в look-up table. Конечно по сравнению с внутренним механизмом будет медленнее, но это плата за работу с любой периферией.
Dog Pawlowa
Цитата(SasaVitebsk @ Mar 6 2007, 21:42) *
Цитата(Dog Pawlowa @ Mar 6 2007, 14:15) *

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

Собственно спорить я не собираюсь, но так в порядке ответа Чемберлену.
А.Г.Алексенко и др. "Проектирование радио-электронной аппаратуры на микропроцессоре". стр.44.
"...с возможностью маскирования и динамического изменения дисциплины обслуживания. Для перехода к подпрограммам обслуживания прерываний контроллер формирует и подаёт на ШД процессора код команды CALL. Каскадированием БИС ...."

Чего не люблю, так это подмены понятий и определений и такого ссылки на якобы авторитетов, которые быть может и с микропроцессорами то не работали. Уровень книжек в те времена был удручающе низкий. Теперь удручает цитирование этих книжек.

Захват шины - это было сказано? Было. Было сказано даже про какой-то запрет ОЗУ. - "На сколько я помню 8259(кр580вн59) и 8259А (кр1810вн59а) банально отключают озу программы и выставляют код команды перехода по прерыванию."
Ну что за бред? Если Вы это тоже вычитали, еще понятно. Но если Вы это помните??!!!

Захват шины - это ситуация, когда вместо основного мастера работает другой. Например, вместо микропроцессора - контроллер прямого доступа. Или сервисный пульт, подключенный к шине.
В процессе передачи вектора от контроллера прерываний в микроконтроллер мастером продолжает являться микроконтроллер. Конечно, "Контроллер формирует и подает", но только под управлением сигнала INTA, приходящего от микропроцессора. То есть захват шины отсутствует напрочь. А уж блокировка ОЗУ... Какая еще блокировка, если в этот момент обращение к ОЗУ не производится, чего его блокировать?
Так что Вы лучше определитесь - или Вы спорите, или что ... Очень не хотелось бы наблюдать тут пропаганду безграмотности.
Успехов smile.gif
upc2
Цитата(SasaVitebsk @ Mar 6 2007, 21:49) *
Критикуйте. smile.gif


Все это можно заменить 8 диодами и 1 конденсатором .Я так и делаю.
beer_warrior
Цитата
Все это можно заменить 8 диодами и 1 конденсатором .Я так и делаю.

А как вы различаете источник?
SasaVitebsk
Цитата(Dog Pawlowa @ Mar 7 2007, 12:40) *
Цитата(SasaVitebsk @ Mar 6 2007, 21:42) *

Цитата(Dog Pawlowa @ Mar 6 2007, 14:15) *

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

Собственно спорить я не собираюсь, но так в порядке ответа Чемберлену.
А.Г.Алексенко и др. "Проектирование радио-электронной аппаратуры на микропроцессоре". стр.44.
"...с возможностью маскирования и динамического изменения дисциплины обслуживания. Для перехода к подпрограммам обслуживания прерываний контроллер формирует и подаёт на ШД процессора код команды CALL. Каскадированием БИС ...."

Чего не люблю, так это подмены понятий и определений и такого ссылки на якобы авторитетов, которые быть может и с микропроцессорами то не работали. Уровень книжек в те времена был удручающе низкий. Теперь удручает цитирование этих книжек.

Захват шины - это было сказано? Было. Было сказано даже про какой-то запрет ОЗУ. - "На сколько я помню 8259(кр580вн59) и 8259А (кр1810вн59а) банально отключают озу программы и выставляют код команды перехода по прерыванию."
Ну что за бред? Если Вы это тоже вычитали, еще понятно. Но если Вы это помните??!!!

Захват шины - это ситуация, когда вместо основного мастера работает другой. Например, вместо микропроцессора - контроллер прямого доступа. Или сервисный пульт, подключенный к шине.
В процессе передачи вектора от контроллера прерываний в микроконтроллер мастером продолжает являться микроконтроллер. Конечно, "Контроллер формирует и подает", но только под управлением сигнала INTA, приходящего от микропроцессора. То есть захват шины отсутствует напрочь. А уж блокировка ОЗУ... Какая еще блокировка, если в этот момент обращение к ОЗУ не производится, чего его блокировать?
Так что Вы лучше определитесь - или Вы спорите, или что ... Очень не хотелось бы наблюдать тут пропаганду безграмотности.
Успехов smile.gif


1) Эта книга является найболее точной, полной, грамотной из всех мной использованной. Это как раз тот редкий случай, когда очевидно, что авторы точно знают о чём пишут. А также они знают как изложить свои знания на бумаге. Ничего лишнего - всё кратко и точно. Тоэтому, прошу, не надо охаивать авторов и книгу, которую вы даже не читали.
2) Формально вы правы. Мы "подменили понятия" с zltigo. Я бы предпочёл выражение "выразились не точно". smile.gif Я имел ввиду то, что они в этот момент сидят на шине данных. Скажем понятие захвата шины действительно более подходит к ПДП. С другой стороны вы тоже осуществляете "тут пропаганду безграмотности". Вот пример: "Сигнал INTA работает как признак, означающий, что контроллеру нужно передать вектор. И микроконтроллер своей логикой сразу после сохранения старого значения счетчика команд помещает этот вектор в счетчик команд". МК не читает вектор, а читает по INTA код команды перехода по вектору. Причём это может быть и код команды RST. Поэтому, я считаю что я выразился точнее.
3) Насчёт блокировки озу и т.п. - я просто уже подзабыл что-то требовалось для ПДП, но не в этом дело. Я просто хотел отметить, что многое там требовалось сделать аппаратно.

Сейчас конечно многое изменилось. Сжемки мои конечно так - баловство. smile.gif Я бы не стал применять более одного, ну максимум двух вспомогательных корпусов. Конечно грамотнее и правильней использовать CPU со встроенной аналогичной ф-ией. Ну и prottoss это понимает, а мы просто по энерции обсуждаем прикольную тему.

Цитата
Кроме того, что будет, если IRQn будет достаточно продолжительным по времени, по сравнению с временем обработки всех прерываний?

Можно поставить разделительные кондёры по входу. smile.gif

Цитата
Все это можно заменить 8 диодами и 1 конденсатором .Я так и делаю.

Никакими кондёрами или диодами нельзя сесть на шину. Это бред. Бывают схемотехники которые на шину данных подключаются ч/з резисторы. Я к их числу не принадлежу.
tag
Цитата(zltigo @ Mar 5 2007, 20:10) *
Цитата(prottoss @ Mar 5 2007, 16:11) *

Есть ли в природе внешние контроллеры прерываний типа 8259, только, может, более современные. Есть необходимость использовать таковой с ATmega128, т.к. практически все внешние линии INTx прерываний задействованны под другие функции

Мил человек, ну почитайте PDF хоть по диагонали на 8259 и почие внешние контролеры. Это КОНТРОЛЛЕРЫ, которые ЗАХВАТЫВАЮТ ШИНУ ПРОЦЕССОРА и выставляют на нее команду чтения области векторов прерывания. Ну и причем здесь ATmegа???



...а если еще внимательнее почитать и посмотреть, то... есть режим опроса, в этом случае на процессор заводится от контроллера сигнал INT, шина данных/адреса и все управляющие кроме подтверждения запроса контроллера от процессора. Когда на контроллере возникает прерывание, контроллер генерирует его для процессора, процессор не подтверждает (в этом случае захвата шины не происходит), а переводит контроллер в режим опроса и считывает номер прерывания на контроллере...
prottoss
Цитата(aesok @ Mar 7 2007, 04:31) *
Чего-то я prottossа не понимаю. Вместо 128 меги поставить 1280-ную и получить дополнительно 32 линии ввода выводы из них 16 с прерываниями по изменению состояния он не может. А поставить рядом плисину с которыми не работал или микросхему 30-летней свежести пожалуйста.... странно.

Анатолий.
Во первых, как я уже говорил выше, ноги все (почти) заняты, а мне надо 8 полноценных прерываний. Во вторых, про то, что я собираюсь цеплять 8259 речи не было. Я вопрошал про аналоги, и ВООБЩЕ, есть ли таковые (КП) в природе. А то что я не работал с ПЛИСинами, не говорит о том, что я сам, либо с чьей то помощью, не смогу реализовать собственный КП

Цитата(Dopler @ Mar 7 2007, 12:22) *
Цитата(aesok @ Mar 7 2007, 00:31) *

Чего-то я prottossа не понимаю. Вместо 128 меги поставить 1280-ную и получить дополнительно 32 линии ввода выводы из них 16 с прерываниями по изменению состояния он не может. А поставить рядом плисину с которыми не работал или микросхему 30-летней свежести пожалуйста.... странно.

Анатолий.


Согласен, Мега1280 со всех сторон новее, в два раза больше таймеров, ОЗУ, USART, внешних прерываний, 100! ножек корпуса, за дополнительные 3$ по сравнению с устаревающей мегой 128.
Самая дешевая (и маленькая) плис Altera будет иметь те же 100 ножек и стоить минимум 6$, а ей еще нужны такты подавать.
Ну про 6 баксов и сто ножек Вы, конечно, загнули :-)

Цитата(Dog Pawlowa @ Mar 7 2007, 15:40) *
Цитата(SasaVitebsk @ Mar 6 2007, 21:42) *

Цитата(Dog Pawlowa @ Mar 6 2007, 14:15) *

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

Собственно спорить я не собираюсь, но так в порядке ответа Чемберлену.
А.Г.Алексенко и др. "Проектирование радио-электронной аппаратуры на микропроцессоре". стр.44.
"...с возможностью маскирования и динамического изменения дисциплины обслуживания. Для перехода к подпрограммам обслуживания прерываний контроллер формирует и подаёт на ШД процессора код команды CALL. Каскадированием БИС ...."

Чего не люблю, так это подмены понятий и определений и такого ссылки на якобы авторитетов, которые быть может и с микропроцессорами то не работали. Уровень книжек в те времена был удручающе низкий. Теперь удручает цитирование этих книжек.

Захват шины - это было сказано? Было. Было сказано даже про какой-то запрет ОЗУ. - "На сколько я помню 8259(кр580вн59) и 8259А (кр1810вн59а) банально отключают озу программы и выставляют код команды перехода по прерыванию."
Ну что за бред? Если Вы это тоже вычитали, еще понятно. Но если Вы это помните??!!!

Захват шины - это ситуация, когда вместо основного мастера работает другой. Например, вместо микропроцессора - контроллер прямого доступа. Или сервисный пульт, подключенный к шине.
В процессе передачи вектора от контроллера прерываний в микроконтроллер мастером продолжает являться микроконтроллер. Конечно, "Контроллер формирует и подает", но только под управлением сигнала INTA, приходящего от микропроцессора. То есть захват шины отсутствует напрочь. А уж блокировка ОЗУ... Какая еще блокировка, если в этот момент обращение к ОЗУ не производится, чего его блокировать?
Так что Вы лучше определитесь - или Вы спорите, или что ... Очень не хотелось бы наблюдать тут пропаганду безграмотности.
Успехов smile.gif
Всеми конечностями жму Вам руку

Цитата(tag @ Mar 7 2007, 17:26) *
...а если еще внимательнее почитать и посмотреть, то... есть режим опроса, в этом случае на процессор заводится от контроллера сигнал INT, шина данных/адреса и все управляющие кроме подтверждения запроса контроллера от процессора. Когда на контроллере возникает прерывание, контроллер генерирует его для процессора, процессор не подтверждает (в этом случае захвата шины не происходит), а переводит контроллер в режим опроса и считывает номер прерывания на контроллере...
Что то я это выпустил... И, хотя, опять поправлю Вас, что НЕТУ ТО ЗАХВАТА ШИНЫ НУ НИ КАК!!!, обязательно изучу это...



PS: В дорогом магазине радиокомпонентов в моем городе 82С59 от Winbond стоит 59 рублей 96 копеек в розницу
klop
Цитата(prottoss @ Mar 7 2007, 14:49) *
Я вопрошал про аналоги, и ВООБЩЕ, есть ли таковые (КП) в природе.


Аналогичных 8259 (с паралельными шинами и тд) сейчас нету

Цитата(prottoss @ Mar 7 2007, 14:49) *
А то что я не работал с ПЛИСинами, не говорит о том, что я сам, либо с чьей то помощью, не смогу реализовать собственный КП


Сам по себе КП ничего сложного из себя не представлет. 40-50 строчек на HDL. обычно висит на внутренней паралельной шине (APB в ARM). Навороченные варианты позволяют например ARMам эмулироввать множество векторов.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.