Подскажите, как опросить состояние бита четности полученного байта по каналу RS232?
Дело в том, что передающая сторона использует его в качестве информационного
Точнее, первый байт пачки имеет его выставленным, а другие - сброшенным. С помощью этого бита нужно определить начало пачки...
В любом микроконтроллере распознать это - плевое дело, а как сделать это стандартным портом компьютера - ума не приложу!
Очень надо, а городить приставку на микроконтроллере нежелательно!
Состояние бита четности СОМ-порта
Модераторы: Duncon, Hawk, Romeo, Eugie
ИМХО, это в общем случае невозможно, т.к. биты четности и стоп-биты должны отсекаться на уровне драйвера. Или, во всяком случае, такая возможность должна поддерживаться опять-таки драйвером. На какой платформе работаете? Если на Win32, см. в сторону Communications Events и в частности CE_RXPARITY.
УРА! Я наконец победил этот самый бит четности.
Правда, это не под WIN32, а под операционкой собственного производства.
Думаю, что можно и под виндами его проверить.
А метод прост, как батон
Если выставить фиксацию четности, например в 1, то при приходе байта со значением 0 контроллер генерит сразу два прерывания:
первое - по ошибке четности (6 в статусном регистре), а уж потом - по приходу байта.
Если по прерыванию ошибки четности выставить флажок - то при приеме байта наличие этого флажка говорит о состоянии 9-го разряда. Только после этого нужно флажок не забыть сбросить.
Только лучше отключить FIFO, правда с ним тоже работает, но не уверен, что всегда.
В зависимости от установки фиксации четности в 0 или 1 прерывание по ошибке генерится либо при 1, либо при 0 в принятом бите четности.
Правда, это не под WIN32, а под операционкой собственного производства.
Думаю, что можно и под виндами его проверить.
А метод прост, как батон
Если выставить фиксацию четности, например в 1, то при приходе байта со значением 0 контроллер генерит сразу два прерывания:
первое - по ошибке четности (6 в статусном регистре), а уж потом - по приходу байта.
Если по прерыванию ошибки четности выставить флажок - то при приеме байта наличие этого флажка говорит о состоянии 9-го разряда. Только после этого нужно флажок не забыть сбросить.
Только лучше отключить FIFO, правда с ним тоже работает, но не уверен, что всегда.
В зависимости от установки фиксации четности в 0 или 1 прерывание по ошибке генерится либо при 1, либо при 0 в принятом бите четности.
Похоже, эвенты так и работают.
А что за 'операционка собственного производства'? Сами пишете или чужую доводите до ума?
А что за 'операционка собственного производства'? Сами пишете или чужую доводите до ума?
Сами написали. Чужую доводить - себе дороже
Зато получилась маленькая - да удаленькая. Так называемая Embedded Real-Time OS.
Зато получилась маленькая - да удаленькая. Так называемая Embedded Real-Time OS.
Вообще в виндах есть апишная функция SetCommConfig. Где куча параметров в том числе и на счет бита четности. Сам детально не разбирался, ено думаю можно что-нить придумать там