реклама на сайте
подробности

 
 
> Прием по КОМ порту 9-го бита под Windows
paskal
сообщение Nov 19 2015, 19:10
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Здравствуйте!
Для работы с КОМ портом всегда пользовался стандартными Win32 службами Createfile, WriteFile, ReadFile, и этого хватало. Но вот возникла задача где надо принимать посылки в 9 бит. И значение девятого бита должно читаться. Как это сделать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
iosifk
сообщение Nov 19 2015, 19:54
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(paskal @ Nov 19 2015, 22:10) *
Здравствуйте!
Для работы с КОМ портом всегда пользовался стандартными Win32 службами Createfile, WriteFile, ReadFile, и этого хватало. Но вот возникла задача где надо принимать посылки в 9 бит. И значение девятого бита должно читаться. Как это сделать?

Читать ошибку паритета...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
paskal
сообщение Nov 19 2015, 20:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Цитата(iosifk @ Nov 19 2015, 22:54) *
Читать ошибку паритета...

А если в буфере несколько байт накопилось, этот метод сработает?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 19 2015, 21:32
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (paskal @ Nov 19 2015, 22:05) *
А если в буфере несколько байт накопилось, этот метод сработает?

Нет. И Windows здесь ну совсем ни причем. Железо не поддерживает.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Nov 20 2015, 05:41
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Nov 20 2015, 03:32) *
Нет. И Windows здесь ну совсем ни причем. Железо не поддерживает.

Вы уверены? Разве FIFO 16550 не хранит биты состояния PE/FE/BREAK вместе с битами данных для каждого принятого байта?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 20 2015, 13:24
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Nov 20 2015, 07:41) *
Вы уверены? Разве FIFO 16550 не хранит биты состояния PE/FE/BREAK вместе с битами данных для каждого принятого байта?

Не хранит sad.gif. Ну и BREAK это вообще не к байту относится.
Навороченных UART, котрые хранят, вообще раз два и все sad.gif. Самое навороченным в этом плане был набортный у древного AM186CC. Впромем там и битов было сколько хошь, и поддержка адресации в старших битах. A 16550 это все тот-же 8250 к которому грубо FIFO только на данные прикрутили sad.gif.




--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Nov 20 2015, 16:05
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Nov 20 2015, 19:24) *
Не хранит sad.gif. Ну и BREAK это вообще не к байту относится.
Навороченных UART, котрые хранят, вообще раз два и все sad.gif. Самое навороченным в этом плане был набортный у древного AM186CC. Впромем там и битов было сколько хошь, и поддержка адресации в старших битах. A 16550 это все тот-же 8250 к которому грубо FIFO только на данные прикрутили sad.gif.

Вот передо мной открыт юзер-мануал на LPC43xx страница UART. В заголовке его написано: "Register locations conform to ‘550 industry standard".
Далее, при описании регистра LSR вижу такие фразы:
"Note: A parity error is associated with the character at the top of the USART RBR FIFO."
Это же самое указано и для FE и для BREAK.
Если они, как пишут, реализовали у себя регистры x550, то вполне возможно, что и всю структуру FIFO тоже.
А почему в оригинальном 16550 не может быть так же?
Считываем LSR, если стоит бит0 - считываем вершину FIFO, после этого пара регистров LSR/RBR обновляется поднимающимся из FIFO следующим принятым символом с его статусными битами (символ - в RBR, статусы - в LSR).
Логично.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 20 2015, 17:32
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Nov 20 2015, 18:05) *
Вот передо мной открыт юзер-мануал на LPC43xx страница UART.
Далее, при описании регистра LSR вижу такие фразы:
"Note: A parity error is associated with the character at the top of the USART RBR FIFO."

А что такое TOP FIFO sm.gif? Например, последний попавший в него символ. Как только приемный автомат зафиксировал ошибку он взводит этот бит при помещении символа в FIFO, хотя перед ним в FIFO лежит уже куча правильных символов. Бит ошибки остается взведенным до тех пор, пока он не будет считан LSR - полностью совместимый 16450 режим. Но! Действительно оказалось есть 16550D чип у которого FIFO не 8 а 11 бит и в нем соответственно хранятся ошибки уже привязанные к символу. Но тут уж возникает вопрос о том знает-ли об этом драйвер и API WIN. Мне помнится у драйвера декларировалась совместмость с 16650A. Хотя в принципе может при определенных условиях просто плевать.
В общем можно пробовать - либо получится, либо нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 02:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016