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

Podobne dokumenty