p align="left">Генератор тактовых импульсов К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 ; сохраним старый вектор прерывания int 21h mov oldIp, Bx mov Ax, Es mov oldCs, Ax lds Dx, IntVect mov Ax, 2508h ; установим новый int 21h popa ret SetInt8 ENDP MAIN PROC FAR pusha mov Ah, 3Ch ; создадим файл mov Cx, 0020h lds Dx, FName int 21h jc @ERROR ; ошибка? mov Ds:FHandler, Ax ; сохраним хэндлер in Al, portSW ; читаем SW cmp Al, 0FFh ; ошибка в устройстве? jne @DEVICE_OK ; нет - переход mov Ah, 40h ; запишем в выходной файл mov Bx, Ds:FHandler ; сообщение об ошибке mov Cx, 20 lds Dx, msgErrDevice int 21h mov Ah, 3Eh ; закроем файл int 21h jmp @ERROR ; на выход @DEVICE_OK: mov Al, 00000011b out portCW, Al ; запишем CW call SetInt8 ; «посадим» на прерывание от таймера @ERROR: popa ret MAIN ENDP PRG_COD ENDS END MAIN Параметры системы1. Максимальная частота работы системы: fmax=5 МГц 2. Максимальное время задержки выходных данных: TЗД=727tCLK=145 мкс 3. потребляемая мощность: не более 15 Вт 4. надежность устройства (=10-7 час-1): P(10000)=e-25t= 0,98 Конструктивно УВ может быть выполнено на двух печатных платах. На первой будут размещаться блок цифровой обработки и блок интерфейса, на второй - блок АЦП. Подключение к ПЭВМ осуществляется посредством разъема тип EISA. Подключение блока АЦП к устройству - посредством разъема RS_232 (или другого). Временная диаграмма работы устройства ввода приведена на чертеже К2.006.223.ТЧ. ЗаключениеВ ходе работы над курсовым проектом по курсу «Организация ЭВМ комплексов и систем» было разработано устройство ввода, предназначенное для автоматического ввода и цифровой обработки аналогового сигнала. Были разработаны модули, входящие в состав устройства ввода, а также программное обеспечение самого УВ и для совместной работы его в ПЭВМ. Были оценены параметры вычислительной системы, выбран оптимальный вариант схемы. В соответствии со всеми этапами проекта были оформлены соответствующие чертежи и документация. Список использованной литературы1. Компьютерное оформление отчетных документов: методические указания / Составитель Т.И. Матикашвили; ТулГУ. Тула, 2000. - 36 с. 2. Пухальский Г.И., Новосельцева Т.Я. Проектирование дискретных устройств на интегральных микросхемах: Cправочник. - М.: Радио и связь, 1990. - 304 c 3. Микропроцессоры и микропроцессорные комплекты интегральных микросхем. Справочник в 2-х томах под ред. В.А. Шахнова. 4. Нефедов А.В. Интегральные микросхемы и их зарубежные аналоги: Справочник. Т. 8. - М.: ИП РадиоСофт, 2000 5. Цифровые и аналоговые интегральные микросхемы: Справочник / Под ред. С.В. Якубовского. - М., 1990 6. Телец В.А., Федорков Б.Г. Микросхемы ЦАП и АЦП: Функционирование, параметры, применения. - М.: Энергоатом, 1998 7. Казаринов Ю.М. и др. Микропроцессорный комплект К1810: Структура, программирование, применение. - М.: Высш. шк., 1990 Приложение А. Текст программы работы УВSegRAM EQU 0FC00h ; сегмент ПЗУ PrgSize EQU 112 ; размер программы (в словах) portDAC EQU 0000b ; порт АЦП portDAT EQU 0001b ; порт данных portCW EQU 0110b ; порт упр. слова (CW) portSW EQU 1010b ; порт слова сост. (SW) portPRG EQU 0011b ; порт УС микросхем интерфейса CODE STARTUP ; тест ПЗУ mov Ax, SegRAM mov Ds, Ax ; в Ds - сегмент ПЗУ xor Ax, Ax ; очистим Ax mov Cx, PrgSize ; в Cx - размер программы (в словах) xor Bx, Bx @@LOOP1: add Ax, Ds: [Bx] ; в Ax - сумма всех слов add Bx, 2 loop @@LOOP1 cmp Ax, Ds: [PrgSize*2] ; совпадает ли с заданным? je @CONTINUE1 ; да - идем дальше mov Al, 0FFh out portSW, Al ; SW < - ошибка @HALT: hlt ; вешаем систему jmp @HALT @CONTINUE1: ; программирование интерфейса mov Al, 10010000b ; первая МС. порт C на ввод mov Ah, 10011001b ; вторая МС. порт C на вывод out portPRG, Ax ; программируем ; выполнение функции mov Bx, 1 ; по-умолчанию X(0)=1 xor Cx, Cx ; очистим Cl=SW и Ch=CW @@LOOP2: xchg Ax, Cx out portSW, Al ; SW < - данные не готовы xchg Ax, Cx and Cl, 01100000b shr Cl, 2 in Ax, portCW ; в Ch - слово управления mov Ch, Ah in Ax, portDAC ; в Ax - с АЦП test Ax, 0400h ; было переполнение? jz @@LABEL1 ; не было - приступим к работе test Ch, 00000010b ; переполнение. Что делать? jz @@LABEL2 or Cl, 01100000b ; установим в бесконечность @@LABEL2: mov Ax, 0FFFFh ; установим максимум @@LABEL1: test Cl, 01010000b ; будут ли исключительные ситуации? jnz @@LABEL3 ; будут -> переход mov Dx, Ax shr Dx, 8 cmp Dx, Bx ; X(i)>=256*X (i_1)? jae @@LABEL8 @@LABEL9: cmp Ax, Bx ; X(i)<X (i_1)? jl @@LABEL10 xor Dx, Dx ; очистим Dx div Bx ; Dx: Ax/Bx -> A+D/B mov Si, Ax ; сохраним значение A mul Dx ; Dx: Ax < - A*D shl Ax, 1 ; *2 shl Dx, 1 div Bx ; 2*A*D/B mov Bx, Ax mov Ax, Si ; восстановим A mul Ax ; Dx: Ax < - A*A add Ax, Bx ; в Ax - результат! jmp @@LABEL7 @@LABEL8: or Cl, 00000010b ; SW < - OF test Ch, 00000100b ; переполнение. Что делать? jnz @@LABEL9 mov Ax, 0FFFFh ; результат < - максимум jmp @@LABEL7 @@LABEL10: 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: out portDAT, Ax ; результат в порт mov Bx, Ax ; X (i_1)=X(i) mov Al, Cl or Al, 10000000b ; SW < - данные готовы! out portSW, Al ; SW в порт wait ; ждем пока данные прочитают jmp @@LOOP2 ; в начало db 00h ; выравниевание на границу слова dw xxxxh ; контрольная сумма ПЗУ END Также, при программировании ПЗУ необходимо записать команду перехода jmp 0FC00:0000h по адресу ПЗУ 3F0h (физический адрес 0FFF0h).
Страницы: 1, 2, 3
|