addi II 0 26 января, 2018 Опубликовано 26 января, 2018 · Жалоба Здравствуйте! Проблема с FIFO буфером UART3 Адрес RX и TX совпадают, при передачи данных передаются отчасти приходящие данные Код из примера: #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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 27 января, 2018 Опубликовано 27 января, 2018 · Жалоба Подскажите пожалуйста кто знает как с этим бороться... :smile3046: Только искать баги у себя в ПО или в схемотехнике (вывод TX как-то пролазит на RX). Больше никак. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svss 0 28 января, 2018 Опубликовано 28 января, 2018 · Жалоба Только искать баги у себя ... Больше никак. В-общем, да. Однако можно попробовать задачу изложить поточнее: каким боком участвует FIFO, что обозначает "адрес Rx и Tx совпадают" и что такое "отчасти". В принципе код корректный, и всё должно работать. Для уменьшения нагрузки на CPU нехудо б использовать прерывания. Счётчик прерываний мог бы помочь отлаживать.. А так - нипишИте тест, подключИте осциллограф и найдИте отличие переданного по проволоке от записанного в регистр. Ну и, конечно, упущено объяснение, откуда известно, что данные "передаются отчасти", а не "принимаются не все". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
addi II 0 30 января, 2018 Опубликовано 30 января, 2018 · Жалоба Проверил подключение, все в порядке Снифирил поток данных, в итоге получается следующее - Вместо 10 аски символов передается 2 нуля(аски) и далее самостоятельно(в коде такого разделения нет, просто передаю последовательно 10 байт) 8 оставшихся, но данные берутся с приемного буфера Такое ощущение что проблема как раз с FIFO, я не понимаю как разделять на RXFIFO и TXFIFO... и не понятно почему нет альтернативной передачи одного байта(и приема) без FIFO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 30 января, 2018 Опубликовано 30 января, 2018 · Жалоба я не понимаю как разделять на RXFIFO и TXFIFO Не надо ничего разделять - ваша программа всегда читает RXFIFO и пишет TXFIFO. Писать RXFIFO и читать из TXFIFO физически нельзя. Сами по себе данные из одного FIFO в другое не попадут, ищите ошибки у себя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 31 января, 2018 Опубликовано 31 января, 2018 · Жалоба Такое ощущение что проблема как раз с FIFO, я не понимаю как разделять на RXFIFO и TXFIFO... На моей прошлой работе на LPC17xx сделана была целая линейка устройств и уже лет 8 как продаются. За это время уже много десятков тысяч у заказчиков работают. В каждом - используются все UART-ы. И как-то они годами непрерывно работают без сбоев. И вообще LPC17xx - давно уже стала классикой среди LPC - очень много народу их использовала. И сейчас появляетесь Вы и находите баг в его FIFO. Не находите это странным? и не понятно почему нет альтернативной передачи одного байта(и приема) без FIFO С чего бы нет-то? FIFO там вполне себе отключаемое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 31 января, 2018 Опубликовано 31 января, 2018 · Жалоба Скорее всего человек не чистить фифо перед началом работы, и пока настраивает линию у него наваливается нулей, которые он радостно вычитывает и выдает первыми.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
another_one 0 7 февраля, 2018 Опубликовано 7 февраля, 2018 · Жалоба Скорее всего человек не чистить фифо перед началом работы, и пока настраивает линию у него наваливается нулей, которые он радостно вычитывает и выдает первыми.. Когда отключают fifo, uart вообще не работает, 0x07 в FCR записывают, сейчас данные передаются не полностью, первые 32 байта передались остальные 12 не передаются, такое ощущение что 16 байт глубина стоит(хотя я поставил передачу и приём по одному байту) и пока буфер не накопиться не будет передача.... И когда добавляю до кратного 16 всеравно оставшиеся 12 байт не передаются Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться