Jump to content

    
mantech

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

Recommended Posts

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

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

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

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

 

Share this post


Link to post
Share on other sites
4 минуты назад, aleksandr-zh сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
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 и т.п.

Share this post


Link to post
Share on other sites
5 минут назад, jcxz сказал:

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

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

Share this post


Link to post
Share on other sites
2 минуты назад, mantech сказал:

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

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

Share this post


Link to post
Share on other sites
2 минуты назад, jcxz сказал:

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

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

Share this post


Link to post
Share on other sites
14 часов назад, mantech сказал:

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

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

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

Share this post


Link to post
Share on other sites
15 часов назад, mantech сказал:

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

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

Share this post


Link to post
Share on other sites
54 минуты назад, Arlleex сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.