or Cl, 00000001b ; SW < – UF
mov Al, Ch
and Ax, 0001h ; результат < – UF
jmp @@LABEL7
@@LABEL3:
xor Ax, Ax ; результатом будет 0
mov Dl, Cl ; Dl < – SW
mov Dh, Cl ; Dh < – SW
and Dx, 0001100001100000b ; замаскируем по операндам
cmp Dl, 01000000b ; X(i)==0?
je @@LABEL4 ; да – на выход
cmp Dh, 00011000b ; X (i‑1)==бесконечность?
je @@LABEL4 ; да – на выход
test Ch, 00001000b ; результат = бесконечность
jnz @@LABEL4
mov Ax, 0FFFFh ; результат < – максимум
@@LABEL4:
cmp Dl, 01100000b ; X(i)==бесконечность?
jne @@LABEL5
or Cl, 00000010b ; SW < – OF
@@LABEL5:
cmp Dh, 00010000b ; X (i‑1)==0?
jne @@LABEL6
or Cl, 00000100b ; SW < – div0
@@LABEL6:
cmp Dh, 00011000b ; X (i‑1)==бесконечность?
jne @@LABEL7
or Cl, 00000001b ; SW < – UF
@@LABEL7:
Полный текст программы работы процессора с учетом самотестирования, настройки интерфейса и вычисления функции приведен в приложении А.
Размер всей программы составляет 226 байт, что позволяет ограничиться размером ПЗУ в 1 Кбайт (512К´16). Организовать такую память можно путем параллельного подключения двух микросхем КМ1608РТ2 [5]. Более того, данная программа не требует сохранения промежуточных результатов в памяти, что позволяет исключить из состава устройства ОЗУ.
Рассмотрим функциональную схему УВ раздельно по ее блокам.
Функциональная схема данного блока является достаточно простой. Она представляет собой набор АЦП, цифровые выходы которых подключены к порту A блока интерфейса через специальный разъем.
Блок цифровой обработки состоит из: микропроцессора, буферных регистров, шинных формирователей, генератора тактовых импульсов, микросхем памяти и дешифратора управляющих сигналов, объединенных для организации однопроцессорной системы [7].
Буферные регистры и шинные формирователи необходимы для демультиплексирования шин адреса и данных. Генератор тактовых импульсов формирует тактовые импульсы, сигналы сброса и готовности. Дешифратор управляющих сигналов декодирует сигналы управления процессора и вырабатывает сигналы чтения и записи памяти и внешних устройств (портов).
Элементы соединены для организации однопроцессорной системы с памятью и портами ввода-вывода.
Блок интерфейса состоит из: микросхемы интерфейса, шинных формирователей и буферных регистров (для подключения к системной шине), логики управления системной шиной, дешифратора системного адреса и логики управления готовностью и чтением результата.
Логика управления системной шиной заключается в выдаче сигнала IO16, информирующего о передаче 16‑разрядных данных.
Дешифратор системного адреса необходим для определения факта обращения к УВ со стороны ПЭВМ. Для обращения к проектируемому устройству зарезервированы два адреса, на которые оно будет откликаться: 320h – для чтения результата и 322h – для чтения слова состояния и для записи управляющего слова.
Логика управления готовностью и чтением результата предназначена для исключения ситуаций, когда процессор подготовил новые данные, а предыдущие еще не были считаны. Данная операция осуществляется путем подачи на вход TEST процессора сигнала неготовности на время, пока результат не будет считан. Процессор ждет разрешающего уровня на данном входе, а затем приступает к формированию следующего результата.
Функциональная схема проектируемого УВ приведена на отдельном чертеже К2.006.223.Э2.
Блок АЦП конструктивно разрабатывается как отдельный модуль, подключаемый к устройству через специальный разъем типа RS‑232.
Выбранный тип микросхемы АЦП К1107ПВ4 имеет ряд особенностей. Выходные уровни данной микросхемы соответствуют ЭСЛ логике, что требует наличия преобразователей уровня для подключения к устройству. В качестве преобразователей уровня используется микросхема К500ПУ125.
Кроме того, микросхема АЦП имеет напряжение питания –5,2 В, что требует подключения стабилизатора напряжения. В данном случае это стабилизатор напряжения отрицательной полярности К142ЕН10. С помощью такого же элемента формируется напряжение –2 В, необходимое для подключения цифровых выводов микросхем через сопротивления 100 Ом.
Регулировка напряжения гистерезиса отсутствует в связи с тем, работа микросхем АЦП будет производиться на малых частотах (5 МГц).
Входное напряжение подается в модуль через специальный разъем типа 3.5 mm Mono Telephone plug. Аналоговая земля соединяется с цифровой землей.
Схема электрическая принципиальная блока АЦП приведена на отдельном чертеже К2.006.223.Э3.2.
Основным элементом данного блока является микропроцессор К1810ВМ86, на вход MN/MX которого подается напряжение высокого уровня, что соответствует минимальному режиму. Входы CLK, RESET и READY подключены к ГТИ. Выходы BHE, AD0‑AD15 демультиплексируются с помощью буферных регистров и шинных формирователей и образуют шину адреса и шину данных. Выходы M/IO, WR и RD используются для формирования сигналов управления памятью и внешними устройствами (портами). Выходы NMI, INT, INTA, HOLD и HLDA не используются за ненадобностью.
Генератор тактовых импульсов К1810ГФ84 формирует собственные синхроимпульсы, для чего к его входам X1 и X2 подключен кварцевый резонатор, а к входу TANK – RC‑цепочка. Сигнал RES на вход ГТИ подается с системной шины. На вход RDY подается сигнал от схемы управления системной шиной (см. блок интерфейса), предназначенный для запрещения работы на время обращения к УВ со стороны ПЭВМ. Это необходимо для избежания коллизий одновременного доступа к портам ввода-вывода.
Для организации памяти используются микросхемы КМ1608РТ2. В процессе работы процессор будет обращаться лишь к самому старшему 1 Кбайту памяти и к небольшому числу портов. Данный факт позволяет в рамках курсового проекта сократить разрядность шины адреса до 10 при обращении к памяти и до 4 при обращении к портам, что позволяет заметно сократить аппаратные затраты и уменьшить сложность устройства.
Микросхема параллельного интерфейса К580ВВ55 позволяет подключать к ней до трех 8‑разрядных внешних устройств (портов). Для организации 16‑разрядных портов параллельно устанавливаются две такие микросхемы. К порту A обеих микросхем подключается блок АЦП. Порт B подключен к системной шине и используется для выдачи результат. Порт C первой микросхемы используется для выдачи на системную шину слова состояния, а порт C второй микросхемы используется для приема слова управления.
Также, важными частями блока интерфейса является логика чтения результата и логика управления системной шиной.
Логика управления готовностью и чтением результата предназначена для исключения ситуаций, когда процессор подготовил новые данные, а предыдущие еще не были считаны. Данная операция осуществляется путем подачи на вход TEST процессора сигнала неготовности на время, пока результат не будет считан. Процессор ждет разрешающего уровня на данном входе, а затем приступает к формированию следующего результата. Аппаратно логика реализована на одном D‑триггере, устанавливающимся в 1 при записи результата в порт и сбрасывающимся в 0 при чтении из порта. Выход данного триггера соединен с входом TEST процессора.
Логика управления системной шиной заключается в выдаче сигнала IO16, информирующего о передаче 16‑разрядных данных. Также, данная логика формирует управляющие сигналы, отпирающие необходимые буферы на входах и выходах портов, а также сигнал RDY на ГТИ, запрещающий вырабатывать синхроимпульсу на время обращения со стороны системной шины.
Факт обращения со стороны системной шины определяется с помощью дешифратора системного адреса. Для обращения к проектируемому устройству зарезервированы два адреса, на которые оно будет откликаться: 320h – для чтения результата и 322h – для чтения слова состояния и для записи управляющего слова.
Принципиальная схема проектируемого устройства приведена на чертеже К2.006.223.Э3.1.
При разработке программного обеспечения УВ следует читывать следующие детали. Устройство реагирует только на два адреса: 320h – данные и 322h – управляющее слово (для записи) и слово состояния (для чтения). В связи с особенностями построения УВ при работе со словами управления и состояния необходимо использовать младший байт данных системной шины.
Старший бит слова состояния установленный в 1 информирует о готовности нового результата. В противном случае, с порта данных можно прочитать старое значение. Более того, если результат оказался нулевым, то это может означать исключительную ситуацию или бесконечность. В этом случае для определения действительного результата следует проводить анализ слова состояния.
Ниже приведен фрагмент программы для работы с проектируемым устройством. Программа «вешает» процедуру чтения и обработки сигнала на прерывание от таймера. Полученные результаты записываются в некоторый файл. В случае если устройство не исправно, в файл будет записано соответствующее сообщение, а вектор прерывания не будет перегружен.
386
portDAT EQU 0320h
portCW EQU 0322h
portSW EQU 0322h
S_STACK SEGMENT PARA STACK 'stack'
DB 32 DUP('stack')
S_STACK ENDS
S_DAT SEGMENT PARA PUBLIC 'data'
msgErrDevice label dword
db 'Устройствосломано!'
outData dd ?
FName label dword
db 'output.dat', 0
FHandler dw ?
oldVect label dword
oldIp dw ?
oldCs dw ?
IntVect dd Int8
S_DAT ENDS
PRG_COD SEGMENT PARA PUBLIC 'code'
ASSUME CS:PRG_COD, DS:S_DAT, SS:S_STACK
Int8 PROC FAR ; модуль перегруженного прерывания
pusha ; сохраним все регистры
in Al, portSW ; читаем SW
test Al, 10000000b ; результат готов?
jz @@EXIT ; нет – на выход
in Ax, portDAT ; читаем результат
cmp Ax, 0 ; исключительная ситуация
jne @NO_EXEPTION ; нет – переход
; обработка исключения (может отсутствовать)
;…
@NO_EXEPTION:
mov word ptr [outData], Ax ; сохраним результат в файле
mov Ah, 40h
mov Bx, Ds:FHandler
mov Cx, 2
lds Dx, outData
int 21h
@@EXIT:
popa ; восстановим регистры
iret
Int8 ENDP
SetInt8 PROC
pusha
mov Ax, 3508h ; сохраним старый вектор прерывания