Перейти к содержанию
    

Здравствуйте!

Проблема с FIFO буфером UART3

Адрес RX и TX совпадают, при передачи данных передаются отчасти приходящие данные :wacko:

Код из примера:

#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:

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Только искать баги у себя в ПО или в схемотехнике (вывод TX как-то пролазит на RX). Больше никак.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только искать баги у себя ... Больше никак.

В-общем, да.

Однако можно попробовать задачу изложить поточнее: каким боком участвует FIFO,

что обозначает "адрес Rx и Tx совпадают" и что такое "отчасти".

 

В принципе код корректный, и всё должно работать.

Для уменьшения нагрузки на CPU нехудо б использовать прерывания.

Счётчик прерываний мог бы помочь отлаживать..

А так - нипишИте тест, подключИте осциллограф и найдИте отличие переданного по проволоке от записанного в регистр.

 

Ну и, конечно, упущено объяснение, откуда известно, что данные "передаются отчасти", а не "принимаются не все".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверил подключение, все в порядке

Снифирил поток данных, в итоге получается следующее - Вместо 10 аски символов передается 2 нуля(аски) и далее самостоятельно(в коде такого разделения нет, просто передаю последовательно 10 байт) 8 оставшихся, но данные берутся с приемного буфера

Такое ощущение что проблема как раз с FIFO, я не понимаю как разделять на RXFIFO и TXFIFO... и не понятно почему нет альтернативной передачи одного байта(и приема) без FIFO

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я не понимаю как разделять на RXFIFO и TXFIFO

Не надо ничего разделять - ваша программа всегда читает RXFIFO и пишет TXFIFO. Писать RXFIFO и читать из TXFIFO физически нельзя. Сами по себе данные из одного FIFO в другое не попадут, ищите ошибки у себя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такое ощущение что проблема как раз с FIFO, я не понимаю как разделять на RXFIFO и TXFIFO...

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

И сейчас появляетесь Вы и находите баг в его FIFO. Не находите это странным? :biggrin:

 

и не понятно почему нет альтернативной передачи одного байта(и приема) без FIFO

С чего бы нет-то? FIFO там вполне себе отключаемое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего человек не чистить фифо перед началом работы, и пока настраивает линию у него наваливается нулей, которые он радостно вычитывает и выдает первыми..

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего человек не чистить фифо перед началом работы, и пока настраивает линию у него наваливается нулей, которые он радостно вычитывает и выдает первыми..

Когда отключают fifo, uart вообще не работает, 0x07 в FCR записывают, сейчас данные передаются не полностью, первые 32 байта передались остальные 12 не передаются, такое ощущение что 16 байт глубина стоит(хотя я поставил передачу и приём по одному байту) и пока буфер не накопиться не будет передача.... И когда добавляю до кратного 16 всеравно оставшиеся 12 байт не передаются

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...