|
|
  |
Внешний контроллер прерываний |
|
|
|
Mar 8 2007, 15:58
|

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

|
Цитата(SasaVitebsk @ Mar 7 2007, 17:21)  2) Формально вы правы. Мы "подменили понятия" с zltigo. Я бы предпочёл выражение "выразились не точно".  Добавлю что кроме "подменили понятия" zltigo просто побрызгал слюной  Наверное не может забыть тот спор, где я массив запихал в функцию в качестве аргумента Цитата(SasaVitebsk @ Mar 7 2007, 17:21)  Я имел ввиду то, что они в этот момент сидят на шине данных. Скажем понятие захвата шины действительно более подходит к ПДП. Если Вы имели ввиду, что КП в это время сидит на шине, тогда и про внешнюю память можно сказать, что она захватывает шину  . ИМХО захват шины, это когда устройство захватывает не саму шину, а УПРАВЛЕНИЕ шиной
--------------------
|
|
|
|
|
Mar 8 2007, 16:37
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(prottoss @ Mar 8 2007, 16:58)  Цитата(SasaVitebsk @ Mar 7 2007, 17:21)  Я имел ввиду то, что они в этот момент сидят на шине данных. Скажем понятие захвата шины действительно более подходит к ПДП. Если Вы имели ввиду, что КП в это время сидит на шине, тогда и про внешнюю память можно сказать, что она захватывает шину  . ИМХО захват шины, это когда устройство захватывает не саму шину, а УПРАВЛЕНИЕ шиной Согласен с критическими высказываниями в мой адрес. Но надо понимать суть ощущений. Учитывая уже описанное, контроллер прерываний как бы подменял память данных в момент прерывания. Как будто после выставления запроса, вместо RD выставлялся INTA, - и всё. Такие ощущения были повсюду при работе с комплектом. Конечно при переходе на 1810 всё значительно изменилось. И 8259А(8259) и 8237(8257) и 8250(8251) и 8254(8253). Всё это были значительные шаги вперёд. В это время устанавливались понятия и комплекты. Ну и мы вмести с ними. Сейчас это уже классика. Многие из этих разработок угадываются в МК.
|
|
|
|
|
Mar 9 2007, 08:49
|
Знающий
   
Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063

|
Цитата(beer_warrior @ Mar 7 2007, 12:55)  Цитата Все это можно заменить 8 диодами и 1 конденсатором .Я так и делаю. А как вы различаете источник? 8 линий сигналов прерываний на регистр , а оттуда диодами на вход INT. По любому прерыванию, читается регистр и определяется источник ,и запускается соответствующая функция обработки. Считаю не разумно в контроллерах связываться с 59. Цитата(Alex_Pol @ Mar 7 2007, 15:03)  Я бы решал так. Тинька 2313. В цикле опрашиваю порт В, если что то изменилось - байт состояния порта через УАРТ в главный контроллер, и пусть он с ним разбирается. Вот это решение мне больше нравится.
|
|
|
|
|
Mar 9 2007, 10:20
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561

