Mam problem, który był już poruszany na tym forum, ale nie mogę go przeskoczyć. Próbuję odczytać z RS-a dane (program w avr-gcc).
ATmega32 pracuje z kwarcem 16MHz
Inicjując UARTa ustawiam:
UBRRH = 0x00;
UBRRL = 0x33;
W datasheecie dla prędkości 19200 przy tym kwarcu jest 51 więc w hex jest 33
UCSRB = 0b10010000;
Uruchamiam przerwanie od RXC i włączam odbiornik
UCSRC = 0b10000110;
Najstarszy bit wskazuje na zapis do UCSRC
Praca asynchroniczna
Parzystość NONE
Słowo 8 bitów
1 bit stopu
Procedura przerwania:
SIGNAL (SIG_UART_RECV)
{
tmp = UDR;
PORTB=tmp;
}
zmienna tmp zadeklarowana gdzie indziej
Podaję z prawidłowo skonfigurowanego terminala (19200,8,N,1) dane i albo idą jakieś przypadkowe krzaki, albo w ogóle nic nie odbiera.
Przypuszczam, że problem jest gdzieś w UBRRH, UBRRL, choć jest tak jak w tabeli w datasheecie (sam też to samo wyliczyłem).
Czy ktoś wie o co chodzi ??
Dodano po 37 [minuty]:
Właśnie po kilku zmianach w programie. przez przypadek zauważyłem, że wszystko pięknie działa (nawet z echem z powrotem do terminala) jeśli w terminalu ustawi się 2 razy szzybszą transmisję niż w UART-cie procesora.
Pewnie gdzieś plącze mi się jeszcze jakaś flaga.
ATmega32 pracuje z kwarcem 16MHz
Inicjując UARTa ustawiam:
UBRRH = 0x00;
UBRRL = 0x33;
W datasheecie dla prędkości 19200 przy tym kwarcu jest 51 więc w hex jest 33
UCSRB = 0b10010000;
Uruchamiam przerwanie od RXC i włączam odbiornik
UCSRC = 0b10000110;
Najstarszy bit wskazuje na zapis do UCSRC
Praca asynchroniczna
Parzystość NONE
Słowo 8 bitów
1 bit stopu
Procedura przerwania:
SIGNAL (SIG_UART_RECV)
{
tmp = UDR;
PORTB=tmp;
}
zmienna tmp zadeklarowana gdzie indziej
Podaję z prawidłowo skonfigurowanego terminala (19200,8,N,1) dane i albo idą jakieś przypadkowe krzaki, albo w ogóle nic nie odbiera.
Przypuszczam, że problem jest gdzieś w UBRRH, UBRRL, choć jest tak jak w tabeli w datasheecie (sam też to samo wyliczyłem).
Czy ktoś wie o co chodzi ??
Dodano po 37 [minuty]:
Właśnie po kilku zmianach w programie. przez przypadek zauważyłem, że wszystko pięknie działa (nawet z echem z powrotem do terminala) jeśli w terminalu ustawi się 2 razy szzybszą transmisję niż w UART-cie procesora.
Pewnie gdzieś plącze mi się jeszcze jakaś flaga.