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

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

3 часа назад, mantech сказал:
3 часа назад, jcxz сказал:

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

Да, мысли были

Правильные мысли :) - проще программно! Аппаратный в вашем случае не имеет никаких плюсов.
Единственно, обмен (точнее, ожидание ответа) придётся несколько изворотливо делать: иногда отвечают через 50 mS, а иногда 350 mS или более.

 

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


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

4 минуты назад, aleksandr-zh сказал:

(точнее, ожидание ответа) придётся несколько изворотливо делать:

Дак это-то не проблема, как придет, так и ладно, и на четность(9 бит) можно положить, ибо это полудуплексный мастер-слейв протокол, там синхронизация первого байта особо и не нужна, а вот передача слейву строго требует 9 бит ...

7 минут назад, aleksandr-zh сказал:

Правильные мысли :) - проще программно!

Программно - это надо еще как минимум один таймер, а таймера в AW- говно, что-то они там недокрутили и синхронизация теряется (или пропускает прерывания - х.з.) вообщем таймеров в пуле 3, но по-нормальному можно использовать только один(((

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


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

2 часа назад, mantech сказал:

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

x = x ^ x << 4;
x = x ^ x << 2;
x = x ^ x << 1;

результат в 7-м бите

 

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

Программно - это надо еще как минимум один таймер

Зачем ещё? Вы же писали что "уже эмулируется другой UART". Какая разница - один UART на этом таймере эмулировать или N UART-ов? Таймер всё равно нужен только один.

 

Цитата

а таймера в AW- говно, что-то они там недокрутили и синхронизация теряется

Это странно. Я бы поискал причину такого. Иначе возникают сомнения в отсутствии серьёзных багов в ПО.

И обычно эмуляция UART делается на связке таймер+DMA (и RX и TX). Ещё можно на SPI и т.п.

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


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

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

x = x ^ x << 4; x = x ^ x << 2; x = x ^ x << 1;

Че-то сходу понять это не получается, НГ наверно виноват))) Но интересно, спасибо.

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


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

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

Че-то сходу понять это не получается, НГ наверно виноват))) Но интересно, спасибо.

Всего 3 ARM-команды должно быть - быстрее чем через таблицу или также.

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


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

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

Всего 3 ARM-команды должно быть - быстрее чем через таблицу или также.

Нее, я не об этом, просто пока саму логику не понял)))

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


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

14 часов назад, mantech сказал:

а вот передача слейву строго требует 9 бит

Это я знаю, я его еще первых версий месяц грыз, тихонько поругиваясь на извраты )))
Я ранее и писал, что слейв может ответить как угодно: и через 50, и через 350 mS...

Года-полтора в Питере контору спасал: MDB устройства + RFID. Они заказали дяденьке, а он их промурыжил и "опа, а завтра же выставка!". И я как пап Карл за пару ночей на макетке ))))

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


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

15 часов назад, mantech сказал:

Нее, я не об этом, просто пока саму логику не понял)))

Сначала делается "Исключающее побитовое ИЛИ" над полубайтами.
Там, где была пара единичек или нулей, в результате получится ноль.
Теперь остается 4 бита - делаем такую же операцию, но в операндах по 2 бита.
Останется 2 бита - делаем такую же операцию, но в операндах по 1 биту (6-й и 7-й).
В итоге в 7-м бите будет лежать признак нечетности количества единичек в символе.

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


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

54 минуты назад, Arlleex сказал:

Сначала делается

Теперь понял, спасибо!  Но все-равно пришлось бросить эту затею и делать программный порт, ибо эти уарты абсолютно невменяемы, т.е. он работает в режиме четности, но переключение ODD\EVEN на лету не отрабатывается, и да, SPACE и MARK там не реализованы, дерьмо вообщем, хотя уж если так, то как мне хотелось вбить керно в голову этих разработчиков протоколов с четностями/ 9, 10ми битами и пр. дрянью, сколь не делал протоколов обмена, всегда 8N1 хватало, злость вообщем пробирает...

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


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

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

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

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

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

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

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

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

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

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