|
[quote name='tag' post='220658' date='Mar 7 2007, 17:26'] ...а если еще внимательнее почитать и посмотреть, то... есть режим опроса, в этом случае на процессор заводится от контроллера сигнал INT, шина данных/адреса и все управляющие кроме подтверждения запроса контроллера от процессора. Когда на контроллере возникает прерывание, контроллер генерирует его для процессора, процессор не подтверждает (в этом случае захвата шины не происходит), а переводит контроллер в режим опроса и считывает номер прерывания на контроллере... [/quote] Что то я это выпустил... И, хотя, опять поправлю Вас, что НЕТУ ТО ЗАХВАТА ШИНЫ НУ НИ КАК!!!, обязательно изучу это...
PS: В дорогом магазине радиокомпонентов в моем городе 82С59 от Winbond стоит 59 рублей 96 копеек в розницу [/quote]
...я выразился словами своего оппонента вот и все. Я создавал схему и успешно обкатал наш аналог этого контроллера + 1816ВЕ31 (разновидность I8051)...
|
|
|
|
|
Mar 9 2007, 17:03
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(SasaVitebsk @ Mar 7 2007, 21:49)  Последним постом вы сами себя и опровергаете. Команда CALL и команда RST (RST0-RST7 кстати). Не надо передёргивать. НИКОГДА КОМАНДА НЕ ЯВЛЯЛАСЬ ВЕКТОРОМ. Действительно не плодите безграмотность. Вдумайтесь что вы пишете: Цитата ...инструкция типа RST или CALL, которая действительно может быть передана в счетчик команд процессора
На экзамене за такое ставят 2 бала без дополнительных вопросов. Вы вообще себе счётчик команд представляете? Если представляете зачем пишете ахинею? На самом деле все именно так, как я написал. Команда RST N или команда CALL ISR_N как раз и являются векторами прерывания. Эти команды выдаются контроллером прерывания в ответ на сигнал INTA от процессора. И если говорить об I8080 (I8086), то система прерываний у него была сделана таким образом, что при получении сигнала запроса на прерывание процессор вместо выборки очередной команды (обращения к памяти) процессор входит в цикл прерывания, ожидая от внешнего контроллера соответствующей инструкции. Хочу добавить, что до появления контроллера 8259 существовал контроллер прерываний I3014 (наш аналог - 589ИК14). В отличие от 8259 он не был программируемым и мог выдавать только инструкции RST N, причем значение N было жестко связано с уровнем прерывания. Приоритеты прерываний были жестко фиксированы и не могли быть изменены. 8259 был уже программируемым. Программно можно задавать не только тип генерируемой команды (RST или CALL), но и менять динамически менять уровни запросов на прерывания, маскировать отдельные запросы и т.д. и т.п. Насчет счетчика команд. Когда выполняется инструкция типа call или jmp, то их основное назначение изменить последовательность выполнения программы. Разница состоит лишь в том, что при выполнении call старое значение счетчика команд запоминается для последующего возврата в текущую точку. А в счетчик команд записывается новый адрес, по которому передается управление в программе. Если Вы не знаете этих элементарных вещей, то советую прочитать литературу по принципам работы компьютеров или хотя бы для конкретного процессора. Ниже привожу цитату из документа doc0856.pdf фирмы Atmel: Цитата CALL - Long Call to a subroutine Description: Calls to a subroutine within the entire Program memory. The return address (to the instruction after CALL) will be stored onto the Stack. (See also RCALL). .... Operation: PC <- K .... Syntax: CALL K Здесь PC - Program Counter (программный счетчик, он же счетчик команд). И вообще, читайте книги - источник знаний.
|
|
|
|
|
Mar 9 2007, 22:59
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(_Bill @ Mar 9 2007, 18:03)  Цитата(SasaVitebsk @ Mar 7 2007, 21:49)  Не надо передёргивать. НИКОГДА КОМАНДА НЕ ЯВЛЯЛАСЬ ВЕКТОРОМ. Действительно не плодите безграмотность. Вдумайтесь что вы пишете:
...инструкция типа RST или CALL, которая действительно может быть передана в счетчик команд процессора Вы привязались к моей терминологии, я вам указал на вашу. Инструкция не может быть передана в счётчик команд! Это приведёт к вылету! В счётчик команд может быть передан только АДРЕС (то бишь вектор)!!! Это разные вещи! Принципиально разные! Здесь можно было бы употребить термин, - инструкция типа ... выполняется микропроцессором. Дело в том, что если вы не видете разницы, то я её вижу. Если можно ещё сослаться, что при исполнении инструкции CALL, МП пропускает код команды, а адрес записывает в счётчик команд, то с инструкцией RST - этот номер не проходит. Так как вектор закодирован в коде команды. Пусть и несложно. Любой здравомыслящий - это ясно видит. Я прекрасно знаю принципы, не приводите разные документы себе в оправдание. Вы сами пишете Цитата процессор входит в цикл прерывания, ожидая от внешнего контроллера соответствующей инструкции. Так определитесь наконец ИНСТРУКЦИЯ или ВЕКТОР.
|
|
|
|
|
Mar 10 2007, 13:15
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Цитата(SasaVitebsk @ Mar 9 2007, 22:59)  Так определитесь наконец ИНСТРУКЦИЯ или ВЕКТОР. Инструкцыя, инструкцыя...;О) Вместо текущей команды по ШД подсовывалась ИНТх, либо, как в 59безА, CALLxxxx. Билл имел в виду, что команда ИНТх имела фиксированные вектора в памяти. А 59 можно было программаровать куды хош.
|
|
|
|
|
Mar 10 2007, 14:48
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(SasaVitebsk @ Mar 9 2007, 22:59)  Вы привязались к моей терминологии, я вам указал на вашу.
Инструкция не может быть передана в счётчик команд! Это приведёт к вылету! В счётчик команд может быть передан только АДРЕС (то бишь вектор)!!! Это разные вещи! Принципиально разные!
Так определитесь наконец ИНСТРУКЦИЯ или ВЕКТОР. RST или CALL - это инструкции, а вектором в них является АДРЕСНАЯ часть. Сама инструкция передается процессору, который интерпретирует ее соответствующим образом. И если быть до конца точным, то иструкция записывается в регистр команд, а в счетчик команд заносится адресная часть инструкции (ВЕКТОР) в процессе выполнения соответствующей команды. Я думаю, теперь мы пришли к консенсусу. Или нет?
|
|
|
|
|
Mar 10 2007, 19:44
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Так об этом и был спор. Дело в том, что уже в 8259А есть режим (для 8086) прямой передачи вектора. Это и делалось впоследствии для других процессоров. Никаких инструкций при этом не передавалось. Кстати таким макаром, как 8259 в принципе можно работать и с другими МП. По крайней мере с 8951. Для этого надо (привожу пример для 8951 или для AVR с внешней памятью программ) 1) Внешний самодельный контроллер выставляет Int0 2) По прерыванию (Int0) МК переходит на отсутствующий адрес (Скажем FFF0). 3) По чтению с адреса контроллера (FFF0) выставляется код команды JMP xxx на вектор перехода. 4) Прерывание сбрасывается спец. обращением к контроллеру. Таким образом можно реализовать расширенные прерывания. Время реакции будет увеличено на 2 команды JMP. Хотя конечно это из разряда ПДП для AVR http://elm-chan.org/docs/avr/avrdma_e.html
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|