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

    

LPC1768

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

Проблема с 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 байт не передаются

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация