Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

Помогите справиться с RTS последовательного порта   Найти похожие ветки 

 
dielectric ©   (2004-09-02 16:22) [0]

WinXP Устанавливаю в DCB dcb_RtsControlToggle RTS рухает через 10мс поле выдачи байта в линию, а нужно тютька в тютьку, использую EscapeCommFunction(PortH,CLRRTS) при dcb_RtsControlDisable по признаку EV_TXEMPTY рухает сразу же как устанавливается. Как же всётаки отследить последний байт
                          Заранее благодарен, Dielectric


 
Германн ©   (2004-09-03 02:08) [1]

Интересный вопрос! Узнаешь ответ - сообщи плиз!
Пока что "отследить последний байт" по EV_TXEMPTY, удавалось только при отключении аппаратного FIFO микросхемы UART.


 
dielectric ©   (2004-09-03 09:01) [2]

Пока что "отследить последний байт" по EV_TXEMPTY мне так и не удалось и при отключении аппаратного FIFO, RTS падает раньше (по осцилографу вижу), где то я слышал что EV_TXEMPTY появляется когда пуст буфер винды а не самого уарта. Кто скажет как прочитать регистр состояния порта в компе или какой другой способ определить конец выдачи, очень надо, пожалуйста. (напоминаю, у меня XP, не Win9X)
P.S. Даже на старом 51 уарте прерывание такое есть


 
Defunct ©   (2004-09-04 02:52) [3]

> P.S. Даже на старом 51 уарте прерывание такое есть

Отключить ком порты в текущей конфигурации винды. И работать с ними напрямую.

In/Out


 
Германн ©   (2004-09-05 03:28) [4]

2 Defunct ©   (04.09.04 02:52) [3]
>Отключить ком порты в текущей конфигурации винды. И работать с >ними напрямую.

>In/Out

Объясни тогда как? Как в NT работать "напрямую с портами"!
Без драйвера режима ядра?


 
dielectric ©   (2004-09-06 08:49) [5]

Я как бы сделал "прямое управление", т.е. напрямую запрашиваю байт состояния порта, RTS вырубается вовремя, но только при посредстве giveio.sys  

initialization
lpServiceArgVectors:=nil;
hSCMan:=OpenSCManager(Nil,Nil,SC_MANAGER_ALL_ACCESS);
hService:=CreateService(hSCMan,"giveio","giveio",SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,
     SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,PChar(ExtractFilePath(ParamStr(0))+"giveio.sys"),
     nil,nil,nil,nil,nil);
If hService<>0 then CloseServiceHandle(hService);
hService:=OpenService(hSCMan,"giveio",SERVICE_ALL_ACCESS);
If hService<>0 then
 begin
  StartService(hService,0,PChar(lpServiceArgVectors));
  CloseServiceHandle(hService);
 end;
hDevice:=CreateFile("\\.\giveio",GENERIC_READ or GENERIC_WRITE,0,PSECURITY_DESCRIPTOR(nil),OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 CloseHandle(hDevice);
end.

вырезал из dataport.pas
я так понял стандартными способами х. добьёшься


 
Германн ©   (2004-09-07 02:49) [6]

Ну, я бы уточнил бы. "Стандартными" способами можно и нужно добиваться. Но "стандартный" для NT способ - написание драйвера!


 
dielectric ©   (2004-09-10 10:57) [7]

По любому придётся использовать нерегламентированые функции ядра, тобишь получиться тот же самый giveio



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
8-1090273441
Satan
2004-07-20 01:44
2004.10.10
Проблема AnalyzeBmp.Canvas.CopyRect(DestRect,Bitmap.Canvas,Rect);


1-1096024271
wisekaa
2004-09-24 15:11
2004.10.10
Работа с Project Group


1-1096115569
Dmy
2004-09-25 16:32
2004.10.10
PopupMenu + иконка в трее — не закрывается нормально...


1-1096264936
Rostislav Rotaru
2004-09-27 10:02
2004.10.10
Помогите перевести на Delphi


1-1096263093
_alex_
2004-09-27 09:31
2004.10.10
Delphi And Visual c++