Witam.
Mam kod, w którym Atmega ma wysłać na kompa dane dopiero wtedy jak komp wyśle ramkę 0b01111111. Zatrzymanie wystąpi po wysłaniu z kompa 0b00000000 (stan początkowy Atmegi, nic nie wysyła). Komenda 0b1xxxxxxx oznacza odczyt konkretnego urządzenia.
Każda przesłana komenda ustawia odpowiednią flagę, która sygnalizuje działanie.
Odbiór z kompa (Rx) działa w przerwaniu, oto kod:
I po uruchomieniu programu automatycznie następuje wpisanie do flaga wartości 2.
Widać więc, że następuje przerwanie. Dlaczego skoro nic nie wysyłam do procka? Po odpaleniu flaga powinna być równa 0 i program powinien czekać na daną z kompa. A teraz od razu wysyła dane, więc występuje przerwanie.
Czy to wina terminala? Czy terminal po podłączeniu wysyła jakąś daną, która ma na najstarszym bicie 1 i uaktywnia mi flagę?
Gdy wrzucę do przerwania instrukcję wysłania z powrotem zawartości UDR do kompa to w terminalu mam takie wartości:
Skąd przychodzą te dane? Przecież z kompa nic nie wysyłam? I to nie jest z terminala, bo w czasie resetu procka port jest cały czas otwarty, wiec to nie jakieś dane startowe z terminala.
Mam kod, w którym Atmega ma wysłać na kompa dane dopiero wtedy jak komp wyśle ramkę 0b01111111. Zatrzymanie wystąpi po wysłaniu z kompa 0b00000000 (stan początkowy Atmegi, nic nie wysyła). Komenda 0b1xxxxxxx oznacza odczyt konkretnego urządzenia.
Każda przesłana komenda ustawia odpowiednią flagę, która sygnalizuje działanie.
Odbiór z kompa (Rx) działa w przerwaniu, oto kod:
ISR(SIG_UART_RECV)
{
uart_bufor = UDR;
if (uart_bufor == 0x7F)
{
flaga = 1;// start
}
else if ((uart_bufor>>7) == 1)
{
flaga = 2; //odczyt konkretnego urzadzenia
}
else
{
flaga = 0; //stop
}
}
void uart_init(void)
{
UBRRH = (unsigned char) (ZAWARTOSC_UBRR >> 8); //ustawienie prędkości
UBRRL = (unsigned char) ZAWARTOSC_UBRR;
UCSRC = _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0); //8bitowe slowo, bit parzystosci, bit stopu
UCSRB = _BV(RXEN)| _BV(TXEN) | _BV(RXCIE);
}I po uruchomieniu programu automatycznie następuje wpisanie do flaga wartości 2.
Widać więc, że następuje przerwanie. Dlaczego skoro nic nie wysyłam do procka? Po odpaleniu flaga powinna być równa 0 i program powinien czekać na daną z kompa. A teraz od razu wysyła dane, więc występuje przerwanie.
Czy to wina terminala? Czy terminal po podłączeniu wysyła jakąś daną, która ma na najstarszym bicie 1 i uaktywnia mi flagę?
Gdy wrzucę do przerwania instrukcję wysłania z powrotem zawartości UDR do kompa to w terminalu mam takie wartości:
00 F8 00 FC 00 00 00 00 00 00 00 00 00 FC 00 00 .ř.ü.... .....ü..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
00 00 00 00 00 00 00 80 20 00 00 80 40 00 00 40 .......€ ..€@..@
40 40 00 20 00 10 10 00 00 00 04 80 10 10 84 80 @@. .... ...€..„€
00 00 08 08 40 04 04 20 00 22 12 20 02 20 02 20 ....@.. .". . .
12 00 80 90 10 12 48 40 00 40 49 48 40 40 48 08 ..€�..H@ .@IH@@H.
08 08 08 08 08 28 81 A1 A5 05 85 15 05 15 55 55 .....(�ˇ Ą.…...UU
55 55 15 55 55 FD Skąd przychodzą te dane? Przecież z kompa nic nie wysyłam? I to nie jest z terminala, bo w czasie resetu procka port jest cały czas otwarty, wiec to nie jakieś dane startowe z terminala.