Mikrokontrolery ARM cz20


K U R S
Mikrokontrolery z rdzeniem ARM,
część 20
Interfejsy szeregowe: SPI
Interfejs SPI W tej części cyklu zajmiemy się pokazaniem
W przeciwieństwie do interfejsu
obsługi interfejsu SPI w mikrokontrolerach LPC213x
I2C, interfejs SPI nie posiada żad-
i LPC214x, na bazie interesującego przykładu: karty
nej wbudowanej inteligencji, ani
MMC.
mechanizmów arbitrażu, jest on
tylko prostym dwukierunkowym in-
Tab. 5. Przypisanie linii SPI i SSP do wyprowadzeń mikrokontrolerów LPC213x
terfejsem synchronicznym. Interfejs
i LPC214x
SPI wykorzystuje 4 wyprowadzania
mikrokontrolera: MOSI, MISO, SCK, Linie Linie
Sygnał Opis
(SSP) (SPI)
SSEL. Pierwsze trzy linie pełnią
MISO P0.18 P0.5 Linia danych  w trybie nadrzędnym wejście, w podrzędnym wyjście
rolę linii sygnałowych, zaś ostat-
MOSI P0.19 P0.6 Linia danych  w trybie nadrzędnym wyjście, w podrzędnym wejście
nia linia służy do wyboru układu
podrzędnego. Układy podłączone do Wyjście sygnału zegarowego w trybie nadrzędnym lub wejście w trybie
SCK P0.17 P0.4
podrzędnym
magistrali SPI mogą pracować jako
urządzenia nadrzędne lub podrzęd- SSEL P0.20 P0.7 Linia wyboru układu w trybie podrzędnym.
ne, jednak w przeciwieństwie do
I2C na magistrali może pracować transmisja może odbywać się rów- natomiast SSP jest rozbudowanym
tylko jedno urządzenie nadrzędne. nież przy ujemnej polaryzacji im- układem który potrafi pracować
W przypadku, gdy mikrokontroler pulsów zegarowych, jak i na drugim w trybach SPI, 4 wire TI, NS bus.
pracuje jako urządzenie nadrzęd- zboczu sygnału, a interfejsy mikro- Z uwagi na największą popular-
ne wyprowadzenie SCK mikrokon- kontrolerów posiadają wbudowane ność interfejsu SPI oraz ograniczo-
trolera jest wyjściem sygnału tak- mechanizmy pozwalające sterować ne łamy kursu, będziemy zajmować
tującego, MOSI wyjściem, a MISO tą zależnością. W przypadku, gdy się tutaj tylko trybem SPI interfejsu
wejściem danych, natomiast gdy mikrokontroler pracuje jako urzą- SSP. Z interfejsem SSP i SPI mikro-
mikrokontroler pracuje jako układ dzenie nadrzędne, wysyłanie da- kontrolera związane są linie zesta-
podrzędny, SCK jest wejściem sy- nych na magistrali SPI rozpoczyna wione w tab. 5.
gnału taktującego, MOSI wejściem, się w momencie wpisania danych Użycie interfejsu SPI w praktyce
a MISO wyjściem danych. Pomimo do odpowiedniego rejestru, przed jest dużo prostsze niż I2C i spro-
swojej prostoty interfejs SPI cechuje tą czynnością należy pamiętać, aby wadza się do konfiguracji kilku
się wieloma zaletami, na przykład za pomocą portu GPIO zmienić rejestrów, a następnie zapisu lub
dużo większą prędkością pracy, na- stan linii SSEL wybranego urządze- odczytu danych. Kontroler SPI po-
wet rzędu kilkudziesięciu MHz, nia podrzędnego na niski. W mikro- trafi zgłaszać przerwania w reakcji
i najczęściej będziemy go wykorzy- kontrolerach rodziny 8051 interfejs na zdarzenia, jednak najczęściej nie
stywać do podłączania szybkich SPI występuje tylko w nielicznych będzie potrzebne korzystanie z sys-
układów peryferyjnych, takich jak modelach mikrokontrolerów, na temu przerwań i będziemy posłu-
duże pamięci Flash, karty pamięci przykład 89S8252, natomiast w mi- giwać się badaniem bajtu statusu.
MMC, przetworniki A/C itp. krokontrolerach AVR jest on zdecy- Prędkość transmisji interfejsem SPI
Sposób transmisji danych na dowanie bardziej popularny i wy- określa rejestr SSPCPSR (rys. 56).
magistrali SPI przedstawiono na stępuje w większej liczbie modeli.
SSPCPSR
rys. 55. Przedstawiono tutaj tylko W mikrokontrolerach LPC213x/214x
7 6 5 4 3 2 1 0
jeden wariant transmisji SPI na na- mamy dwa układy peryferyjne mo-
rastającym zboczu zegarowym, przy gące pracować w trybie SPI mia- Rys. 56. Rejestr SSPCPSR (0xE0068010)
dodatniej polaryzacji impulsów ze- nowicie układ SPI oraz SSP. Układ
garowych. Nie ma tu jednak stan- SPI jest prostym układem, który Prędkość pracy interfejsu SSP
dardu transmisji, jak dla I2C, więc może pracować tylko w trybie SPI, możemy wyznaczyć według wzoru
F =P /(SSPCPSR*(SCR+1)), musimy
clk clk
pamiętać o prawidłowym ustawieniu
podzielnika w rejestrze SSPCPSR.
Gdy kontroler pracuje w trybie nad-
rzędnym, najmniejszą dozwoloną
wartością podzielnika jest liczba
2, natomiast w trybie podrzędnym
najmniejszą wartością, jaką może-
my wpisać jest 12. Jak więc ła-
Rys. 55. Transmisja danych interfejsem SPI two można policzyć, maksymalną
Elektronika Praktyczna 7/2007
101
K U R S
SCR CPHA CPOL FRF DSS
rejestr SSPDR. Jeżeli chcemy wysłać
jakąś daną na magistralę SPI, wów-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
czas wpisujemy ją do tego rejestru
Rys. 57. Rejestr SSPCR0 (0xE0068000) i jeżeli kontroler w danym momen-
cie jest wolny zapis rejestru auto-
częstotliwością, z jaką może praco- bitu jest możliwa tylko wtedy, gdy matycznie rozpoczyna proces nada-
wać interfejs SSP mikrokontrolerów kontroler SSP jest wyłączony (bit wania danych. Odczyt danych jest
LPC213x/214x, jest 30 MHz w trybie SSE=0) możliwy, gdy bit RNE w rejestrze
nadrzędnym, co jest wartością wie- SOD  bit ten działa tylko statusu jest ustawiony w stan 1.
lokrotnie większą od prędkości pra- w trybie podrzędnym kontrolera,
SSPDR
cy interfejsu I2C (400 kHz). Oczy- wówczas jego ustawienie powoduje
wiście musimy pamiętać, że urzą- zablokowanie wysyłania danych li-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
dzenie podrzędne również powinno nią MISO.
być dostosowane do taktowania tak Jak widzimy kontroler SSP mi- Rys. 60. Rejestr SSPDR (0xE0068008)
dużą częstotliwością. Kontroler SSP krokontrolerów LPC jest bardzo
posiada wiele trybów pracy, również elastyczny, do dyspozycji mamy W niektórych przypadkach za-
sama magistrala SPI może pracować ogromną liczbę opcji konfiguracyj- miast cyklicznego badania rejestru
w wielu konfiguracjach, dlatego do nych i w zasadzie może on praco- statusu istnieje konieczność użycia
ustawienia odpowiedniego trybu pra- wać z każdym urządzeniem pracu- przerwań generowanych przez kon-
cy służą rejestry konfiguracyjne SSP- jącym w jednej z odmian transmisji troler SSP. Na przykład, gdy urzą-
CR0 i SSPCR1: synchronicznej. W innych mikrokon- dzenie podłączone do magistrali SPI
DSS  określa liczbę bitów da- trolerach 8 bitowych, na przykład jest bardzo wolne lub pracujemy
nych (n) w jednej ramce, gdzie n AVR, kontroler SPI nie jest tak w trybie podrzędnym i nie wiemy
= DSS+1. Najczęściej będziemy elastyczny i może pracować tylko kiedy możemy spodziewać się no-
używać 8 bitowego formatu ramek. w trybie SPI z 8 bitowymi danymi. wych danych. Kontroler SSP może
FRF  określa tryb pracy inter- Zbadanie statusu mikrokontrolera zgłaszać przerwania od nadajnika,
fejsu SSP (najczęściej będziemy wy- SSP umożliwia rejestr SSPSR (tylko odbiornika, braku odbioru znaków,
korzystywać tryb SPI) do odczytu). Podobnie jak rejestr jak i nadpisania bufora. Określe-
00b  SPI LSR w sterowniku portów szerego- nie rodzaju zgłaszanych przerwań
01b  SSI wych umożliwia on sprawdzenie umożliwia rejestr maski przerwań
10b  Microwire czy można zapisać daną do bufora, SSPMIS (rys. 61).
11b  zarezerwowane sprawdzić stan błędów oraz stwier-
    TXIM RXIM RTIM RORIM
