16 декабря 2011 г.

Делаем курсач по VMEbus. Часть 6. Программное управление slave-устройством. Дешифратор, D-Триггер и свичи

После того, как slave-устройство приняло адрес и модификатор, которые совпали с его собственными, начинается дешифрация команд.

В этой статье мы поближе познакомимся с линиями управления DTB, поразбираем матчасть (дешифраторы и D-триггеры), познаем концепцию программного управления устройством.




Линии управления DTB 

Записью называется процедура сохранения данных в памяти слэйва, а чтением - извлечение данных из его памяти. Все циклы инициализирует и контроллирует мастер, нам нужно лишь реагировать на те или иные генерируемые им стробы. Собственно, инициализация цикла пересылки данных по DTB происходит, когда мастер выставляет адрес на шине адреса. Адрес мы уже научились обрабатывать с прошлого раза, теперь вспомним, что делает мастер дальше - пару табличек я уже приводил.

А действия мастера могут отличаться в зависимости от того, чего он собирается добиться.
За передачу данных ответственны целых пять линий: WRITE*, LWORD*, DS0*, DS1* и A01.

Линия WRITE* определяет направление передачи данных: низкий уровень соответствует записи (т.е. передачи данных от мастера к слэйву), а высокий - чтению (передачи данных от слэйва к мастеру).

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

Допустим, мы хотим произвести чтение одного байта номер 3 (мы помним, что байты объединяются в группы по 4 штуки). Смотрим в табличку, ищем строчку BYTE(3) READ OR WRITE, ведем пальцем вправо и смотрим, какие уровни управляющих линий соответствуют такой передаче: DS1* - HIGH,  DS0* - LOW, A01 - HIGH, LWORD* - HIGH. Добавим сюда еще WRITE* уровня HIGH.

Разобрались и забыли. Мы считаем, что нужные нам значения запрограммированы в компараторах. нам нужно только завести все эти линии в компаратор.

Дешифратор

Дешифраторы дешифрировали-дешифрировали, да не выдешифрировали. 

Дешифратор - это устройство, которое преобразует n-разрядный двоичный код на нескольких входах в сигнал на одном из выходов. Для примера посмотрим на сферический 2*4 дешифратор в вакууме и его таблицу истинности:


В принципе, все просто и с блеском. Получаем код нолика на входе - на выходе дергаем нулевой ногой, получаем код единички - дергаем первой ногой.

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

D-триггер

Когда-то я писал про регистр-защелку, который при стробе на входе C переписывает данные со входов на выходы. Так вот этот регистр представляет собой не что иное, как несколько D-триггеров, включенных параллельно. Поэтому отдельный D-триггер тоже называют регистром.

Ну в общем, D-триггер - это цифровое устройство, которое передает состояние своего входа D на выход Q по фронту на входе синхронизации С. D-триггер имеет, как минимум, входы D и С, а также выходы Q и Q (это инверсный). Но вот, например, популярный D-триггер К555ТМ2 имеет еще входы S (set) и R (reset) - и это нам только на руку!


При подаче 0 на вход S на выходе Q установится 1 независимо от того, что было до этого. При подаче 0 на вход R на выходе Q установится 0 независимо от того, что было до этого. Получается это такой припаянный к D-триггеру RS-триггер.

Забегая вперед, скажу, что R на D-триггере будет использоваться, как минимум, при сбросе сигнала запроса прерывания (запомните это).

Философия программного управления

Наверняка у вас в тех.задании есть пункт: "Переключение чего-то-там - программное". А это значит, что пора осваивать концепцию программного управления!

Юный падаван, запомни две вещи, которые тебе нужно сделать для программного управления: адресуй регистр и пиши в него управляющие данные. Но для начала определись, сколько регистров тебе нужно адресовать. Как минимум тебе нужно адресовать регистр вектора прерывания. Если у тебя АЦП или АЦП , ты должен адресовать регистр данных и еще регистр ПУСКа измерения. Если у тебя два канала или два режима АЦП или ЦАП, ты должен еще адресовать регистр выбора канала/режима.

Вот возьмем классную ситуацию: адресуем
  1. регистр вектора прерывания
  2. регистр данных
  3. регистр выбора режима АЦП
  4. регистр ПУСКа

Насчитали 4 адреса. 4 равно 2 в степени 2. То есть для наших утилитарных целей нам нужно оторвать всего 2 линии адреса и запихнуть их в дешифратор, чтобы получить 4 разных адреса командных регистров.

После того, как мы адресовали регистр, в цикле DTB к нам приходят данные для записи по линиям данных (или мы их сами выставляем, если производится чтение). т оо

АНДЭР КОНСТРАКШОН

Реализация управления устройством


Аналоговые свичи

Вот мы получили управляющую команду, которая переключает каналы АЦП. Что с ней делать дальше? Подумайте - у вас есть проводок, на котором есть нолик или единичка, как заставить это переключать что-то? Правильно! Подключить это к реле или ключу. Прикольнее всего использовать аналоговые свичи.

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


Аналоговые свичи - это, по сути, переключатели, управляемые логическими уровнями. Существуют нормально замкнутые и нормально разомкнутые свичи. Это определяет их поведение при подаче высокого уровня на вход Enable.

Вот смотрим на первую картинку SPST Normally Open. Это самый простой случай - одна линия соединяется с другой. При подаче высокого уровня ТТЛ на вход Е произойдет коммутация выводов Z и Y. При подаче низкого уровня выводы разомкнутся. SPST Normally Closed делает, соответственно, наоборот.

По количеству входов и коммутируемых линий свичи бывают:
SPST (single pole single throw) - одна линия соединяется с одной линией;
SPDT (single pole double throw) - одна линия соединяется с двумя линиями;
DPST (double pole single throw) - две линии соединяются с двумя линиями;
DPDT (double pole double throw) - две линии соединяются с четырьмя линиями;
и так далее всякие варианты.

Интересные микрухи можно посмотреть у компании MAXIM. Есть низковольтные (до +5В) и высоковольтные (до +80В) или специальные для телекоммуникаций.  Рекомендую поизучать эти штуки и выбрать то, что подходит для вашей задачи.

P.S. 

Ну вот, осилили уже довольно много! Мы уже можем самостоятельно собрать ввод адреса и дешифрацию команд. Впереди вывод данных и прерывания - не менее важные темы.

Как всегда, оставляйте свои вопросы в комментариях!

Список статей

Часть 1. Введение. Евромеханика
Часть 2. Шины и устройства
Часть 3. Шина DTB
Часть 4. Slave-устройство на шине DTB. Циклы записи и чтения
Часть 5. Чтение адреса slave-устройством. Типы адресации. Регистр-защелка и компаратор
Часть 6. Программное управление slave-устройством. Дешифратор, D-триггер и свичи
Часть 7. Прерывания, прерыватели, шина приоритетных прерываний,вектор прерывания
Часть 8. Шинные формирователи
Часть 9. Рисуем схему по ЕСКД. Schemagee. Автоматическое создание списка элементов
Часть 10.Добавляем собственную микросхему в Schemagee
Часть 11. Импорт микросхемы из P-CAD в SchemaGee с последующим допиливанием