Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
1-19160
Georg
2002-02-21 11:58
2002.03.07
Шифровки Юстаса (Алексу)


1-19122
Aleksandr
2002-02-20 19:13
2002.03.07
Почему компоненты АДО не создаются с Owner=nil?!!!!!!


1-19154
Юра
2002-02-21 11:04
2002.03.07
Нужна помощь по системному вызову


1-19246
Lord Vader
2002-02-20 09:58
2002.03.07
СРАВНЕНИЕ СТРОК


3-19053
Владимир 2
2002-02-06 15:40
2002.03.07
Ошибка AccessViolation при попытке посчитать записи методом RecordCount





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский