Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC1768
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
addi II
Здравствуйте!
Проблема с FIFO буфером UART3
Адрес RX и TX совпадают, при передачи данных передаются отчасти приходящие данные wacko.gif
Код из примера:
Код
#define THRE (1<<5) // Transmit Holding Register Empty
void U0Write(char data)
{
     while ( !(U0LSR & THRE ) ); // wait till the THR is empty
     // now we can write to the Tx FIFO
     U0THR = data;
}


Подскажите пожалуйста кто знает как с этим бороться... smile3046.gif

jcxz
Цитата(addi II @ Jan 26 2018, 23:22) *
Подскажите пожалуйста кто знает как с этим бороться... smile3046.gif

Только искать баги у себя в ПО или в схемотехнике (вывод TX как-то пролазит на RX). Больше никак.
svss
Цитата(jcxz @ Jan 27 2018, 19:03) *
Только искать баги у себя ... Больше никак.

В-общем, да.
Однако можно попробовать задачу изложить поточнее: каким боком участвует FIFO,
что обозначает "адрес Rx и Tx совпадают" и что такое "отчасти".

В принципе код корректный, и всё должно работать.
Для уменьшения нагрузки на CPU нехудо б использовать прерывания.
Счётчик прерываний мог бы помочь отлаживать..
А так - нипишИте тест, подключИте осциллограф и найдИте отличие переданного по проволоке от записанного в регистр.

Ну и, конечно, упущено объяснение, откуда известно, что данные "передаются отчасти", а не "принимаются не все".
addi II
Проверил подключение, все в порядке
Снифирил поток данных, в итоге получается следующее - Вместо 10 аски символов передается 2 нуля(аски) и далее самостоятельно(в коде такого разделения нет, просто передаю последовательно 10 байт) 8 оставшихся, но данные берутся с приемного буфера
Такое ощущение что проблема как раз с FIFO, я не понимаю как разделять на RXFIFO и TXFIFO... и не понятно почему нет альтернативной передачи одного байта(и приема) без FIFO
aaarrr
Цитата(addi II @ Jan 31 2018, 01:17) *
я не понимаю как разделять на RXFIFO и TXFIFO

Не надо ничего разделять - ваша программа всегда читает RXFIFO и пишет TXFIFO. Писать RXFIFO и читать из TXFIFO физически нельзя. Сами по себе данные из одного FIFO в другое не попадут, ищите ошибки у себя.
jcxz
Цитата(addi II @ Jan 31 2018, 00:17) *
Такое ощущение что проблема как раз с FIFO, я не понимаю как разделять на RXFIFO и TXFIFO...

На моей прошлой работе на LPC17xx сделана была целая линейка устройств и уже лет 8 как продаются. За это время уже много десятков тысяч у заказчиков работают. В каждом - используются все UART-ы. И как-то они годами непрерывно работают без сбоев. И вообще LPC17xx - давно уже стала классикой среди LPC - очень много народу их использовала.
И сейчас появляетесь Вы и находите баг в его FIFO. Не находите это странным? biggrin.gif

Цитата(addi II @ Jan 31 2018, 00:17) *
и не понятно почему нет альтернативной передачи одного байта(и приема) без FIFO

С чего бы нет-то? FIFO там вполне себе отключаемое.
Golikov A.
Скорее всего человек не чистить фифо перед началом работы, и пока настраивает линию у него наваливается нулей, которые он радостно вычитывает и выдает первыми..
another_one
Цитата(Golikov A. @ Jan 31 2018, 22:01) *
Скорее всего человек не чистить фифо перед началом работы, и пока настраивает линию у него наваливается нулей, которые он радостно вычитывает и выдает первыми..

Когда отключают fifo, uart вообще не работает, 0x07 в FCR записывают, сейчас данные передаются не полностью, первые 32 байта передались остальные 12 не передаются, такое ощущение что 16 байт глубина стоит(хотя я поставил передачу и приём по одному байту) и пока буфер не накопиться не будет передача.... И когда добавляю до кратного 16 всеравно оставшиеся 12 байт не передаются
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.