|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 2:51 pm
|
Страница 1 от 1
|
[ 9 мнения ] |
|
| Автор |
Съобщение |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 UART TX FIFO въпрос
Иде реч за LPC2000, но въпроса би трябвало да е валиден за всички 16550 базирани UART-ове.
FIFO-то на трансмитера е 16 байта. Но за разлика от ресивера няма как да се сетне нивото на което ще се генерира прекъсване.
Това според мен автоматически значи, че и когато има един свободен байт, ще се изгенерира прекъсване. Прав ли съм? Защото ми се вижда тъпо.
Веднъж напълнен FIFO буфера ще си загуби смисъла - прекъсване ще се генерира на всеки изпратен байт. И процесора ще се омота от прекъсвания.
Или може би аз не съм прав и прекъсването се генерира, едва когато FIFO-то се изпразни?
А пък тоя ред в дейта шита съвсем ме смути :
A THRE interrupt is set immediately if the UART0 THR FIFO has held two or more characters at one time and currently, the U0THR is empty
Как да го преведа?
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Май 11, 2006 5:48 pm |
|
 |
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 2:01 pm Мнения: 1952 Местоположение: Варна
|
THRE = Transmitter Holding Register Empty
и този флаг се вдига когато е ПРАЗЕН Tx FIFO.
Няма да имаш прекъсване на всеки изпратен байт.
Точно така!
Цитираното изречение се превежда:
"Заявка за прекъсване по THRE се подава ако Tx FIFO е съдържал минимум два байта и в момента е празен(байтовете са прехвърлени към преместващия регистър)."
Когато се подаде заявка по THRE, в преместващия регистър все още се намира последния байт. Когато и той бъде изпратен се вдига и флага TEMT, който обаче не генерира прекъсване а само е достъпен за четене от статус регистъра UxLSR.
|
| Чет Май 11, 2006 6:07 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Мерси.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Май 11, 2006 6:35 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Втори въпрос.
Какво се прави като се засече някакъв сорт грешка при приемане: от типа на OE, FE, BI?
На простите контролери е достатъчно да се изключи и включи ресивера, за да се ресетне, и после почвам наново.
Но при 16550 нещата май не са толкова прости. Трябва ли да изчиствам LSR, регистъра за данни, флага за прекъсване по грешка на линията в U0IIR поотделно или има някакво универсално решение - получи се грешка, изливаме кофата и почваме отново.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Май 12, 2006 11:05 am |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
ОЕ (overrun error) не е грашка по линията. това е ТВОЯ грешка - не си успял за изчетеш поне един байт от фифито (ако е пуснато) или приемащия регистър, а е дошъл нов и си загубил последния приет байт. това е индикация, че ти куца интеръпт процедурата при приемане.
FE (framing error) и PE (parity error) говорят за различно сетване на приемника и предавателя, или (ако са епизодични) дълга линия и лоша характеристика. в този случай би трябвало да се регистрира наличие на грешка и да се реагира на по-горно протоколно ниво (препращане на фрейм)
BI (break interrupt) е индикация, че имаш BREАK състояние на линията. това не е грешка, а индикация за промяна в състояние, като RTS или RI
|
| Пет Май 12, 2006 11:30 am |
|
 |
|
Zdrav
Ранг: Форумен бог
Регистриран на: Сря Яну 26, 2005 2:01 pm Мнения: 1952 Местоположение: Варна
|
Ако говорим само на хардуерно ниво.
Самото прочитане на статус регистъра(UxLSR) нулира някои от флаговете. За да излезеш нормално от прекъсването трябва и едно четене на UxIIR. Трябва да ресетнеш и Rx FIFO буфера защото в него може да има грешни байтове.
Всичко това аз го правя по отделно. И мисля че това е сигурния начин.
На протоколно ниво, разбира се ти решаваш какво да правиш.
|
| Пет Май 12, 2006 11:41 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
На LPC то всичките тия генерират RLS (Receive Line Status) прекъсване. Няма да се учудя ако на 16550 е също така. Та затова ги слагам в един кюп.
При мен комуникацията си работи и тия грешки не избиват. Но не мога да оставя траповете отворени. Трябва да има кой да разчисти труповете. И понеже е по изключение, се чудех дали не мога да изключа и включа UART-a. Ама никъде в дейта шита не пише това да рисетва грешките (както например е при пика). Та затова ще се прави поетапно в всеки регистър явно.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Май 12, 2006 2:23 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
разбира се, че има някакво обединяване на източниците за прекъсване. иначе няма да ти стигнат векторите
твоя крижа е, като влезеш в прекъсване да се огледаш от къде ти е дошло (LSR) и да решиш какво да го правиш. ако искаш не го прави нищо, твоя си работа. но трябва да го обработиш.
|
| Пет Май 12, 2006 2:42 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Оооо да. Обработвам го - всичко получено от фрейма в коша и рисет на приемника.
Точно тая комуникация дето правя в момента хич не е капризна. Бавна, спокойна, няма риал тайм.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Май 12, 2006 4:12 pm |
|
|
|
Страница 1 от 1
|
[ 9 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 11 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|