Проектирование устройств сопряжения (1083567), страница 18
Текст из файла (страница 18)
(unsigned long) inportb (R3) << 24;
}
//*** Конец драйверов
С использованием этих драйверов в качестве примера напишем простейшую программу для подсчета соотношения длительности единицы и нуля по всем из подключенных ко входам логического анализатора линий за время 100 мкс после прихода первой единицы по линии 3. Для получения максимальной точности будем проводить регистрацию на предельной частоте 10 МГц.
// Программа для подсчета соотношения единиц и нулей
#include <STDIO.H>
void main (void)
{
struct LA_Param la;
unsigned long data[LENGTH];
unsigned num0[32], num1[32];
float ratio[32];
unsigned i, j;
// Инициализация параметров регистрации
la.freq = 0; // Код частоты 10 МГц (период 100 нс)
la.sync = 3; // Номер синхролинии
la.polar = 0; // Запуск по положительному перепаду
la.pre_reg = 0; // Предпусковая регистрация не нужна
// Запуск регистрации
if(lnit LA(&la)== -1)
{
printf ("\nОшибка.");
exit(-1);
}
// Проверка окончания регистрации
while (Check_Ready() != 0)
// Чтение данных
Read_Data (&data);
// Определение соотношений единиц и нулей по всем линиям
// 100 мкс — это 1000 кадров регистрации на частоте 10 МГц
for (j=0;j<32;j++) // Обнуление счетчиков
{ // единиц и нулей
num0[j] = 0; // по всем линиям
num1[j] = 0;
}
for (i=0;i<1000;i++) // Подсчет числа нулей и единиц
for (j=0;j<32;j++) // по всем линиям, (1L << j) –
if ((data[i] & (1L << j)) == 0 )
// маска j-го бита
num0[j]++;
else
num1[j]++;
for (j=0;j<32;j++) // Вывод на экран соотношений
{
printf ("\nЛиния №%d. ", j);
if (num0[i] != 0) // Был ли ноль вообще ?
printf (Отношение 1/0 - %f.", num1[j]/num0[j]);
else // He было
printf ("Нуля не было.");
}
}
// Конец программы
В предложенных драйверах окончание регистрации определялось опросом флага готовности логического анализатора. Однако во многих случаях удобнее использовать аппаратное прерывание, которое анализатор вырабатывает по окончании регистрации (см. п. 2.1.10). Например, если синхропереход приходит редко, можно построить систему таким образом, чтобы после запуска регистрации программа переходила на выполнение другой задачи (например, обработка ранее полученных данных), а по прерыванию от логического анализатора переходила на его обработку. В этом случае необходимо написать программу обработки прерывания, в которую включить все необходимые действия. Драйвер Check_Ready становится не нужен.
// *** Программа обработки прерывания от логического анализатора
void interrupt LA_handler (unsigned long *data)
{
disable(); // Запрет прерываний на время обработки
... // Какие-то действия
Read_Data (data); // Чтение данных из буфера
... // Какие-то действия
enаble(); // Разрешение прерываний
}
// Конец программы
В тело основной программы следует включить установку вектора прерывания от логического анализатора:
setvect (INT, LA_handler); // INT — номер прерывания
2.2.4. К вопросу о программировании сетевого контроллера
Описанные в п. 2.1.12 варианты реализации узлов контроллера локальной сети требуют пересылки информационных пакетов из ОЗУ компьютера в буферное ОЗУ контроллера и наоборот. При этом скорость пересылки должна быть максимальной для повышения информационного быстродействия сети. Написанная "в лоб" даже на ассемблере (цикл команд MOV), эта процедура оказывается слишком медленной. Однако не следует спешить использовать прямой доступ к памяти. В системе команд имеется инструкция для пересылки массива из одного места памяти в другое — MOVS. Например, если буфер контроллера сети занимает адреса В0000Н — B0FFFH, то процедура записи в него пакета длиной 4Кбайта из адресов 80000Н—80FFFH выглядит следующим образом:
MOV CX, 1000Н ; длина пакета
MOV SI, 80000H ; начало источника
MOV DI, В0000Н ; начало приемника
MOVS ; пересылка
В библиотеке языка Си фирмы Borland имеется несколько функций, реализующих быструю пересылку массивов памяти. Эти функции построены на базе инструкции MOVS. Так, для решения той же задачи можно использовать функцию movedata:
movedata (0x8000, 0, 0хВ000, 0, 4096);
где первый и второй параметры — сегмент и смещение источника, третий и четвертый — сегмент и смещение приемника, пятый — длина массива.
2.3. Особенности отладки устройств сопряжения для ISA
Как уже отмечалось, особенностью разработки УС является опасность выхода из строя компьютера, к которому подключается изготовленное УС. В первую очередь это, конечно, относится к УС, ориентированным на ISA, то есть подключаемым к "внутренностям" компьютера. Большое число сигналов интерфейса ISA, подключение к нему системных устройств компьютера, сложность алгоритмов взаимодействия по ISA, использование внутреннего источника питания — все это приводит к тому, что вероятность поломки компьютера (и, как следствие этого, потеря интереса у разработчика к проектированию любых УС) довольно велика. Причем эта опасность исходит не только от вновь созданных УС, но и от УС, изготовленных недостаточно надежным производителем. Что касается использования двух других внешних интерфейсов компьютера (Centronics и RS-232C), то УС, подключаемые к ним, хотя и могут вывести из строя соответствующие порты, но очень редко ломают весь компьютер целиком. Поэтому для них рассматриваемая проблема стоит не столь остро.
Какие же методы могут быть предложены для предотвращения этой неприятной ситуации? Прежде всего стоит отметить, что полной гарантии от нарушений в работе компьютера, вызванных подключением к нему любой дополнительной платы (а отнюдь не только УС), не может дать ни один метод. Ни одна система контроля или отладки просто не в силах смоделировать все возможные сочетания комбинаций и последовательностей комбинаций сигналов интерфейса. Этот процесс занял бы огромное время.
Однако нарушения нарушениям рознь. Наиболее важно выявить те недостатки УС, которые ведут к необратимым поломкам компьютера, например, к выходу из строя драйверов системных узлов, к поломке источника питания и т.д. К другой группе дефектов УС относятся нарушения стандарта интерфейса, устойчиво проявляющиеся в циклах обращения к данному УС и мешающие нормальной работе компьютера, но не ломающие его окончательно. Задачу их выявления усложняет то, что некоторые из них наблюдаются только в циклах обмена, осуществляемых в реальном масштабе времени, в том темпе, который задается самим компьютером. Все эти дефекты УС могут быть достаточно достоверно выявлены, локализованы и устранены с помощью систем отладки, которые мы рассмотрим в этом разделе.
Почему возникает необходимость создания специальных средств отладки для УС? Ведь существует же большое число приборов, применяемых для контроля и отладки цифровой и цифроаналоговой техники: всевозможные генераторы, осциллографы, вольтметры и т.д. Но дело в том, что особенностью УС является шинная организация с большим количеством входных, выходных и двунаправленных сигналов, которые должны одновременно формироваться и одновременно контролироваться. Применение стандартных приборов в этом случае превратится в мучение для инженера или техника, занимающегося отладкой, и потребует неоправданно большого времени. Поэтому изготавливаются специальные многоразрядные формирователи входных воздействий и регистраторы ответных реакций, существенно упрощающие этот процесс. Естественно, гораздо большую эффективность имеют системы, в которых предусмотрена та или иная степень автоматизации процесса отладки. При этом часть трудоемких операций можно возложить на персональный компьютер, который часто служит основой такой системы.
2.3.1. Комплекс средств статической отладки
Метод статической отладки цифровых устройств, как следует из его названия, позволяет контролировать работу этих устройств или их отдельных узлов в статическом режиме, то есть в режиме неизменных входных и выходных сигналов. Этот метод основан на том положении, что большинство цифровых устройств может находиться в каждом из своих состояний бесконечно большое время. Он позволяет выявлять по различным оценкам до 80% неисправностей. Оставшиеся 20% приходятся на долю неисправностей, связанных с динамикой, с быстрыми изменениями сигналов, с емкостными и индуктивными эффектами, с гонками сигналов, с высокочастотными помехами и наводками, с ограничением быстродействия отдельных элементов и узлов и т.д.
Существуют узлы, которые в принципе не проверяются методом статической отладки, например блоки динамического ОЗУ, одновибраторы (ждущие мультивибраторы), генераторы, времязадающие RC-цепочки, некоторые микросхемы с заданным нижним пределом тактовой частоты (например, процессоры, внутри которых используются элементы динамической памяти). Однако в системе отладки часто предусматривают так называемый квазидинамический режим, позволяющий иногда проверить и их.
Какие же неисправности выявляются рассматриваемым методом? Прежде всего это внутренние неисправности микросхем отлаживаемого устройства, приводящие к нарушениям в логике их работы, к невыполнению таблицы истинности. Например, выход логического элемента не реагирует на один или несколько входных сигналов, или вход микросхемы закорачивает на землю или питание подводимый к нему сигнал. Кроме того метод статической отладки позволяет обнаружить дефекты печатного монтажа платы: непропаи выводов элементов, закоротки соседних проводников, обрывы проводников, ошибки при изготовлении фотошаблона платы.
Простейший путь реализации метода статической отладки — использование обычных тумблеров для задания входных и двунаправленных сигналов, а также светодиодов для индикации состояния выходных и двунаправленных сигналов (рис. 2.60). Однако при этом на оператора ложится огромная работа по переключению тумблеров и контролю светодиодов. К тому же он просто не в силах проверить все возможные ситуации, например, перебрать все состояния многоразрядной шины. В то же время в ряде случаев, например, при большом разнообразии довольно простых отлаживаемых цифровых устройств этот путь оказывается вполне приемлемым.
Особенность УС как объекта отладки — однотипность набора входных, выходных и двунаправленных сигналов со стороны разъема интерфейса компьютера и однотипность последовательностей этих сигналов в соответствии с протоколом обмена по интерфейсу. Это позволяет обеспечить довольно высокую степень автоматизации процесса отладки и облегчить труд оператора, на долю которого остается только выбор режима работы и анализ результатов контроля.
При отладке УС надо добиться, чтобы, во-первых, оно правильно выполняло свои функции (то есть при обращении по его адресам вырабатывало нужные внутренние стробы обмена, правильно принимало и записывало информацию из магистрали и выдавало информацию на магистраль). Во-вторых, УС не должно нарушать работу магистрали, то есть оно не должно выдавать на магистраль ненужных сигналов в ненужное время, не должно закорачивать магистральные сигналы между собой, на общую шину и шины питания. Причинами этого могут, например, быть неправильная работа селектора адреса, неисправность входных, выходных и двунаправленных буферов, ошибки монтажа компонентов УС.
Рис. 2.60. Простейшая реализация метода статической отладки.
Если первую из указанных двух задач еще можно решить вручную (с использованием тумблеров и светодиодов), то вторую — практически невозможно, так как надо перебирать все возможные комбинации сигналов на магистрали. Но именно решение этой второй задачи очень легко автоматизировать, так как контролировать здесь надо только магистральные (внешние для УС) сигналы, а не внутренние точки УС.
Реализовать систему статической отладки на базе персонального компьютера можно очень просто, если использовать описанный в разделе 2.1.9 универсальный контроллер параллельного обмена (и, конечно же, соответствующие программные средства). В этом случае аппаратура системы включает в себя только компьютер, рассмотренный контроллер и соединительный кабель, оканчивающийся магистральным разъемом ISA, к которому и подключается исследуемая плата УС (рис 2.61). В принципе, в случае данной системы отлаживаемая плата может быть любой, главное, чтобы количество ее внешних сигналов не превышало количество внешних линий контроллера параллельного обмена. Но для каждой платы нужен свой соединительный кабель (или кабель с индивидуальными зажимами для каждой линии) и, самое главное — свое программное обеспечение.
Рис. 2.61. Система статической отладки на базе персонального компьютера.
Для отладки же УС любого типа кабель и программы могут быть одни и те же, так как все УС должны отрабатывать один и тот же узкий набор последовательностей (машинных циклов) одних и тех же сигналов. При этом мы можем четко выделить входные, выходные, двунаправленные линии и заложить порядок формирования и контроля сигналов на них в программу, освободив от этого оператора.
Рассмотрим несколько упрощенно управление внешними линиями контроллера параллельного обмена при пошаговой эмуляции машинных циклов ISA. Но сначала выделим минимальный набор сигналов ISA, необходимый в системе отладки. Пусть печь идет только об отладке УС, работающих как устройства ввода/вывода. В этом случае достаточно использовать 10 разрядов адреса (SA0 ... SA9), 8 или 16 разрядов данных (SD0 ... SD7 или SD0 ... SD15), два строба обмена (-IOR и -IOW) и два управляющих сигнала (BALE — не обязательно и AEN). Адресные и управляющие сигналы должны быть определены как выходные, данные — как двунаправленные. Однако надо учесть, что в системе отладки обязательно надо предусмотреть контроль правильности информации, выводимой на выходные линии. Все это легко позволяет сделать контроллер параллельного обмена.
Выделим шаги (или точки останова), которые будут использованы при пошаговой отладке (рис. 2.62). Принцип выделения здесь очень простой: каждый новый шаг отличается от предыдущего изменением хотя бы одного сигнала. При этом если задержка между сигналами определяется только временем распространения сигналов по магистрали или только временем срабатывания логических элементов (например, между -IOR и SD), то мы считаем их одновременными, так как при статической отладке обнаружить такой сдвиг все равно невозможно.
На нулевом шаге (исходное состояние) мы должны проверить отключение платы от магистрали. Первый шаг, в принципе, не обязателен, так как обычно в УС на нем ничего не происходит. На втором шаге проверяется работа селектора адреса. На третьем — контролируется реакция УС на сигнал BALE (он используется довольно редко). Шаги 4 ... 6 (для цикла записи) или четвертый шаг (для цикла чтения) — это проверка выработки внутренних стробов обмена УС и функционирования буферов данных.