Witam!
Prosiłbym serdecznie o pomoc bo ten problem zatrzymuje moją pracę nad projektem dyplomowym. Sprawa jest następująca:
mam sobie taką funkcję obsługi przerwania od odbiornika USART:
SIGNAL (SIG_UART_RECV) { USART_odbiornik.buf[USART_odbiornik.wsk++]=UDR; //1
if(USART_odbiornik.wsk>USART_RX_buf_stop) //2 { PORTB|=(1<<CTS); //3 USART_odbiornik.buf_full=1; //4 USART_odbiornik.wsk=0; //5 } }
Jak widać USART_odbiornik.wsk wskazuje na miejsce w buforze, pod które wpisywany jest odebrany znak. USART_RX_buf_stop - po przekroczeniu tej wartości przez USART_odbiornik.wsk - wystawiam CTS, co powinno zatrzymywać transmisję do momentu gdy jej nie zwolnię w programie głównym. Wszystko działa dobrze, gdy mam linię nr 5. Jeśli ją usunę - program nie wstrzymuje mi transmisji i tracę bajty.
Dodam, że zależy mi na tym, aby zmienną USART_odbiornik.wsk zerować w programie głównym, zaraz po odczycie bufora. Dzięki temu zabezpieczam się przed sytuacją, gdy pomimo ustawienia linii CTS - PC nadal wysyła dane, które ma w wewnętrznym buforze.
Bardzo proszę o pomoc bo nie to nie obsługa UART'a jest moim głównym zadaniem a zatrzymało mnie to na dobre i nie mam pomysłów co jest nie tak.
Dziękuję Pozdrawiam