разъясните плиз про LPT
От: Demon Россия  
Дата: 17.11.03 08:45
Оценка:
Господа!

Вот кусок ТЗ
"Алгоритм записи:
CLK 2 нога разъёма LPT – порта.
DATA 3 нога разъёма LPT – порта.
Исходно состояние выводов CLK и DATA высокое. Падение фронта CLK означает начало передачи информации в прибор. Низкий уровень CLK держится 0.1 мсек. В течение этого времени надо установить старший бит байта данных на выводе DATA. Далее (по истечении 0.1 мсек) состояние CLK переводится в высокое и ждём ещё 0.1 мсек. Затем процесс повторяется для остальных битов."

Вопросы:
1. Что мне писать в 378-ой порт? (или в другой?)
2. Реально ли перещелкивать с такой частотой значение в порту? Чего-то я не припомню в винде таймера точнее 1 мсек.
Re: разъясните плиз про LPT
От: CH3COOH Россия http://progrex.narod.ru
Дата: 17.11.03 09:35
Оценка: 6 (1)
Здравствуйте, Demon, Вы писали:

D>Господа!


D>Вот кусок ТЗ

D>"Алгоритм записи:
D>CLK 2 нога разъёма LPT – порта.
D>DATA 3 нога разъёма LPT – порта.
D>Исходно состояние выводов CLK и DATA высокое. Падение фронта CLK означает начало передачи информации в прибор. Низкий уровень CLK держится 0.1 мсек. В течение этого времени надо установить старший бит байта данных на выводе DATA. Далее (по истечении 0.1 мсек) состояние CLK переводится в высокое и ждём ещё 0.1 мсек. Затем процесс повторяется для остальных битов."

D>Вопросы:

D>1. Что мне писать в 378-ой порт? (или в другой?)
D>2. Реально ли перещелкивать с такой частотой значение в порту? Чего-то я не припомню в винде таймера точнее 1 мсек.

2 нога это D0 регистра адреса, а 3 нога — D1. Следовательно, чтобы выставить CLK-->1, надо ставить в выводимом байте разряд 0, соотв., DATA разряд 1.

Насчёт 0.1 мс надо бы просить разработчиков ТЗ уточнить, это строго "0.1 мс", или "не менее 0.1 мс"

Вообще можно сделать такую задержку. Самый простой вариант — читать тот же порт 378 в цикле.
На одно чтение приходится примерно 0.6-0.8 мкс.
Более правильный способ — KeDelayExecutionThread() внутри драйвера.
// <...> — Здесь мог быть ваш код...
Re[2]: разъясните плиз про LPT
От: Demon Россия  
Дата: 17.11.03 10:01
Оценка:
Здравствуйте, CH3COOH, Вы писали:

D>>Вот кусок ТЗ

D>>"Алгоритм записи:
D>>CLK 2 нога разъёма LPT – порта.
D>>DATA 3 нога разъёма LPT – порта.
D>>Исходно состояние выводов CLK и DATA высокое. Падение фронта CLK означает начало передачи информации в прибор. Низкий уровень CLK держится 0.1 мсек. В течение этого времени надо установить старший бит байта данных на выводе DATA. Далее (по истечении 0.1 мсек) состояние CLK переводится в высокое и ждём ещё 0.1 мсек. Затем процесс повторяется для остальных битов."

D>>Вопросы:

D>>1. Что мне писать в 378-ой порт? (или в другой?)

CHC>2 нога это D0 регистра адреса, а 3 нога — D1. Следовательно, чтобы выставить CLK-->1, надо ставить в выводимом байте разряд 0, соотв., DATA разряд 1.


Т.е. вот так?
   mov dx,378h

//запись бита '0' из потока данных
   mov al,0
   out dx,al
   // sleep 0.1 msec
   mov al,80h
   out dx,al
   // sleep 0.1 msec

//запись бита '1' из потока данных
   mov al,40h
   out dx,al
   // sleep 0.1 msec
   mov al,C0h
   out dx,al
Re[3]: разъясните плиз про LPT
От: B_A_D Израиль  
Дата: 17.11.03 11:58
Оценка: 6 (1)
Здравствуйте, Demon, Вы писали:

D>Здравствуйте, CH3COOH, Вы писали:


D>>>Вот кусок ТЗ

D>>>"Алгоритм записи:
D>>>CLK 2 нога разъёма LPT – порта.
D>>>DATA 3 нога разъёма LPT – порта.
D>>>Исходно состояние выводов CLK и DATA высокое. Падение фронта CLK означает начало передачи информации в прибор. Низкий уровень CLK держится 0.1 мсек. В течение этого времени надо установить старший бит байта данных на выводе DATA. Далее (по истечении 0.1 мсек) состояние CLK переводится в высокое и ждём ещё 0.1 мсек. Затем процесс повторяется для остальных битов."

