PDA

Просмотр полной версии : Состояние бита четности СОМ-порта



SokolovS
08.02.2006, 12:01
Подскажите, как опросить состояние бита четности полученного байта по каналу RS232?
Дело в том, что передающая сторона использует его в качестве информационного :(
Точнее, первый байт пачки имеет его выставленным, а другие - сброшенным. С помощью этого бита нужно определить начало пачки...
В любом микроконтроллере распознать это - плевое дело, а как сделать это стандартным портом компьютера - ума не приложу!
Очень надо, а городить приставку на микроконтроллере нежелательно!

Eugie
09.02.2006, 15:42
ИМХО, это в общем случае невозможно, т.к. биты четности и стоп-биты должны отсекаться на уровне драйвера. Или, во всяком случае, такая возможность должна поддерживаться опять-таки драйвером. На какой платформе работаете? Если на Win32, см. в сторону Communications Events и в частности CE_RXPARITY.

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

Eugie
10.02.2006, 17:17
Похоже, эвенты так и работают.
А что за 'операционка собственного производства'? Сами пишете или чужую доводите до ума? ;)

SokolovS
13.02.2006, 15:47
Сами написали. Чужую доводить - себе дороже:)
Зато получилась маленькая - да удаленькая. Так называемая Embedded Real-Time OS.

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