Перейти к содержанию
    

Как заставить работать UART 16550 в 9и битном режиме

Приветствую!

Вопрос на засыпку)))  Нужно передавать первый байт с установленным 9м битом в 1, остальные в 0 (протокол MDB), но порт 16550 совместимый, как-то можно его заставить работать в таком режиме?  Может с четностью как-то "поиграть" можно? Пока до конца не понял, чем отличается ODD от EVEN режима...

Есть какие-мнения?

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, только с четностью играть. ODD и EVEN отличаются полярностью, но они вам не подходят, ибо зависят от содержимого передаваемого байта. Там есть еще два варианта - "принудительно 1" и "принудительно 0" - вот они вам подойдут. И с FIFO придется отключить как минимум на время передачи адресного байта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, Сергей Борщ сказал:

Там есть еще два варианта - "принудительно 1" и "принудительно 0" - вот они вам подойдут.

А можно по-подробнее, где это задается, не увидел...

4 часа назад, Сергей Борщ сказал:

ODD и EVEN отличаются полярностью, но они вам не подходят, ибо зависят от содержимого передаваемого байта

Ну в принципе, можно анализировать 0й бит передаваемого байта (0-четный 1 нечет) но если при четном байте поставить ODD, что будет в бите четности? Анализатора нет посмотреть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 минут назад, mantech сказал:

Ну в принципе, можно анализировать 0й бит передаваемого байта (0-четный 1 нечет) но если при четном байте поставить ODD, что будет в бите четности? Анализатора нет посмотреть.

Чётным/нечётным должно быть не передаваемое число, а количество единичных бит в нём. UART считает это количество и дополняет его до чётного или нечётного (в зависимости от конфига - even/odd).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, jcxz сказал:

а количество единичных бит в нём.

Т.е. 1,3,5,7 единиц - нечетное получается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, jcxz сказал:

да

Понял, тогда " дополняет его до чётного или нечётного (в зависимости от конфига - even/odd)." в таком случае, при заданном ODD что будет в бите четности 0 или 1 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

25 минут назад, mantech сказал:

А можно по-подробнее, где это задается, не увидел...

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setcommstate

https://docs.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-dcb

4 минуты назад, mantech сказал:

Понял, тогда " дополняет его до чётного или нечётного (в зависимости от конфига - even/odd)." в таком случае, при заданном ODD что будет в бите четности 0 или 1 ?

Ну там же всё просто! Смотрите на картинку вверху страницы:  https://en.wikipedia.org/wiki/Parity_bit

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, jcxz сказал:

Это здрово, конечно в регистрах бы это посмотреть...

The parity scheme to be used. This member can be one of the following values.

TABLE 4
Value Meaning
EVENPARITY
2
Even parity.
MARKPARITY
3
Mark parity.
NOPARITY
0
No parity.
ODDPARITY
1
Odd parity.
SPACEPARITY
4
Space parity.

 

MARKPARITY и SPACEPARITY имеется ввиду?

6 минут назад, jcxz сказал:

Ну там же всё просто! Смотрите на картинку вверху страницы:

Спасибо, да действительно все нарисовано)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, mantech сказал:

Это здрово, конечно в регистрах бы это посмотреть...

В даташите на ваш чип должно быть.

1 минуту назад, mantech сказал:

MARKPARITY и SPACEPARITY имеется ввиду?

да. На https://en.wikipedia.org/wiki/Parity_bit  тоже это описано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, jcxz сказал:

В даташите на ваш чип должно быть.

Да вот этого и не нашел. УАРТ в аллвиннере, пишут, что 16550 совместимый, может не так уж совместимый...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, mantech сказал:

Да вот этого и не нашел. УАРТ в аллвиннере, пишут, что 16550 совместимый, может не так уж совместимый...

совместимый != идентичный. Что-то может отсутствовать.

 

PS: С таким количеством ресурсов быстродействия как в аллвинере, можно и программно UART эмулировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, jcxz сказал:

С таким количеством ресурсов быстродействия как в аллвинере, можно и программно UART эмулировать.

Да, мысли были, но там уже и так один эмулируется по причине того, что их всего три, но с другой стороны, скорость всего 9600, поэтому больших проблем быть не должно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, jcxz сказал:

тоже это описано.

В догонку еще)))  Нет-ли какого-то простого и быстрого алгоритма определения четного\нечетного числа, или только по таблице?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть полезно посмотреть главу 5 в книге "Алгоритмические трюки для программистов", второе издание, Генри Уоррен, мл. , 2014

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...