реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как правильно забивать FIFO UART, например в LPC213x
singlskv
сообщение Nov 20 2010, 13:19
Сообщение #16


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(GetSmart @ Nov 20 2010, 16:10) *
Не особо и надобно. У меня сделано так. Когда возникает 0xC2 и буфер вывода закончился, то таймером задаётся пауза перед переключением (а она нужна) с учётом того, что ещё выводится один последний символ. И уже в прерывании таймера переключается RTS/DE.
Вот это как раз жутко и не удобно,
- лишний таймер + лишнее прерывание от него
- по условию Вашей задачи, есть длинные прерывания (до 5 символов), то есть пауза после окончания
передачи (TEMT) и до переключения RTS может сильно затянуться что не всегда хорошо,
например если ответ на запрос будет начинаться быстрее чем 5 символов

Go to the top of the page
 
+Quote Post
prm
сообщение Nov 20 2010, 18:48
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 4-04-07
Пользователь №: 26 760



Похожая тема
http://electronix.ru/forum/lofiversion/index.php/t74127.html
Go to the top of the page
 
+Quote Post
singlskv
сообщение Nov 20 2010, 20:25
Сообщение #18


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(prm @ Nov 20 2010, 21:48) *
Смеяцо уже можно ? Вы вобсче поняли о чем речь ?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 21 2010, 08:23
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (singlskv @ Nov 20 2010, 23:25) *
Смеяцо уже можно ?

Не надо - лучше прочитайте. Тема большая и про заполнение FIFO там есть.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 21 2010, 09:46
Сообщение #20


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



В той теме я ничего интересного не вижу. Есть только простое забивание всего фифо в прерывании по THRE. У меня щас так и сделано, но могут происходить паузы в потоке символов, хотя и в несколько раз с меньшей вероятностью чем когда совсем без фифо. Но если бы была возможность читать уровень фифо, либо задавать уровень срабатывания THRE, то был бы идеальный 16550 (с буквой B smile.gif). Буквально мелочи не хватает для полного счастья.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Nov 21 2010, 10:30
Сообщение #21


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Nov 21 2010, 11:23) *
Не надо - лучше прочитайте. Тема большая и про заполнение FIFO там есть.
Конечно я был слишком резок... и FIFO там упоминается, но по теме данного топика там нет ничего...


Цитата(GetSmart @ Nov 21 2010, 12:46) *
Но если бы была возможность читать уровень фифо, либо задавать уровень срабатывания THRE, то был бы идеальный 16550 (с буквой B smile.gif). Буквально мелочи не хватает для полного счастья.
И еще добавить прерывание по TEMT, и еще регулируемую софтом паузу в прерывании таймаут,
и хардовое руление RTS.
И получится почти также хорошо как в уартах у атмеля...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 21 2010, 10:34
Сообщение #22


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(singlskv @ Nov 21 2010, 15:30) *
...
И получится почти также хорошо как в уартах у атмеля...

Почитайте описание LPC1114 уарт. Там столько всего есть. Может быть почти всё перечисленное. Даже аппаратное дрыгание RTS/DE.

А у атмеля есть фифо и чтение его указателей?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Nov 21 2010, 10:47
Сообщение #23


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(GetSmart @ Nov 21 2010, 13:34) *
Почитайте описание LPC1114 уарт. Там столько всего есть. Может быть почти всё перечисленное. Даже аппаратное дрыгание RTS/DE.
Почитал. Улучшили. Пока еще не все... Ждемс дальше...
Цитата
А у атмеля есть фифо и чтение его указателей?
У него есть ДМА на почти всю переферию, причем с двойной буферизацией,
и аппаратный RTS, и прерывание по уходу всего в линию(TEMT в LPC) и настраиваемый таймаут.
Поэтому там таких проблем вообще нет.
ИМХО, это вообще лучшая реализация уартов в МК.
Слабое место атмеловских АРМ это I2C, хотя в новых чипах это вроде подправили.
Go to the top of the page
 
+Quote Post
Perepic
сообщение Dec 8 2010, 14:34
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 14-08-06
Пользователь №: 19 528



Цитата(GetSmart @ Nov 21 2010, 12:46) *
Есть только простое забивание всего фифо в прерывании по THRE. У меня щас так и сделано, но могут происходить паузы в потоке символов, хотя и в несколько раз с меньшей вероятностью чем когда совсем без фифо. Но если бы была возможность читать уровень фифо, либо задавать уровень срабатывания THRE, то был бы идеальный 16550 (с буквой B sm.gif). Буквально мелочи не хватает для полного счастья.

А что бы дал вам уровень FIFO ?
Ваша проблема как я понял в том, что взведенное прерывание по опустошению FIFO передатчика не обрабатывается с должной скоростью. В результате паузы. Это от того, что кто-то запрещает прерывания надолго. Но это проблема проектирования конкретного софта, и периферийный UART не виноват. Мой совет: используйте вложенные прерывания, или измените код так, чтоб никто не работал в режиме запрета прерываний дольше времени передачи одного символа по UART. Или заассайните FIQ для UARTа.

Из былого, бились несколько дней с такой же проблемой, Rowley CrossWorks + CTL на LPC2387. Оказалось реализованная в CTL байтовая очередь была "слишком безопасной", и на все время копирования данных запрещала IRQ. Теперь пользуем самописную очередь.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 8 2010, 14:45
Сообщение #25


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Perepic @ Dec 8 2010, 19:34) *
Мой совет: используйте вложенные прерывания, или измените код так, чтоб никто не работал в режиме запрета прерываний дольше времени передачи одного символа по UART. Или заассайните FIQ для UARTа.

Я вас умаляю. Я фанат вложенных прерываний sm.gif У меня FIQ блокирует остальные прерывания на 5-6 символов уарта. А на FIQе мне нужен нулевой джиттер (он собсно и сделан) и переносить его на IRQ тем более вложенный я не могу. Уровень фифо мне бы помог так, что в периодическом прерывании от таймера (ну скажем в районе 8 символов уарта) я бы его читал и дозабивал фифо до максимума. То есть даже не в прерывании от уарта.

Вобщем-то серьёзной проблемы нет. Всё работает и малые паузы не смертельны. Но лучше было бы без них.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01437 секунд с 7
ELECTRONIX ©2004-2016