RTV forum PL | NewsGroups PL

Jak zaimplementować obsługę linii CTS w USART w języku C?

USART biblioteki w C

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zaimplementować obsługę linii CTS w USART w języku C?

Krzysztof
Guest

Sun Mar 12, 2006 2:02 pm   



Witam!

Piszę w związku z moim wątkiem na temat problemów z USART'em.
Może w takim razie ktoś zna jakieś gotowe funkcje z obsługą linii CTS/RTS ??

Głównie chodzi mi tu o linię CTS, która wstrzymywałaby transmisję z
komputera, jeśli bym sobie tego zażyczył.

Krzysztof
Guest

Sun Mar 12, 2006 2:58 pm   



Witam ponownie!

Czy ktoś wie jak zachowuje się układ FTDI232BM przy sprzętowym sterowaniu
przepływem?
Mam następujące funkcje obsługi UARTA. W momencie, gdy wysyłam bajt po
bajcie z terminala, wszystko jest OK.
Gorzej jest, jeśli próbuję wysłać cały plik. Gdy ma on do 1k objętości
wszystko wydaje się w porządku.
Jednak nie do końca bo terminal odbiera to co przed chwilą wysłał dopiero po
wysłaniu całego pliku.
W momencie gdy próbuję wysłać i odebrać 10k plik - terminal odbiera tylko
mniej więcej połowę danych.
Widzę więc, że problem polega chyba na tym, że terminal nie może
jednocześnie nadawać i odbierać.

Dodam, że nie steruję linią RTS, tylko samą CTS no i używam chipu FTDI. Nie
jestem pewien czy bez niego
będzie dziać się tak samo.

To co chcę uzyskać to wstrzymywanie transmisji z komputera, zanim obrobię
dane odebrane w procku.
Pomysł swój opieram na projekcie z Elektroniki Praktycznej 3/2005 (modem
bezprzewodowy), gdzie rozwiązano
to w taki sam sposób. Niestety nie mam kodu źródłowego do tego projektu i
nie wiem jak dokładnie to rozwiązano.

Będę baaaardzo wdzięczny za pomoc!!!!!!


//-------------------------------------------------------
SIGNAL (SIG_UART_DATA)
{
if(USART_nadajnik.wsk>=USART_nadajnik.ilosc_danych)
{
USART_TX_OFF;
USART_nadajnik.zajety=0;
}
else
{
UDR=USART_nadajnik.buf[USART_nadajnik.wsk];
USART_nadajnik.wsk++;
}
}
//-------------------------------------------------------

//-------------------------------------------------------
SIGNAL (SIG_UART_RECV)
{
USART_odbiornik.buf[USART_odbiornik.wsk]=UDR;

USART_odbiornik.wsk++;

if(USART_odbiornik.wsk>USART_RX_buf_stop)
{
PORTB|=(1<<CTS);
USART_odbiornik.buf_full=1;
}
}
//-------------------------------------------------------


//-------------------------------------------------------
while(1)
{

if(USART_odbiornik.buf_full)
{
delay_ms(100);
USART_odbiornik.buf_full=0;
for(test1=0;test1<USART_odbiornik.wsk;test1++)
{
USART_nadajnik.buf[test1]=USART_odbiornik.buf[test1];
}
USART_nadajnik.ilosc_danych=USART_odbiornik.wsk;
USART_nadajnik.zajety=1;
USART_nadajnik.wsk=0;
USART_TX_ON;
PORTB|=(1<<RTS);
while(USART_nadajnik.zajety)
{
}

USART_TX_ON;
USART_odbiornik.wsk=0;
PORTB&=~(1<<CTS);
}

}
//-------------------------------------------------------

Adam Dybkowski
Guest

Sun Mar 12, 2006 8:21 pm   



Krzysztof napisał(a):

Quote:
Czy ktoś wie jak zachowuje się układ FTDI232BM przy sprzętowym sterowaniu
przepływem?

Gdy zablokujesz nadawanie danych, z peceta przychodzi jeszcze od kilku
do kilkunastu znaków. Musisz być na to przygotowany i już.

Quote:
Mam następujące funkcje obsługi UARTA. W momencie, gdy wysyłam bajt po
bajcie z terminala, wszystko jest OK.
Gorzej jest, jeśli próbuję wysłać cały plik. Gdy ma on do 1k objętości
wszystko wydaje się w porządku.
Jednak nie do końca bo terminal odbiera to co przed chwilą wysłał dopiero po
wysłaniu całego pliku.

Zmień terminal. Chyba musisz korzystać z badziewnego HyperTerminala aby
otrzymywać takie wyniki.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Adam Dybkowski
Guest

Sun Mar 12, 2006 8:40 pm   



Krzysztof napisał(a):

Quote:
Zmień terminal. Chyba musisz korzystać z badziewnego HyperTerminala aby
otrzymywać takie wyniki.

Sprawdzałem już kilka - to samo!

No to czas napisać swój własny. Smile
Na start proponuję przejrzenie kodu źródłowego TeraTerm'a - jest tego
trochę.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zaimplementować obsługę linii CTS w USART w języku C?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map