Форум: "Система";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
ВнизAbout LPT Найти похожие ветки
← →
UN9GW (2001-11-29 10:56) [0]Как переключить регистр данных LPT порта на прием данных извне?
Сделать двунаправленным.
← →
Milz (2001-11-29 15:27) [1]5 бит регистра управления переключает направление, по крайней мере на 486 и пень к1 работает.
← →
UN9GW (2001-11-29 23:39) [2]5 бит установлен (порт 0x37A), но результат тот же - при чтении из 0x378 получаю последний переданный байт.
← →
33 (2001-11-30 00:27) [3]В BIOSe переключить.
← →
Milz (2001-11-30 08:58) [4]Да, я кое-что забыл, вот полное описание, откуда взял не помню, но не из одной книжки, всё проверено на опыте, в BIOS желательно прописать ECP, но сам смотри Extendet Control Register.
0:0408h, 040Ah, 040Ch, 040Eh - адреса портов 1-4
0:0478h, 0479h, 047Ah, 047Bh - ячейки для тайм-аута (длит.)
BASE+1 =Status Register
(чтение)
SR.7 Busy Инверсное состояние конт 11
SR.6 ACK сост. конт. 10
SR.5 PE сост. конт. 12
SR.4 Select сост. конт. 13 (1-вкл. принтер)
SR.3 Error сост. конт. 15 (0-ошибка)
SR.2 PIRQ флаг прерывания для ps/2 (=0 если прер.было =1 при чтении)
SR.1,0 ---
BASE+2 =Control Register
(зап+чтение)
CR.7,6 -------
CR.5 Direction бит управления напрявлением передачи для PS/2 =1 ввод (зп.)
CR.4 ACKINTEN =1 разрешает прерывание по низк. уровню линии 17
CR.3 SelectIn =1 низк. уровень линии 17 (разреш. работы)
CR.2 Init =0 на линии 16 0 (сброс принтера)
CR.1 Auto LF =1 низк. уров. на лин. 14
CR.0 Strobe =1 низк. уров. на лин. 1
Запрос прерывания выраб. по отр. перепаду на лин. 10 при уст. CR.4=1
конт. 10 соединён с +5В резистором 10 kОм. Прер. вырабатывается когда
принтер подтв-т приём предыдущёго байта (Ack=0).
L ур на 10 - данные для приёма действ.
ECP
Смещение Имя R/W Режимы
000 DataRegister R/W 000-001
000 ECP Adress FIFO R/W 011
001 Status Register R/W All
002 Control Register R/W All
400 Parallel Port Data FIFO R/W 010
400 ECP Data FIFO R/W 011
400 Test FIFO R/W 110
400 Config/ Register A R 111
401 Config/ Register B R/W 111
402 Extendet Control Register R/W all
Extendet Control Register
ECR.7:5
000 Станд. режим SPP
001 Двунапр. порт PS/2 Byte mode по CR.5 перекл. W/R
010 Fast Centronix
011 ECP
100 EPP
101 ------
110 Test Mode
111 Config mode
ECR.4 Error Interupt Disable (=0 Int по Error)
ECR.3 DMA Enable
ECR.2 Service Interupt
ECR.1 FIFO Full status
ECR.0 FIFO Empty status
Разьём стандартного LPT
г=====================================================================¬
¦ -----T-----T----------T----------T--------T-----¬ ¦
¦ ¦ PC ¦ Dir ¦ Standart ¦ EPP ¦ RegBit ¦ Pin ¦ Int 17h ¦
¦ +----+-----+----------+----------+--------+-----+ ¦
¦ ¦ 1 ¦ I/O ¦ -Strobe ¦ -Write ¦ CR0 ¦ 1 ¦ IRQ7,5 ¦
¦ ¦ 2 ¦ I/O ¦ Data0 ¦ Data0 ¦ DR0 ¦ 2 ¦ ¦
¦ ¦ 3 ¦ I/O ¦ Data1 ¦ Data1 ¦ DR1 ¦ 3 ¦ Адрес LPT1..4 ¦
¦ ¦ 4 ¦ I/O ¦ Data2 ¦ Data2 ¦ DR2 ¦ 4 ¦ 0:0408 0:040A ¦
¦ ¦ 5 ¦ I/O ¦ Data3 ¦ Data3 ¦ DR3 ¦ 5 ¦ 0:040C 0:040E ¦
¦ ¦ 6 ¦ I/O ¦ Data4 ¦ Data4 ¦ DR4 ¦ 6 ¦ ¦
¦ ¦ 7 ¦ I/O ¦ Data5 ¦ Data5 ¦ DR5 ¦ 7 ¦ Тайм-аут LPT1..4 ¦
¦ ¦ 8 ¦ I/O ¦ Data6 ¦ Data6 ¦ DR6 ¦ 8 ¦ 0:0478 0:0479 ¦
¦ ¦ 9 ¦ I/O ¦ Data7 ¦ Data7 ¦ DR7 ¦ 9 ¦ 0:047A 0:047B ¦
¦ ¦ 10 ¦ I ¦ -Ack ¦ -IRQ ¦ SR6 ¦ 10 ¦ ¦
¦ ¦ 11 ¦ I ¦ Busy ¦ -Wait ¦ SR7 ¦ 11 ¦ BASE = ¦
¦ ¦ 12 ¦ I ¦ PaperEnd ¦ PaperEnd ¦ SR5 ¦ 12 ¦ 3BCh 378h ¦
¦ ¦ 13 ¦ I ¦ Select ¦ Select ¦ SR4 ¦ 13 ¦ 278h ¦
¦ ¦ 14 ¦ I/O ¦ -AutoLF ¦ -DataStb ¦ CR1 ¦ 14 ¦ ¦
¦ ¦ 15 ¦ I ¦ -Error ¦ -Error ¦ SR3 ¦ 32 ¦ DR=BASE ¦
¦ ¦ 16 ¦ I/O ¦ -Init ¦ -Init ¦ CR2 ¦ 31 ¦ CR=BASE+2 ¦
¦ ¦ 17 ¦ I/O ¦-SelectIN ¦ -AddrStb ¦ CR3 ¦ 36 ¦ SR=BASE+1 ¦
¦ +----+--T--+----------+----------+---T----+-----+ ¦
¦ ¦ 18-25 ¦ GND ¦ 19-30,33 ¦ ¦
¦ L-------+----------------------------+----------- ¦
L=====================================================================-
Ack соед. с +5В через 10кОм
Вых. ток замык. на землю 30 мА, соглас. резисторы 50 Ом
Тестовая прога на борман паскале.
uses crt,dos;
const
Base = $378;
Datareg = base+$000;
Statusreg = base+$001;
Controlreg = base+$002;
ExtendetControlreg = base+$402;
procedure SetWrite;
begin
port[Controlreg]:=port[Controlreg] and 0;
end;
procedure SetRead;
begin
port[Controlreg]:=port[Controlreg] or $ff;
end;
procedure initLPT;
begin
port[Datareg]:=$ff; {обязат., см. схемотехнику ! }
port[ExtendetControlreg]:=port[ExtendetControlreg] or $20;
setwrite;
end;
begin
initLPT;
setread;
repeat
gotoxy(1,1);
write(port[Datareg]);
until false;
end.
← →
UN9GW (2001-11-30 12:11) [5]To: Milz
Спасибо за ответ. Попробую еще покопаться.
Тестовую прогу, типа некой утилиты, я уже написал.
Она дает возможность писать/читать любой регистр LPT порта (кроме 0x379 - этот только чтение) в OnLine режиме, т.е. прописав что-либо в порт, или изменив уровень какого-либо pin-а извне - на индикаторы выводится состояние каждого бита соотв. регистра. но дело в том, что к регистру данных могу добраться только изнутри - внешние сигналы он не видит.
В BIOS-е установлен SPP режим т.к. из любого другого нет доступа к установке 5 бита 0x37A регистра.
← →
UN9GW (2001-11-30 22:45) [6]Пока все в том же виде.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c