CPOL  określa polaryzację sy- dzić obecność nowej danej w bufo-
7 6 5 4 3 2 1 0
gnału zegarowego SCK rze odbiornika.
0  polaryzacja  dodatnia Rys. 61. Rejestr SSPMIS (0xE006801C)
   BSY RFF RNE TNF TFE
(nieaktywny stan 0)
7 6 5 4 3 2 1 0
1  polaryzacja  ujemna RORIM  flaga zezwolenia na
(nieaktywny stan 1) Rys. 59. Rejestr SSPSR (0xE006800C) przerwanie zgłaszanego w momencie
CPHA  określa fazę próbkowa- nadpisania kolejki FIFO odbiornika.
nia danych TFE  ustawienie tego bitu RTIM  flaga zezwolenia na
0  dane próbkowane na oznacza, że bufor FIFO nadajnika przerwanie od timeoutu. Przerwanie
zboczu aktywującym jest pusty. to jest zgłaszane w momencie, gdy
1  dane próbkowane na TNF  ustawienie tego bitu przez czas trwania 32 bitów nie
zboczu deaktywującym. oznacza, że bufor FIFO nadajnika zostały odebrane żadne dane.
SCR  podzielnik sygnału pre- nie jest zapełniony. Do rejestru da- RXIM  flaga zezwolenia na
skalera, określa prędkość transmisji nych można wstawić daną do wy- przerwanie zgłaszanego w momen-
interfejsu SPI zgodnie ze wzorem słania. cie, gdy bufor odbiornika jest w po-
opisanym wcześniej. RNE  ustawienie tego bitu łowie zapełniony.
oznacza, że bufor FIFO odbiornika TXIM  flaga zezwolenia na
    SOD MS SSE LBM
