W11: Wbudowane układy komunikacyjne i ich protokoły cz. 2
Transkrypt
W11: Wbudowane układy komunikacyjne i ich protokoły cz. 2
Wbudowane układy komunikacyjne cz. 2 Wykład 11 Techniki mikroprocesorowe Wbudowane układy komunikacyjne USART 2 Techniki mikroprocesorowe USART • USART (Universal Synchronous and Asynchronous Receiver and Transmitter) to dwukierunkowa asynchroniczna magistrala szeregowa zgodna z RS-232 • Procesory AVR posiadają pełne wsparcie dla trybu full duplex • Układ peryferyjny USART może pracować w trybie synchronicznym lub asynchronicznym • Może pracować w trybie komunikacji wieloprocesorowej • Pracuje w trybie 5V – wymaga konwertera poziomów do komunikacji z PC, posiada sprzętową obsługę linii Tx i Rx 3 Techniki mikroprocesorowe USART - ramka 4 Techniki mikroprocesorowe USART - inicjalizacja • Ustawienie parametrów transmisji – Bit startu: zawsze 1 – Bity danych: 5, 6, 7, 8 lub 9 – Bit parzystości: brak, parzystość, nieparzystość – Bity stopu: 1 lub 2 – Prędkość transmisji 5 Techniki mikroprocesorowe USART – implementacja w AVR 6 Techniki mikroprocesorowe Moduł USART - przerwania • Przerwanie po odebraniu bajtu • Przerwanie po wysłaniu bajtu • Przerwanie na gotowość do wysłania kolejnego bajtu 7 Techniki mikroprocesorowe Moduł USART – wzory 8 Techniki mikroprocesorowe Moduł USART • Przy doborze częstotliwości taktującej mikrokontroler w przypadku korzystania z modułu USART należy brać pod uwagę różnicę między rzeczywistą prędkością transmisji (otrzymaną ze wzorów) z zakładaną. Różnica większa niż 2% uniemożliwi transmisję. BaudRate najblizszy_ pasujacy 100% Error[%] BaudRate rzeczywisty 9 Techniki mikroprocesorowe Moduł USART - rejestry • UDR: rejestr nadawczo/odbiorczy. Zapis do niego powoduje wysłanie danych. • UCSRA: – RXC: flaga zakończenia odbioru przez odbiornik – TXC: flaga zakończenia wysyłania przez nadajnik – UDRE: flaga gotowości rejestru UDR na przyjęcie kolejnego bajta do wysłania – FE: flaga błędu odbioru – DOR: flaga przepełnienia bufora odbiorczego 10 Techniki mikroprocesorowe Moduł USART - rejestry • UCSRA – c.d.: – PE: flaga błędu parzystości (w przypadku włączonej kontroli parzystości) – U2X: 1 - w trybie asynchronicznym podwojenie prędkości transmisji – MPCM: 1 – tryb komunikacji wieloprocesorowej • UCSRB: – RXCIE: 1 – włączenie przerwania po odebraniu danych 11 Techniki mikroprocesorowe Moduł USART - rejestry • UCSRB – c.d.: – TXCIE: 1 – włączenie przerwania po wysłaniu danych – UDRIE: 1 – włączenie przerwania po zwolnieniu się rejestru UDR – RXEN: 1 – włączenie modułu odbiorczego – TXEN: 1 – włączenie modułu nadawczego – UCSZ2: rozmiar danych do wysłania – RXB8: dziewiąty bit odebranych danych dla trybu 9-bitowego Techniki mikroprocesorowe 12 Moduł USART - rejestry • UCSRB – c.d.: – TXB8: dziewiąty bit wysyłanych danych w trybie 9bitowym • UCSRC: – URSEL: wybór między rejestrem UCSRC i UBRRH, mającymi taką samą lokalizację I/O. 1 – UCSRC, 0 – UBRRH – UMSEL: tryb pracy, 1 – tryb synchroniczny, 0 – tryb asynchroniczny 13 Techniki mikroprocesorowe Moduł USART - rejestry • UCSRC – c.d.: – UPM: ustawienia parzystości UPM1 UPM0 Parzystość 0 0 Wyłączona 0 1 Zarezerwowane 1 0 Włączona, parzystość 1 1 Włączona, nieparzystość – USBS: liczba bitów stopu, 0 – jeden bit, 1 – dwa bity stopu 14 Techniki mikroprocesorowe Moduł USART - rejestry • UCSRC – c.d.: – UCSZ1 i UCSZ0: pozostałe 2 bity określające rozmiar danych UCSZ2 UCSZ1 UCSZ0 Rozmiar danych 0 0 0 5-bit 0 0 1 6-bit 0 1 0 7-bit 0 1 1 8-bit 1 0 0 Zarezerwowane 1 0 1 Zarezerwowane 1 1 0 Zarezerwowane 1 1 1 9-bit Techniki mikroprocesorowe 15 Moduł USART - rejestry • UCSRC – c.d.: – UCPOL: polaryzacja zegara USART (tylko tryb synchroniczny) UCPOL Wysyłanie kolejnych danych (pin wyjściowy TxD) Próbkowanie podczas odbioru (pin wejściowy RxD) 0 Zbocze narastające zegara Zbocze opadające zegara 1 Zbocze opadające zegara Zbocze narastające zegara 16 Techniki mikroprocesorowe Moduł USART - rejestry • UBRR (UBRRH i UBRRL): – URSEL: wybór rejestru UBRRH i UCSRC (patrz: rejestr UCSRC) – UBRR11..0: wybór prędkości transmisji 17 Techniki mikroprocesorowe 1-Wire 1-Wire 18 Techniki mikroprocesorowe 1-Wire • Jednoprzewodowa, dwukierunkowa, asynchroniczna magistrala komunikacyjna opracowana przez firmę Dallas • Możliwość podłączenia dowolnej liczby urządzeń • Zasilanie przez linię danych (większość układów posiada możliwość podłączenia zewnętrznego zasilania w przypadku długiej linii lub dużej liczby urządzeń podłączonych do magistrali) • Zaimplementowany mechanizm eliminacji kolizji oraz wyszukiwania układów 19 Techniki mikroprocesorowe 1-Wire • Każdy układ jest identyfikowany przez unikalny w skali świata numer seryjny • Niewielka prędkość transmisji (ok. 16 kbps w trybie regular, do 115,2 kbps w trybie overdrive) • Większość układów wspierających 1-Wire to układy czujnikowe (np. termometry) i pamięci (tylko do odczytu lub z możliwością zapisu) • Brak implementacji sprzętowej w procesorach AVR, korzysta się z implementacji programowej 20 Techniki mikroprocesorowe 1-Wire - operacje • Reset magistrali (RESET) • Wyszukiwanie układów (SEARCH_ROM) • Wybór układu na podstawie adresu (MATCH_ROM) • Anulowanie wyboru układu (SKIP_ROM) • Odczyt danych (READ) • Zapis danych (WRITE) 21 Techniki mikroprocesorowe 1-Wire - implementacja • Przykładem w pełni funkcjonalnej implementacji programowej 1-Wire jest biblioteka Mika Roddewiga http://www.dietfig.org/avronewire.html 22 Techniki mikroprocesorowe 1-Wire - implementacja • Przykładowa konfiguracja portu #define #define #define #define DALLAS_PORT DALLAS_PORT_IN DALLAS_DDR DALLAS_PIN PORTC PINC DDRC 0 • Tablica identyfikatorów układów #define DALLAS_NUM_DEVICES 1 • Deklaracja częstotliwości CPU #define F_CPU 1000000UL // 1 MHz 23 Techniki mikroprocesorowe 1-Wire - implementacja • Deklaracja struktur typedef struct { uint8_t identifier[DALLAS_NUM_IDENTIFIER_B ITS / 8];} DALLAS_IDENTIFIER_t; typedef struct { DALLAS_IDENTIFIER_t identifiers[DALLAS_NUM_DEVICES]; uint8_t num_devices;} DALLAS_IDENTIFIER_LIST_t; 24 Techniki mikroprocesorowe 1-Wire - implementacja // wysyła bajt void dallas_write_byte(uint8_t); // wysyła określoną liczbę bajtów z bufora void dallas_write_buffer(uint8_t * buffer, uint8_t buffer_length); // odczytuje bajt uint8_t dallas_read_byte(void); // odczytuje określoną liczbę bajtów do bufora void dallas_read_buffer(uint8_t * buffer, uint8_t buffer_length); 25 Techniki mikroprocesorowe 1-Wire - implementacja // Resetuje magistralę. Zwraca // 1 – jeśli odpowiedział choć jeden układ // 0 – w przeciwnym razie uint8_t dallas_reset(void); // włącza zasilanie magistrali (max 40 mA). void dallas_drive_bus(void); // Wysyła sygnał SKIP_ROM i resetuje magistralę void dallas_skip_rom(void); 26 Techniki mikroprocesorowe 1-Wire - implementacja // Przeszukuje magistralę. Zwraca // 0 – jeśli nie znaleziono żadnego układu // 1 – w przypadku błędu // 2 - if there were more devices than specified by DALLAS_NUM_DEVICES uint8_t dallas_search_identifiers(void); // Zwraca listę identyfikatorów DALLAS_IDENTIFIER_LIST_t * get_identifier_list(void); 27 Techniki mikroprocesorowe 1-Wire – topologia 28 Techniki mikroprocesorowe 1-Wire – schemat 29 Techniki mikroprocesorowe 1-Wire – wykresy czasowe 30 Techniki mikroprocesorowe 1-Wire – legenda do wykresów Parametr A B C D E F G H I J Tryb regular(µs) 6 64 60 10 9 55 0 480 70 410 Tryb overdrive(µs) 1.0 7.5 7.5 2.5 1.0 7 2.5 70 8.5 40 31 Techniki mikroprocesorowe 1-Wire – przykładowy scenariusz MATCH_ROM(adres) WRITE(komenda) READ(byte0) … READ(byteN) SKIP_ROM 32 Techniki mikroprocesorowe