Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите пожалуйста разобраться с TL16C550...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ASergej_R19
Никак не могу наладить прием. Имеется проц с TL16C550 - подключен стандартно (разве что ADS соединен с CS).

Выставил trigger level для FIFO = 4 байта. При приеме этих 4 байт вызывается прерывание, там мы смотрим, что вызвало прерывание - если прием данных (или таймаут) - то читаем LSR (смотрим есть ли хоть один байт в FIFO), и потом читаем RBR и так до тех пор, пока LSR не покажет, что больше байт в FIFO нет (бит 0 не сбросится). Выходим из прерывания. И так далее...

Все хорошо, но такой глюк - если хотим принять больше 17 байт, то принимаем эти 17 байт, после чего прием обрывается, и прерывание не сбрасывается в районе 8 мс (скорость обмена = 115200). После этого все восстанавливается и мы опять можем принять эти 17 байт. Ошибок LSR, вроде никаких не показывает...

Такое ощущение, что заполняется полностью FIFO и что-то происходит непонятное. Но я же регулярно читаю RBR - как такое может быть? Ничего не понимаю... :-( Может кто чего подскажет?
KRS
А как у вас тайминги шины настроены?
У тексаса шина этих уартов довольно тормознутая. ( Мы перешли на аналогичные филипсы у них этой проблемы нет а совместимы они даже по ногам). Правда используем 16C75x серию с 64 байтным фифо.
И еще есть в даашите такой
NOTE 8:In the FIFO mode, the read cycle (RC) = 425 ns (min) between reads of the receive FIFO and the status registers (interrupt identification
register or line status register).

Для вашего случая тоже есть у филипса SC16C550b один в один с тексасовским, только к атмелу можно без wait state подключать и не думать где NOP вставлять.
ASergej_R19
Цитата(KRS @ Feb 14 2008, 11:49) *
А как у вас тайминги шины настроены?
У тексаса шина этих уартов довольно тормознутая. ( Мы перешли на аналогичные филипсы у них этой проблемы нет а совместимы они даже по ногам). Правда используем 16C75x серию с 64 байтным фифо.
И еще есть в даашите такой
NOTE 8:In the FIFO mode, the read cycle (RC) = 425 ns (min) between reads of the receive FIFO and the status registers (interrupt identification
register or line status register).

Для вашего случая тоже есть у филипса SC16C550b один в один с тексасовским, только к атмелу можно без wait state подключать и не думать где NOP вставлять.


Тайминги - собственно циклы чтения/записи ~100 ns, между циклами такие же простои. Про филипсы - эх, знал бы раньше... А сейчас уже с этих TL не слезешь... :-(

Действительно, эту NOTE 8, я пропустил - напихал сейчас везде NOP'ов перед каждым обращением к TL - ноль эмоций. Характер глюка не поменялся... Разве что могу еще добавить, что когда принимаются эти 17 байт и "залипает" прерывание, то после этого (когда прерывание сбрасывается), через некоторое время один раз вызывается прерывание, что типа регистр передачи - пуст, хотя никакой передачи не было...
Может еще какие-нибудь идеи есть? Попробую пока поиграться с таймингами...
KRS
Еще можно побробовать настроить прерывание не по уровню, а по фронту. (в атмеле)
ASergej_R19
Цитата(KRS @ Feb 14 2008, 13:29) *
Еще можно побробовать настроить прерывание не по уровню, а по фронту. (в атмеле)


Спасибо - нет дело оказалось не в этом...
Я нашел ошибку в коде - я просто клинический идиот.
WHALE
Ну не огорчайтесь так.ИМХО в ситуации,сходной с вашей,были многие их форумчан smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.