nie jest pusty, tak więc z rejestru przerwanie, gdy bufor nadajnika
7 6 5 4 3 2 1 0
danych można odczytać odebrane jest w połowie pusty.
Rys. 58. Rejestr SSPCR1 (0xE0068004) dane. Stan bitów RTIM oraz RXIM
RFF  ustawienie tego bitu jest automatycznie aktualizowany
LBM  ustawienie tego bitu po- oznacza zapełnienie bufora FIFO w miarę zmiany ilości danych znaj-
woduje pracę kontrolera SSP w try- odbiornika. dujących się w kolejkach FIFO, na-
bie pętli (loopback), co można wy- BSY  flaga zajętości. Ustawienie tomiast bity od przekroczenia czasu
korzystać tylko do celów diagno- tego bitu oznacza, że kontroler SSP oraz przepełnienia kolejki FIFO mu-
stycznych. właśnie odbiera lub wysyła daną. szą być kasowane przez procedurę
SSE  ustawienie tego bitu po- Stan tego rejestru możemy obsługi przerwania. Skasowanie tych
woduje załączenie kontrolera SSP. sprawdzać bezpośrednio w programie bitów umożliwia rejestr SSPICR.
MS  wybór trybu pracy nad- głównym (tak będziemy robić naj-
      RTIC RORIC
rzędny/podrzędny. Gdy bit ten częściej), albo w procedurze obsłu-
7 6 5 4 3 2 1 0
jest wyzerowany, kontroler pracuje gi przerwania od interfejsu SSP. Do
w trybie nadrzędnym. Zmiana tego wysyłania i odbioru danych służy Rys. 62. Rejestr SSPICR(0xE0068020)
Elektronika Praktyczna 7/2007
102
K U R S
RORIC  ustawienie tego bitu
List. 12. Procedura obsługująca transfer danych pomiędzy kartą MMC i mi-
powoduje skasowanie zródła prze- krokontrolerem LPC
//Nadaje i odbiera znak po SPI
rwania od przepełnienia kolejki
static u08 spiTransferByte(u08 byte)
FIFO kontrolera SSP.
{
SSPDR = byte;
RTIC  ustawienie tego bitu po-
while(SSPSR & 0x10); //Czekaj na koniec nadaw
woduje skasowanie zródła przerwa-
byte = SSPDR;
return byte;
nia od przeterminowania odbioru
}
znaków.
Omówiliśmy już wszystkie nie-
zbędne rejestry do pracy z kontrole- się już stosowne gniazdo pamięci, SSPDR wpisywany jest bajt do wy-
rem SSP, teraz pokażemy jak zdoby- więc wystarczy tylko  pożyczyć słania, a następnie w aktywnej pętli
te wiadomości można wykorzystać kartę MMC z jakiegoś aparatu i wło- sprawdzany jest stan bitu BUSY
w praktyce. W ostatnim czasie bar- żyć do gniazda naszego zestawu. w rejestrze statusu, który informuje
dzo potaniały karty pamięci MMC/ W pliku ep8d.zip znajduje się pro- nas o zakończeniu wysyłania i od-
SD, tak więc stały się one dosko- gram, który za pomocą interfejsu bierania danych. Na końcu zawar-
nałym rozwiązaniem w przypadku, SPI odczytuje 32 sektor karty MMC tość rejestru SSPDR zawierająca
gdy zależy nam na przechowywa- i wyświetla jego zawartość na ter- odebraną daną jest zwracana przez
niu dużej ilości danych. Dodatko- minalu. Z uwagi na skomplikowaną funkcję. Jeżeli nie wykorzystujemy
wym ułatwieniem jest możliwość komunikację z kartą MMC przedsta- systemu przerwań, same procedury
pracy pamięci MMC w trybie SPI, wię tutaj tylko procedury odpowie- interfejsu SPI za pomocą kontro-
tak więc do przesyłania danych dzialne za transfer MMC. Kontroler lera SSP są bardzo proste. Trochę
pomiędzy kartą a pamięcią może- SSP do pracy w trybie SPI obsłu- problemów może jedynie sprawić
my wykorzystać standardowy inter- gi karty MMC jest inicjalizowany wstępna konfiguracja interfejsu, po-
fejs SPI. Sposób podłączenia karty w procedurze mmcInit()  list. 11. nieważ do dyspozycji mamy wiele
MMC do mikrokontrolera LPC21xx Najpierw wybierane są funk- trybów pracy.
przedstawiono na rys. 63. cje alternatywne linii SCK MISO
MOSI, następnie kontroler jest usta- Interfejsy szeregowe
wiany tak, aby ramka zawierała 8  podsumowanie
bitów danych z dodatnią polaryza- Zapoznaliśmy się z układami
cją impulsów CLK. Następnie usta- transmisji szeregowej, które są zde-
wiana jest częstotliwość taktowania cydowanie bardziej rozbudowane
interfejsu SPI. Może tutaj dziwić oraz jest ich więcej niż w innych
duża wartość podzielnika, przez co mikrokontrolerach 8 bitowych. Do
transfer danych będzie bardzo wol- dyspozycji mamy dwa porty szere-
ny, jednak zgodnie ze specyfikacją gowe, które są zgodne ze standar-
SPI inicjalizacja powinna odbywać dem 16550, tak więc nie musimy
się z częstotliwością mniejszą niż specjalnie pisać nowych programów
podczas normalnej pracy, i dopiero do ich obsługi. Dodatkową zale-
po zainicjalizowaniu karty kontro- tą LPC21xx jest wyposażenie ich
ler można ustawić na pełną pręd- w dwa interfejsy I2C, co jest rzadko
kość pracy. Po ustawieniu podziel- spotykane wśród innych mikrokon-
Rys. 63. Sposób podłączenia karty nika następuje włączenia kontrole- trolerów, dysponujących zazwyczaj
MMC do mikrokontrolera LPC21xx ra SPI oraz zainicjalizowanie linii co najwyżej jednym interfejsem
CS jako wyjście w stanie wysokim I2C. Użycie sprzętowego kontrolera
W przypadku, gdy do ćwiczeń (nieaktywnym). Za przesyłanie da- I2C z wykorzystaniem systemu prze-
będziemy wykorzystywać zestaw nych pomiędzy kartą MMC a mi- rwań pozwala odciążyć mikroproce-
ZL6ARM, kartę MMC będziemy krokontrolerem odpowiedzialna jest sor, który w tym czasie może zająć
musieli podłączyć do zestawu we- funkcja spiTransferByte(), która jed- się realizacją innych zadań. Rów-
dług powyższego schematu, nato- nocześnie wysyła i odbiera bajt da- nież bardzo ciekawy jest interfejs
miast gdy wykorzystamy nowszy nych z magistrali SPI (list. 12). SSP, który oprócz tego, że potrafi
zestaw ZL11ARM z mikrokontrole- Sama procedura jest trywial- pracować w standardzie SPI, posia-
rem LPC214x, na płytce znajduje nie prosta, mianowicie do rejestru da dodatkowe protokoły wykorzy-
stywane w innych układach. Z tego
List. 11. Procedura inicjalizująca kontroler SSP
powodu w większości przypadków
//Inicjalizacja protokolu mmc i spi
nie będziemy musieli pisać progra-
void mmcInit(void)
{ mowych procedur obsługi. Powoli
//Piny jako funkcja alternatywna SPI
zbliżamy się do końca naszego cy-
PINSEL1 |= SCK1_P017_SEL|MISO1_P018_SEL|MOSI1_P019_SEL;
//SPI Master 8 bitow CPOL 0 klu. W kolejnym i ostatnim odcinku
SSPCR0 = 0x07;
zajmiemy się tematyką przetwarza-
//Podzielnik
SSPCPSR = 150;
nia A/C i C/A.
//Zalacz kontroler SPI
Lucjan Bryndza, EP
SSPCR1 = 2;
// CS nieaktywny
lucjan.bryndza@ep.com.pl
MMC_DIR |= MMC_CS;
MMC_SET = MMC_CS; // CS wysoki
}
Elektronika Praktyczna 7/2007
103


Wyszukiwarka

Podobne podstrony:
Mikrokontrolery ARM cz1
Mikrokontrolery ARM cz10
Mikrokontrolery ARM cz14
Mikrokontrolery ARM cz8
Mikrokontrolery ARM cz12
Mikrokontrolery ARM cz15
Mikrokontrolery ARM cz21
Mikrokontrolery ARM cz19
Mikrokontrolery ARM cz3
Mikrokontrolery ARM cz6
Mikrokontrolery ARM cz22
Mikrokontrolery ARM cz18
Mikrokontrolery ARM cz18
Mikrokontrolery ARM cz11
Mikrokontrolery ARM cz13
Mikrokontrolery ARM cz17
Mikrokontrolery ARM cz5
Mikrokontrolery ARM cz7
Mikrokontrolery ARM cz9

więcej podobnych podstron