реклама на сайте
подробности

 
 
> RS485 на LPC2366
Yaumen
сообщение Sep 24 2010, 08:01
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Кажется простейшая задача, которую когда-то легко и просто решалась на 51-х процессорах, с LPC поставила меня в тупик.
Проблема состоит в том, чтобы вычислить момент переключения полудуплексный приемо-передатчик RS485 в режим приема после окончания передачи.

Попробую описать упрощенно алгоритм работы:

1. Включаю режим передачи микросхемы RS485
CODE
TxEnable();


2. Заполняю буфер FIFO передатчика данными, но не более 16-ти:
CODE
RemainDataCount -= byCount; //Запоминаем количество еще не переданных данных
while (byCount)
{
U2THR = *lpData++;
byCount--;
} //while


3. В обработчике прерывания обрабатываю THE прерывание:
CODE
BYTE IIRValue = U2IIR;
if((IIRValue & 0x0E) == 2)
{
// ПЕРЕДАЮЩИЙ БУФЕР ПУСТ
DWORD dwLSRValue = U2LSR; /* Check status in the LSR to see if valid data in U0THR or not */
if (dwLSRValue & 0x20)
DataSent(); //Отправляем следующий байт
}


4. Анализирую количество оставшихся данных на передачу и подгружаю следующий 1 байт на передачу или завершаю передачу
CODE
DataSent()
{
if (RemainDataCount != 0)
{
U2THR = *lpData++;
RemainDataCount--;
}
else
{
while(!(U2LSR & 0x40)); //Дожидаюсь когда же опустеет передатчик (U2THR и U2TSR пусты)
DisableTx(); //Выключаю приемопередатчик RS485
}
}


Так вот, теперь о проблеме. Если закомментировать DisableTx() и пройтись по шагам, то все передается нормально, но если запустить вышеприведенный код, то посылка обрезается.
Что я делаю не так?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.02892 секунд с 7
ELECTRONIX ©2004-2016