Przetrzepałem już cały internet w poszukiwaniu informacji co się dokładnie dzieje przy odbiorze danych przez AVR.
Ogólnie mam projekt w którym programowo generuje PWM na 84 pinach (atmega2560). Zależy mi na odbiorze dancyh w locie generowania sygnału PWM, czyli bez przerwań, opóźnień itp.
Program będę pisał w BASCOMie. Odbierane dane przez UART traktuję jako wartości bitowe, nie jako znaki.
Teraz do sedna.
Jedna ramka ma 8 miejsc danych (8 bajtów), każdy po 8 bitów (0-255) (nie liczę bajtu startu, stopu i parzystości).
I teraz pytanie co się dzieje, gdy ramka przychodzi do AVR? Cała ramka (8 bajtów) jest wpisywanych do rejestru cyklicznego, czy jakiegoś tam, czy tylko jeden bajt jest wpisywany do rejestru cyklicznego a potem przepisywane do UDR? Czy może dane od razu trafiają do UDR.
Mało tego, gdzieś wyczytałem, że bufor wynosi 3 bajty, a na dobrą sprawę to 1 bajt. O.o
Dalej, jeśli dane są już gotowe do odczytania przez program (odebrane) w rejestrze, to jest ustawiana jakaś flaga.
Tylko czy ta flaga jest ustawiana po odebraniu jednego bajtu, czy całej ramki (8 bajtów).
Dalej
Prędkość transmisji określa się w bodach na sekundę (czyli w bitach na sekundę). Jeśli mamy np 115200b/s, to to jest 115200 bitów na sekundę, tylko czy w to wliczane są bity stopu, startu i parzystości?
Bo zastanawiam się, czy przy funkcji ischarwiating() i inkey() i zewnętrznym kwarcu 22,1184MHz procek wyrobi z odczytem danych po jednym bajcie (bo inkey() obiera jeden bajt i go wywala z rejestru UDR, a poprzednie się przesuwają 'do przodu').
Jeśli mam np. program terminal v1.9b i wyślę za pomocą jego np. 0xF0, to on lub komputer wyśle ten bajt jako ramkę jedno-bajtową, czy jako ramkę 8 bajtową, z czego pozostałe będą wypełnione 0x00?
Przepraszam ja taką palplaninę i haos, ale chcę w końcu raz na zawsze rozprawić się z komunikacją szeregową, bo nie jest ona jakoś skomplikowana, tylko, że brak jakiejś konkretnej wiedzy na ten temat.
Pozdrawiam