D>>>Вопросы:

D>>>1. Что мне писать в 378-ой порт? (или в другой?)

CHC>>2 нога это D0 регистра адреса, а 3 нога — D1. Следовательно, чтобы выставить CLK-->1, надо ставить в выводимом байте разряд 0, соотв., DATA разряд 1.


D>Т.е. вот так?

D>
D>   mov dx,378h

D>//запись бита '0' из потока данных
D>   mov al,0
D>   out dx,al
D>   // sleep 0.1 msec
D>   mov al,80h
D>   out dx,al
D>   // sleep 0.1 msec
     mov al,1   
     out dx,al

D>//запись бита '1' из потока данных
D>   mov al,40h
D>   out dx,al
D>   // sleep 0.1 msec
D>   mov al,C0h
D>   out dx,al
     mov al,1   
     out dx,al

D>



Судя по ТЗ, ты должен вернуть CLK в высокое состояние после передачи каждого бита(выделено болдом).
Странно, что разработчики не посадили CLK на 1-ю ногу LPT порта(Strobe) — было бы очень удобно, не надо его сбрасывать в исходное состояние — это производится автоматически. Да и время импульса на ноге 1 отмеряется самим контроллером LPT и является величиной постоянной и известной
Хотя, если это все только в учебных целях, то другое дело.
Re: разъясните плиз про LPT
От: Аноним  
Дата: 18.11.03 12:48
Оценка:
Здравствуйте, Demon, Вы писали:

D>Господа!


D>Вот кусок ТЗ

D>"Алгоритм записи:
D>CLK 2 нога разъёма LPT – порта.
D>DATA 3 нога разъёма LPT – порта.
D>Исходно состояние выводов CLK и DATA высокое. Падение фронта CLK означает начало передачи информации в прибор. Низкий уровень CLK держится 0.1 мсек. В течение этого времени надо установить старший бит байта данных на выводе DATA. Далее (по истечении 0.1 мсек) состояние CLK переводится в высокое и ждём ещё 0.1 мсек. Затем процесс повторяется для остальных битов."

D>Вопросы:

D>1. Что мне писать в 378-ой порт? (или в другой?)
D>2. Реально ли перещелкивать с такой частотой значение в порту? Чего-то я не припомню в винде таймера точнее 1 мсек.
Ответ. Точно просчитать время в винде НЕ НЕАЛЬНО, т.к. винда — ОС НЕ РЕАЛЬНОГО ВРЕМЕНИ!
Таймера, конечно, меньше чем на 1 мС нет, но можно использовать счетчики производительности. Там отсчет идет в единицах по 100 нС. Две функции: установка частоты и чего-то еще (см MSDN). Далее в ТЗ должна быть указана погрешность в частоте ибо точно такой период сделать вряд-ли у кого получится. Далее, насколько я знаю, у ЛПТ порта ножки 2-8 — выводы данных, => нет никаких проблем в порт записать байт меняя поочередно младший бит.
Основная проблема — доступ к портам в винде (98 обходится обычным outport, а вот 2000 не позволит напрямую писать в порт — здесь лажа). Мона написать свой драйвер ЛПТ порта, который обрабатывает все запросы и передает их дальше+имеется твоя функция записи. Словом выбирай.
Re[2]: разъясните плиз про LPT
От: PVA  
Дата: 19.11.03 11:27
Оценка:
Для точного измерения можешь глянуть еще rdtsc.
Ну и, конечно, KeDelayExecutionThread().
newbie
Re: разъясните плиз про LPT
От: mr_ST  
Дата: 19.11.03 11:59
Оценка:
Здравствуйте, Demon, Вы писали:

D>Вот кусок ТЗ

D>"Алгоритм записи:
D>CLK 2 нога разъёма LPT – порта.
D>DATA 3 нога разъёма LPT – порта.
D>Исходно состояние выводов CLK и DATA высокое. Падение фронта CLK означает начало передачи информации в прибор. Низкий уровень CLK держится 0.1 мсек. В течение этого времени надо установить старший бит байта данных на выводе DATA. Далее (по истечении 0.1 мсек) состояние CLK переводится в высокое и ждём ещё 0.1 мсек. Затем процесс повторяется для остальных битов."

Замахаешься ты под виндой релтайм делать Если на времена жесткие ограничения придется писать драйвер м не факт что все получится.
D>Вопросы:
D>1. Что мне писать в 378-ой порт? (или в другой?)
сходи www.beyondlogic.org там описания работы порта есть, краткие правда.

D>2. Реально ли перещелкивать с такой частотой значение в порту? Чего-то я не припомню в винде таймера точнее 1 мсек.

Что-то типа GetPerfomanceTimer, ну и rdtsc.
... << RSDN@Home 1.1.0 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.