Текущий архив: 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.46 MB
Время: 0.029 c