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

 
 
> Предача данных по RS485 c LPC2214
vesago
сообщение Mar 16 2006, 15:43
Сообщение #1


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Посоветуйте как мне обмениваться данными через 485 интерфейс. По привычке разрешение приема в драйвере посадил на землю - соответсвенно прием всегда идет. В 8-ми битниках при передаче всегда отключал приемник и проблем не было. В LPC такое не прокатило - отключаешь фифо соответственно передача прекращается. Как народ поступает в данном случае? Передача и прием ведутся через кольцевые буферы с которыми и сонованя прога работает. Может как-то извернуться не на уровне железа?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vesago
сообщение Mar 17 2006, 08:16
Сообщение #2


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



2 Andy Mozzhevilov А какие ошибки кроме памяти - будьте так любезны? К сожалению опытная партия уже производится. В плате в принципе можно порезать дороги/проводками соединить. Многие я видел приемник драйвера 485 интерфейса включают постоянно - то есть управляющую ногу садят на землю. Предполагаю, что это действительно делается, как сказал Alex03, для контроля передачи. В общем спасибо за советы - буду перед передачей отключать прерывание на прием, а перед разрешением читать U0LSR и сбрасывать буфер приема. Кстати, немаловажный момент, получается, что отключить передатчик драйвера 485 в обработчике прерывания уарта нельзя, так как он контролирует освобождение буфера, но не сдвигового регистра. То есть приведенный код постоянно должен крутиться в основном цикле. Правильно я понимаю?

void UART0_CheckBuferEmty(void)
{
if(uart0.flags.tx_in_progress == 0)
{
if(U0LSR & (1<<U0LSR_TEMT_BIT))
{
IO0CLR |= (1<<RS485_TX); //Отключим передатчик RS485
U0IER |= (1<<U0IER_RBR_Interrupt_Enable_BIT);
U0FCR |= (1<<U0FCR_Rx_FIFO_Reset_BIT);
}
}
}
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Mar 17 2006, 09:17
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(vesago @ Mar 17 2006, 13:16) *
2 Andy Mozzhevilov А какие ошибки кроме памяти - будьте так любезны?


По своему опыту скажу, что при первом проходе платы обычно вылавливается 3-5 ошибок и/или пожеланий. Для начала производства требуется 2-3 прохода. Так что не расстраивайтесь.


Цитата
Кстати, немаловажный момент, получается, что отключить передатчик драйвера 485 в обработчике прерывания уарта нельзя, так как он контролирует освобождение буфера, но не сдвигового регистра. То есть приведенный код постоянно должен крутиться в основном цикле. Правильно я понимаю?

Код
void UART0_CheckBuferEmty(void)
{
    if(uart0.flags.tx_in_progress == 0)
    {
        if(U0LSR & (1<<U0LSR_TEMT_BIT))
        {
            IO0CLR |= (1<<RS485_TX);        //Отключим передатчик RS485
                           U0IER |= (1<<U0IER_RBR_Interrupt_Enable_BIT);
                           U0FCR |= (1<<U0FCR_Rx_FIFO_Reset_BIT);
        }
    }            
}


предостерегу вас сразу от ошибки, связанной с оперированием регистром FCR:
http://electronix.ru/forum/index.php?showtopic=8032&hl=FCR

А так, я сейчас на вскидку не вспомню, в какой момент устанавливается THRE.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 16:59
Рейтинг@Mail.ru


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