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); }
} //-------------------------------------------------------