Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Uniwersalny interfejs szeregowy (ang. Universal Serial Interface, USI), udostępnia podstawowe funkcje sprzętowe potrzebne do komunikacji szeregowej. W połączeniu z minimalnymi wymogami sterowania programowego, USI pozwala na znacząco wyższe szybkości przesyłania danych i zużycie mniejszej przestrzeni programu niż rozwiązania oparte jedynie na oprogramowaniu. Dostępne są przerwania w celu zmniejszenia obciążenia mikroprocesora. Głównymi cechami USI są:
Interfejs USI wykorzystuje następujące końcówki mikrokontrolera ATtiny24/44/84:
Na poniższym rysunku przedstawiony jest uproszczony schemat blokowy USI:
8-bitowy rejestr danych USI (ang. 8-bit USI Data Register, USIDR) zawiera nadchodzące i wychodzące dane. Jest on bezpośrednio dostępny poprzez magistralę danych, lecz kopia jego zawartości jest również umieszczana w rejestrze bufora USI (ang. USI Buffer Register, USIBR), skąd może być odczytana później. Jeśli rejestr USIDR jest odczytywany bezpośrednio, to należy to wykonać z największą możliwą szybkością, aby uniknąć utraty danych.
Najbardziej znaczący bit rejestru danych USI połączony jest do jednej z dwóch końcówek wyjściowych (w zależności od trybu konfiguracji, zobacz do rozdziału "Komparator analogowy"). Pomiędzy wyjściem rejestru danych USI a końcówką wyjściową znajduje się przerzutnik latch, który opóźnia zmianę wyjścia danych do pojawienia się przeciwnego zbocza zegara do zbocza używanego do próbkowania wejścia danych. Wejscie szeregowe jest zawsze próbkowane z końcówki DI (ang. Data Input, wejście danych) bez względu na konfigurację.
4-bitowy licznik można zapisywać i odczytywać poprzez magistralę danych i może on generować przerwanie przy przepełnieniu. Rejestr szeregowy oraz ten licznik są wspólnie taktowane z tego samego źródła zegarowego. Pozwala to licznikowi zliczać liczbę bitów odebranych lub wysłanych oraz generować przerwanie, gdy przesył zostanie zakończony. Zauważ, iż przy wyborze zewnętrznego źródła zegara licznik zlicza oba zbocza zegarowe. W tym przypadku licznik zliczy liczbę zboczy, a nie liczbę bitów. Zegar można wybrać z trzech różnych źródeł: końcówki USCK, przepełnienia timera 0 lub z programu.
Moduł sterujący zegarem dla trybu 2-przewodowego może generować przerwanie, gdy na magistrali 2-przewodowej zostanie wykryty stan startu. Może on również generować cykle oczekiwania przez wymuszenie stanu niskiego na końcówce zegarowej po wykryciu stanu startu lub po przepełnieniu licznika.
Tryb 3-przewodowy interfejsu USI jest zgodny z trybami 0 i 1 interfejsu SPI (ang. Serial Peripheral Interface), lecz nie posiada funkcji końcówki wyboru układu slave (ang. Slave Select, SS). Jednakże w razie konieczności można to zaimplementować programowo. Nazwy końcówek używanych w tym trybie to: DI (ang. Data Input, wejście danych), DO (ang. Data Output, wyjście danych) i USCK (ang. USI Serial ClocK, zegar szeregowy USI).
Rysunek powyżej pokazuje dwie jednostki USI współpracujące w trybie 3-przewodowym (ang. Three-wire mode), Jedna jest jednostką nadrzędną Master, a druga jest jednostką podporządkowaną Slave. Dwa rejestry przesuwające są ze sobą połączone w taki sposób, iż po ośmiu taktach zegara USCK dane w każdym z tych rejestrów zostaną wzajemnie wymienione. Ten sam zegar zwiększa również stan 4-bitowego licznika USI. Znacznik przerwania przy przepełnieniu licznika (ang. Counter Overflow interrupt Flag, USIOIF) można wtedy wykorzystać do określenia, czy przesył został zakończony. Zegar jest generowany przez urządzenie Master za pomocą zmian stanu końcówki USCK poprzez rejestr portu lub zapis jedynki do bitu USITC w rejestrze USICR.
Powyższy rysunek przedstawia wykres czasowy sygnałów w trybie 3-przewodowym. Na samej górze znajduje się informacja o cyklach. W każdym z tych cykli jeden bit jest wsuwany do rejestru przesuwającego USI (USIDR). Wykres czasowy sygnału USCK jest pokazany dla obu trybów zegara zewnętrznego. W trybie 0 zegara zewnętrznego (ang. External Clock mode 0, USICS0 = 0), końcówka DI jest próbkowana przy dodatnich zboczach, a końcówka DO zmienia stan (zawartość rejestru danych przesuwa się o 1 pozycję) przy zboczach ujemnych. Tryb 1 zegara zewnętrznego (ang. External Clock mode 1, USICS0 = 1) używa zboczy w sposób przeciwny do trybu 0, tj. dane są próbkowane przy zboczach ujemnych, a wyjście zmienia się przy zboczach dodatnich. Tryby zegarowe USI odpowiadają trybom danych 0 i 1 SPI.
Zgodnie z powyższym wykresem czasowym, przesył po magistrali wymaga następujących kroków:
Poniższy kod demonstruje sposób użycia modułu USI jako SPI Master:
Przykład w kodzie maszynowym |
SPITransfer: out USIDR,r16 ldi r16,(1<<USIOIF) out USISR,r16 ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC) SPITransfer_loop: out USICR,r16 sbis USISR,USIOIF rjmp SPITransfer_loop in r16,USIDR ret |
Kod został zoptymalizowany na rozmiar i używa tylko ośmiu instrukcji (+ ret). Przykład ten zakłada, iż końcówki DO i USCK zostały ustawione jako wyjścia w rejestrze DDRB. Wartość umieszczona w rejestrze r16 przed wywołaniem tej funkcji jest przesyłana do urządzenia Slave, a gdy przesłanie się zakończy, dane odczytane z układu Slave są z powrotem umieszczane w rejestrze r16.
Druga i trzecia instrukcja zeruje znacznik przepełnienia licznika USI oraz zawartość tego licznika. Czwarta i piąta instrukcja ustawia tryb 3-przewodowy, dodatnie zbocze dla zegara rejestru przesuwającego, zliczanie przy strobie USITC oraz zmienia na przeciwny stan wyjścia USCK. Pętla wykonywana jest 16 razy.
Poniższy kod demonstruje użycie modułu USI jako SPI Master z maksymalną szybkością przesyłu (fsck = fck/2):
Przykład w kodzie maszynowym |
SPITransfer_Fast: out USIDR,r16 ldi r16,(1<<USIWM0)|(0<<USICS0)|(1<<USITC) ldi r17,(1<<USIWM0)|(0<<USICS0)|(1<<USITC)|(1<<USICLK) out USICR,r16 ; MSB out USICR,r17 out USICR,r16 out USICR,r17 out USICR,r16 out USICR,r17 out USICR,r16 out USICR,r17 out USICR,r16 out USICR,r17 out USICR,r16 out USICR,r17 out USICR,r16 out USICR,r17 out USICR,r16 ; LSB out USICR,r17 in r16,USIDR ret |
Poniższy kod demonstruje sposób użycia modułu USI jako SPI Slave:
Przykład w kodzie maszynowym |
init: ldi r16,(1<<USIWM0)|(1<<USICS1) out USICR,r16 ... SlaveSPITransfer: out USIDR,r16 ldi r16,(1<<USIOIF) out USISR,r16 SlaveSPITransfer_loop: sbis USISR,USIOIF rjmp SlaveSPITransfer_loop in r16,USIDR ret |
Kod został zoptymalizowany na wielkość i składa się tylko z ośmiu instrukcji (+ ret). Przykład ten zakłada, iż końcówka DO została skonfigurowana jako wyjście, a końcówka USCK została skonfigurowana jako wejście w rejestrze DDR. Wartość umieszczona w rejestrze r16 przed wywołaniem tej funkcji zostanie przesłana do urządzenia Master, a gdy przesył się zakończy dane odebrane od Master zostaną z powrotem umieszczone w rejestrze r16.
Zwróć uwagę, iż pierwsze dwie instrukcje maja na celu inicjalizację interfejsu USI i muszą być wykonane tylko jeden raz. Ustawiają one tryb 3-przewodowy oraz taktowanie rejestru przesuwającego dodatnimi zboczami sygnału zegara. Pętla jest wykonywana aż do ustawienia znacznika przepełnienia licznika USI.
Tryb 2-przewodowy USI nie wykorzystuje ograniczania szybkości zmian na wyjściach oraz filtrowania zakłóceń. W trybie tym używane końcówki mają nazwy SCL (ang. Serial CLock, zegar szeregowy) i SDA (ang. Serial DAta, dane szeregowe).
Powyższy rysunek przedstawia dwa moduły USI pracujące w trybie 2-przewodowym , jeden jako Master (nadrzędny) i drugi jako Slave (podporządkowany). Pokazana jest tutaj tylko warstwa fizyczna, ponieważ działanie tego systemu w dużej mierze zależy od używanego schematu przesyłu danych. Główną różnicą pomiędzy działaniem układu Master a Slave na tym poziomie jest generacja zegara szeregowego, którą zawsze wykonuje Master, a jedynie Slave wykorzystuje moduł sterowania zegarem. Generacja zegara musi być zaimplementowana programowo, lecz przesuwanie danych wykonywane jest automatycznie przez oba urządzenia. Zwróć uwagę, iż tylko taktowanie ujemnym zboczem przesuwu danych posiada praktyczne zastosowanie w tym trybie. Slave może wprowadzić stany oczekiwania na początku lub na końcu przesyłu poprzez wymuszenie stanu niskiego na linii zegarowej SCL. Oznacza to, iż Master musi zawsze sprawdzać, czy linia SCL rzeczywiście została zwolniona po tym, jak wygenerował dodatnie zbocze. Ponieważ zegar ten również zwiększa stan licznika, to przepełnienie licznika może być używane do wskazywania zakończenia przesyłu. Zegar jest generowany przez Master za pomocą zmiany stanu na przeciwny końcówki SCL poprzez rejestr PORT.
Kierunek przesyłu danych nie jest określany przez warstwę fizyczną. Do sterowania przepływem danych należy zaimplementować jakiś protokół, np. taki jak TWIbus.
Powyższy rysunek przedstawia przebiegi czasowe sygnałów w trybie 2-przewodowym. Zgodnie z nimi przesył przez magistralę obejmuje następujące kroki:
Jeśli Slave nie jest w stanie przyjąć więcej danych, nie potwierdza ostatnio odebranego bajtu danych. Gdy Master wykonuje operację odczytu, musi ją zakończyć przez wymuszenie stanu niskiego bitu potwierdzenia (ACK) po ostatnim przesłanym bajcie.
Powyższy rysunek przedstawia sieć logiczną detektora stanu startu (ang. start condition detector). Linia SDA jest opóźniana (w zakresie od 50 do 300 ns), aby zapewnić poprawne próbkowanie linii SCL.
Detektor stanu startu pracuje asynchronicznie i dlatego może wybudzać mikroprocesor w trybie uśpienia wyłączenia zasilania (ang. Power-down sleep mode). Jednakże używany protokół może posiadać ograniczenia czasu blokowania linii SCL. Z tego powodu w czasie wykorzystywania tej własności należy również brać pod uwagę czas startu oscylatora ustawiany przez bity bezpiecznikowe CKSEL (zobacz do podrozdziału "Systemy zegarowe i ich przydział").
Maksymalna częstotliwość dla SCL i SCK wynosi
Gdy USI nie jest wykorzystywane do komunikacji szeregowej, to może wykonywać alternatywne zadania z uwagi na swoją uniwersalność.
Przez wykorzystanie rejestru przesuwnego w trybie 3-przewodowym możliwe jest zaimplementowanie bardziej zwartego i szybszego w działaniu układu UART niż wersja jedynie programowa.
Licznik 4-bitowy USI może być używany jako samodzielny licznik z przerwaniem przy przepełnieniu. Zauważ, iż przy zewnętrznym taktowaniu licznika oba zbocza sygnału zegarowego powodują zwiększenie stanu licznika.
Połączenie 4-bitowego licznika USI z timerem/licznikiem 0 pozwala im pracować jako licznik 12-bitowy.
Przez ustawienie licznika na wartość maksymalną (F,15) pozwala mu funkcjonować jako dodatkowe przerwanie zewnętrzne. Wtedy znacznik przepełnienia wraz z bitem włączenia przerwania są używane do generowania przerwań zewnętrznych. Ta opcja jest wybierana przez bit USICS1.
Przerwanie przy przepełnieniu licznika może być używane jako przerwanie programowe wyzwalane strobem zegarowym.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x0F (0x2F) | MSB | LSB | USIDR | ||||||
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Rejestr danych USI można odczytywać bezpośrednio, lecz kopia danych znajduje się również w rejestrze bufora USI.
W zależności od stanu bitów USICS1:0 w rejestrze sterującym USI może być wykonana operacja przesuwu (w lewo). Przesuw może być synchronizowany ze zboczem zewnętrznego sygnału zegarowego, ze zgodnością porównania w timerze/liczniku 0 lub bezpośrednio z programu poprzez bit USICLK. Jeśli impuls zegara szeregowego pojawi się w chwili zapisu do rejestru, to rejestr będzie zawierał wpisaną wartość a przesuw nie zostanie wykonany.
Zauważ, iż nawet gdy nie jest wybrany tryb 2- ani 3-przewodowy (USIWM1:0 = 0), to zarówno zewnętrzne wejście danych (DI/SDA) jak i zewnętrzne wejście zegara (USCK/SCL) mogą wciąż być używane przez rejestr danych USI.
Używana końcówka wyjścia, DO lub SDA w zależności od trybu przewodowego, jest połączona poprzez wyjściowy przerzutnik latch do najbardziej znaczącego bitu (ang. most significant bit, MSB, bit 7) rejestru danych. Wyjściowy przerzutnik latch jest otwarty (przepuszcza dane) w czasie pierwszej połówki taktu zegara szeregowego, gdy zostało wybrane zewnętrzne źródło zegarowe (USICS1 = 1), a ciągle otwarty, gdy jest używane wewnętrzne źródło zegarowe (USICS1 = 0). Tak długo jak przerzutnik latch jest otwarty, wyjście zmienia się natychmiast, gdy będzie zapisany nowy bit MSB. Przerzutnik latch zapewnia, iż próbkowanie danych wejściowych i zmiana danych wyjściowych następują przy przeciwnych zboczach impulsu zegarowego.
Pamiętaj, iż w rejestrze kierunku danych należy ustawić odpowiedni bit, tak aby końcówka (DO/SDA) pracowała jako wyjście w celu umożliwienia wyprowadzania danych z rejestru przesuwającego.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x10 (0x30) | MSB | LSB | USIBR | ||||||
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Zamiast odczytywania danych z rejestru danych USI (ang. USI Data Register, USIDR) można korzystać z rejestru buforowego USI (ang. USI Buffer Register, USIBR). Dzięki temu sterowanie modułem USI staje się mniej krytyczne czasowo, co daje mikroprocesorowi więcej czasu na zajmowanie się innymi zadaniami w programie. Znaczniki USI są ustawiane podobnie jak przy odczycie rejestru USIDR.
Zawartość rejestru danych USI jest ładowana do rejestru bufora USI, gdy przesył został zakończony.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x0E (0x2E) | USISIF | USIOIF | USIPF | USIDC | USICNT3 | USICNT2 | USICNT1 | USICNT0 | USISR |
Zapis/Odczyt | Z/O | Z/O | Z/O | O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Rejestr stanu zawiera znaczniki przerwań, znaczniki stanu linii oraz wartość licznika.
Gdy zostanie wybrany tryb 2-przewodowy, to znacznik USISIF jest ustawiany na 1 po wykryciu warunku startu. Gdy jest wybrany tryb wyłączający wyjście lub tryb 3-przewodowy i (USICSx = 0b11 & USICLK = 0) lub (USICS = 0b10 & USICLK = 0), to każde zbocze sygnału na końcówce SCK ustawia ten znacznik. Jeśli są ustawione bity USISIE w rejestrze USICR oraz I w rejestrze stanu mikrokontrolera SREG, to ustawienie tego znacznika powoduje wygenerowanie przerwania. Znacznik jest zerowany tylko przez zapis 1 do bitu USISIF. Wyzerowanie tego bitu zakończy wstrzymywanie przy wykryciu startu linii USCL w trybie 2-przewodowym. Przerwanie od warunku startu wybudza procesor ze wszystkich trybów uśpienia.
Ten znacznik ustawiony zostaje na 1, gdy 4-bitowy licznik przepełnia się (tj. przy przejściu z 15 na 0). Przerwanie będzie wygenerowane, gdy znacznik ustawi się na 1 przy ustawionych bitach USIOIE w rejestrze USICR oraz I w rejestrze stanu SREG. Znacznik jest zerowany tylko przez zapis 1 do bitu USIOIF. Wyzerowanie znacznika zwolni wstrzymanie linii SCL w trybie 2-przewodowym. Przerwanie przy przepełnieniu licznika wybudza mikrokontroler z trybu bezczynności (ang. Idle sleep mode).
Po wybraniu trybu 2-przewodowego znacznik USIPF jest ustawiany na 1, gdy zostanie wykryty warunek stopu. Znacznik jest zerowany przez zapis jedynki do tego bitu. Zauważ, iż nie jest to znacznik przerwania. Sygnał ten jest użyteczny przy implementacji arbitrażu master dla magistrali 2-przewodowej.
Bit ten przyjmuje wartość logiczną jeden, jeśli bit 7 rejestru przesuwającego różni się od fizycznego stanu końcówki wyjścia. Znacznik ma znaczenie tylko w trybie 2-przewodowym. Sygnał ten jest użyteczny przy implementacji arbitrażu master dla magistrali 2-przewodowej.
Te bity odzwierciedlają bieżącą wartość licznika 4-bitowego. Mikroprocesor może bezpośrednio odczytywać i zapisywać ten licznik.
4-bitowy licznik zwiększa swoją zawartość przy wykryciu zbocza w zewnętrznym sygnale zegarowym, przy przepełnieniu timera/licznika 0 lub programowo za pomocą bitów strobowych USICLK lub USITC. Źródło zegarowe zależy od ustawienia bitów USICS1...0. Przy pracy na zegarze zewnętrznym istnieje specjalna możliwość tworzenia impulsu zegarowego przez zapis do bitu strobowego USITC. Opcja ta jest uaktywniana przez zapis jedynki do bitu USICLK przy ustawianiu zewnętrznego źródła zegarowego (USICS1 = 1). Zauważ, iż nawet gdy nie jest wybrany żaden tryb przewodowy (USIWM1...0 = 0), to wejście zegara zewnętrznego (USCK/SCL) wciąż może być używane przez licznik.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x0D (0x2D) | USISIE | USIOIE | USIWM1 | USIWM0 | USICS1 | USICS0 | USICLK | USITC | USICR |
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z | Z | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Rejestr sterujący zawiera sterowanie włączaniem przerwań, ustawianie trybu przewodowego, ustawianie wyboru zegara oraz strob zegarowy.
Ustawienie tego bitu na 1 włącza przerwania od detektora warunku startu. Jeśli jest jakieś przerwanie oczekujące, gdy są ustawiane na jeden bit USISIE oraz bit I globalnego włączania przerwań w rejestrze stanu SREG, to oczekujące przerwanie zostanie natychmiast wykonane.
Ustawienie tego bitu na 1 włącza przerwania od przepełnienia licznika 4-bitowego USI. Jeśli jest jakieś przerwanie oczekujące, gdy są ustawiane na jeden bit USIOIE oraz bit I globalnego włączania przerwań w rejestrze stanu SREG, to oczekujące przerwanie zostanie natychmiast wykonane.
Te bity wybierają rodzaj trybu przewodowego do używania przez USI. Właściwie bity te wpływają tylko na wyjścia. Wejścia danych i zegara nie ulegają zmianom przez wybrany tryb pracy USI i zawsze zachowują tę samą funkcję. Z tego powodu licznik oraz rejestr przesuwający mogą być taktowane zewnętrznie, a dane wejściowe mogą być próbkowane, nawet jeśli wyjścia są zablokowane. Poniższa tabelka podsumowuje zależności pomiędzy bitami USIWM1...0 a działaniem USI:
USIWM1 | USIWM0 | Opis |
0 | 0 | Wyłączenie wyjść, wstrzymywania zegara i detektora startu. Końcówki portu pracują normalnie. |
0 | 1 | Tryb 3-przewodowy.
Używa końcówek DO, DI i USCK. W tym trybie końcówka wyjścia danych (DO) przechwytuje odpowiadający jej bit w rejestrze PORT. Jednakże odpowiedni bit DDR wciąż określa kierunek przesyłu danych. Gdy końcówka portu pracuje jako wejście, to opornik podciągający tej końcówki jest kontrolowany przez bit PORT. Końcówki wejścia danych (DI) i zegara szeregowego (USCK) nie wpływają na normalną pracę portu. Przy pracy jako master impulsy zegarowe są generowane programowo przez zmianę stanu rejestru PORT, natomiast kierunek danych jest ustawiony jako wyjście. Do tego celu może być wykorzystany bit USITC w rejestrze USICR. |
1 | 0 | Tryb 2-przewodowy.
Używa końcówek SDA (DI) i
SCL (USCK)(1). Końcówki danych szeregowych (SDA) i zegara szeregowego (SCL) są dwukierunkowe i wykorzystują wyjścia typu otwarty kolektor. Wyjścia te są uaktywniane przez ustawienie odpowiednich bitów dla SDA i SCL w rejestrze DDR. Gdy wyjście jest uaktywnione dla końcówki SDA, to wymusza stan niski linii SDA, jeśli wyjście z rejestru przesuwającego lub stan odpowiedniego bitu w rejestrze PORT wynosi 0. W przeciwnym razie linia SDA nie jest wysterowana (tzn. jest uwolniona). Gdy zostanie uaktywnione wyjście dla końcówki SCL, to linia SCL będzie wymuszona stanem niskim, jeśli odpowiedni bit w rejestrze PORT wynosi zero lub przez detektor startu. W przeciwnym razie linia SCL nie jest wysterowana. Linia SCL jest utrzymywana w stanie niskim, gdy detektor startu wykryje warunek startu, a wyjście jest uaktywnione. Wyzerowanie znacznika warunku startu (USISIF) zwalnia tę linię. Włączenie tego trybu nie wpływa na wejścia końcówek SDA i SCL. W trybie 2-przewodowym oporniki podciągające końcówek portu SDA i SCL są wyłączone. |
1 | 1 | Tryb 2-przewodowy.
Korzysta z końcówek SDA i SCL. Działa tak samo jak tryb 2-przewodowy opisany powyżej z tym wyjątkiem, iż linia SCL jest również utrzymywana w stanie niskim, gdy następuje przepełnienie licznika, a stan niski jest wymuszany do czasu wyzerowania znacznika przerwania przy przepełnieniu licznika (USIOIF). |
Te bity ustawiają źródło zegarowe dla rejestru przesuwającego i licznika. Wyjściowy przerzutnik latch zapewnia, iż wyjście jest zmieniane przy przeciwnym zboczu sygnału zegarowego niż próbkowanie wejścia danych (DI/SDA), gdy używane jest zewnętrzne źródło zegarowe (USCK/SCL). Gdy zostanie wybrana opcja zegarowa programowego strobu lub przepełnienia timera 0, wyjściowy przerzutnik Latch zawsze przepuszcza dane i dlatego wyjście zmienia się natychmiast. Wyzerowanie bitów USICS1...0 uaktywnia opcję programowanego strobu. Podczas używania tej opcji zapis jedynki do bitu USICLK powoduje powstanie taktu zegarowego dla rejestru przesuwającego oraz dla licznika. Przy zewnętrznym źródle zegarowym (USICS1 = 1) bit USICLK nie pełni już dłuzej funkcji strobu, lecz wybiera pomiędzy taktowaniem zewnętrznym a taktowaniem programowym za pomocą bitu strobowego USITC.
Poniższa tabelka pokazuje związek pomiędzy ustawieniami bitów USICS1...0 i USICLK a żródłem zegarowym używanym dla rejestru przesuwającego i 4-bitowego licznika.
USICS1 | USICS0 | USICLK | Źródło zegara dla rejestru przesuwającego | Źródło zegara dla 4-bitowego licznika |
0 | 0 | 0 | Brak zegara | Brak zegara |
0 | 0 | 1 | Strob programowy zegara (USICLK) |
Strob programowy zegara (USICLK) |
0 | 1 | X | Przepełnienie timera/licznika 0 | Przepełnienie timera/licznika 0 |
1 | 0 | 0 | Zewnętrzne, zbocze dodatnie | Zewnętrzne, oba zbocza |
1 | 1 | 0 | Zewnętrzne, zbocze ujemne | Zewnętrzne, oba zbocza |
1 | 0 | 1 | Zewnętrzne, zbocze dodatnie | Strob programowy zegara (USITC) |
1 | 1 | 1 | Zewnętrzne, zbocze ujemne | Strob programowy zegara (USITC) |
Zapis jedynki do tego bitu powoduje przesunięcie zawartości rejestru przesuwającego o jedną pozycję w lewo oraz zwiększa o 1 zawartość licznika, pod warunkiem ustawienia bitów USICS1..0 na zero i wybrania opcji programowego strobu zegarowego. Wyjście zmieni się natychmiast po wykonaniu strobu zegarowego, tj. w tym samym cyklu instrukcji. Wartość wsuwana do rejestru przesuwającego została spróbkowana w poprzednim cyklu instrukcji.
Bit zostanie odczytany jako zero.
Gdy wybrane jest zewnętrzne źródło zegarowe (USICS1 = 1), to funkcja bitu USICLK zmienia się ze strobu zegarowego na rejestr wyboru zegara. Ustawienie bitu USICLK w tym przypadku wybierze strob USITC jako źródło zegarowe dla licznika 4-bitowego (patrz tabelka powyżej).
Zapis jedynki do tego bitu zmienia stan USCK/SCL albo z 0 na 1, albo z 1 na 0. Zmiana ta jest niezależna od ustawień rejestru kierunku danych, jednak jeśli wartość PORT ma się pojawić na końcówce, to bit DDB7 musi ją ustawić jako wyjście. Ta cecha ułatwia generację zegara przy implementacji urządzeń master.
Bit będzie odczytany jako zero.
Jeśli wybrane jest źródło zegara zewnętrznego (USICS1 = 1) a bit USICLK jest ustawiony na jeden, to zapis do bitu strobowego USITC wyśle takt zegarowy bezpośrednio do licznika 4-bitowego. Pozwala to na wczesne wykrycie zakończenia przesłania danych, gdy USI pracuje jako urządzenie master.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.