Состояние бита четности СОМ-порта

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
SokolovS
Сообщения: 8
Зарегистрирован: 08 фев 2006, 11:49
Откуда: Санкт-Петербург

08 фев 2006, 12:01

Подскажите, как опросить состояние бита четности полученного байта по каналу RS232?
Дело в том, что передающая сторона использует его в качестве информационного :(
Точнее, первый байт пачки имеет его выставленным, а другие - сброшенным. С помощью этого бита нужно определить начало пачки...
В любом микроконтроллере распознать это - плевое дело, а как сделать это стандартным портом компьютера - ума не приложу!
Очень надо, а городить приставку на микроконтроллере нежелательно!
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

09 фев 2006, 15:42

ИМХО, это в общем случае невозможно, т.к. биты четности и стоп-биты должны отсекаться на уровне драйвера. Или, во всяком случае, такая возможность должна поддерживаться опять-таки драйвером. На какой платформе работаете? Если на Win32, см. в сторону Communications Events и в частности CE_RXPARITY.
SokolovS
Сообщения: 8
Зарегистрирован: 08 фев 2006, 11:49
Откуда: Санкт-Петербург

10 фев 2006, 17:08

УРА! Я наконец победил этот самый бит четности.
Правда, это не под WIN32, а под операционкой собственного производства.
Думаю, что можно и под виндами его проверить.
А метод прост, как батон :)
Если выставить фиксацию четности, например в 1, то при приходе байта со значением 0 контроллер генерит сразу два прерывания:
первое - по ошибке четности (6 в статусном регистре), а уж потом - по приходу байта.
Если по прерыванию ошибки четности выставить флажок - то при приеме байта наличие этого флажка говорит о состоянии 9-го разряда. Только после этого нужно флажок не забыть сбросить.
Только лучше отключить FIFO, правда с ним тоже работает, но не уверен, что всегда.
В зависимости от установки фиксации четности в 0 или 1 прерывание по ошибке генерится либо при 1, либо при 0 в принятом бите четности.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

10 фев 2006, 17:17

Похоже, эвенты так и работают.
А что за 'операционка собственного производства'? Сами пишете или чужую доводите до ума? ;)
SokolovS
Сообщения: 8
Зарегистрирован: 08 фев 2006, 11:49
Откуда: Санкт-Петербург

13 фев 2006, 15:47

Сами написали. Чужую доводить - себе дороже :)
Зато получилась маленькая - да удаленькая. Так называемая Embedded Real-Time OS.
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

15 фев 2006, 14:59

Вообще в виндах есть апишная функция SetCommConfig. Где куча параметров в том числе и на счет бита четности. Сам детально не разбирался, ено думаю можно что-нить придумать там
Ответить