[an error occurred while processing this directive]
[an error occurred while processing this directive]
Программирование: Runtime управление настройкой FIFO буферов (UART) при настройке COM порта
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Отправлено
antony 05 декабря 2001 г. 19:48
|
|
|
|
аналогично этой теме:
http://www.telesys.ru/wwwboards/mcontrol/59/messages/160.shtml
Имеется ввиду следующее:
в настройках системы это (Win9x):
Control Panel -> System -> Ports -> COM# (Properties) -> Port Setting -> Advanced -> Use FIFO Buffers (UART), Recieve Buffer size, Transmit Buffer Size (вот про последнее и идёт речь).
оно же, если я не ошибаюсь указано как ForceFifoEnable, TxFIFO, RxFIFO и определено как записи в реестре.
здесь: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/serial/sseovr_4unb.asp
Вопрос в том как управлять этими величинами runtime (из программы), когда я открываю и настраиваю порт, т.е. менять величину в реестре или возможно вызовом некой функции (API)?
И зменение этих величин должно происходить до открытия порта или после (как DCB)?
Ноги у проблемы растут из следующего - если буферы UART используются ("галочка" в Control Panel стоит), то функция WriteFile(hPortHandle, ...); возвращяется после того как она "положила" последнюю порцию байт в UART буфер, но реально они ещё до устройства не дошли. Не определить конец передачи. Поскольку используется RTS/CTS в ручном режиме, то получается что я снимаю RTS раньше чем надо (на размер FIFO буфера). Конечно можно было бы поставить задержку BaudRate*FIFOsize*2 но Использование некой задержки основанной на "таймере" (в каком либо его проявлении) невозможно (скажем так - запрещено)
Спасибо.
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Ну я не совсем понимаю (+) — Беня (06.12.2001 12:28, 851 байт)
- Ещё вопрос: А если в DCB указать harware контроль RTS(CTS) fRtsControl = RTS_CONTROL_TOGGLE т.е. RTS будет сбрасываться автоматически после передачи буфера. В данном случае, какого буфера? driver или UART — antony (06.12.2001 10:31, пустое)
- У меня аналогичная проблема (+) — Беня (05.12.2001 20:15, 702 байт)
- Так и есть. — Леонид Иванович (06.12.2001 08:23, 391 байт)
- Я эту дискуссию на ru.embedded читал и смеялся — Белый (06.12.2001 11:18, 210 байт)
- Да я ещё в старой дискуссии здесь писал, — Леонид Иванович (07.12.2001 00:55, 234 байт)
- Прочитать порт, разумеется, можно. Вопрос в том, зачем тогда нужно API, если приходится заниматься таким извратом — Ворчун (06.12.2001 14:47, пустое)
- Говорить мы все горазды... — Энди (06.12.2001 11:41, пустое)
- Порекомендуйте, плз. — Точка опоры (06.12.2001 11:21, пустое)
- EV_TXEMPTY происходит, когда последний байт из софт-буфера записывается в передатчик, т.е. в хард-буфер, а вовсе не когда последний байт поступает на сдвиговый регистр. А вам, antony, если хотите работать в real time под Win, придется писать свой драйвер :0)) — Энди (06.12.2001 10:19, пустое)
- Если это нужно для полудуплексного 485, то почему бы не читать передаваемую инфу? — Xan (06.12.2001 09:32, 223 байт)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru