Nie ma to nic wspólnego z rdzeniem będącym procesorem ARM; chodzi o to, jak działa układ zegarowy:
W wielu systemach, takich jak mikrokontrolery, układy RF, układy audio ... musisz wygenerować szybszy zegar, który jest dokładną wielokrotnością jakiegoś zegara odniesienia (na przykład zewnętrznego kryształu).
Osiąga się to dzięki oscylatorowi sterowanemu napięciem (VCO), który można regulować częstotliwością poprzez zwiększenie lub zmniejszenie napięcia sterującego.
Teraz, po prostu ustawiając dowolne napięcie sterujące, możesz ustawić, aby oscylowało ono z częstotliwością mniej więcej w odpowiednim „ballparku”, ale nie z dokładną wielokrotnością częstotliwości wejściowej. Zwłaszcza VCO mogą być nieco nieprzyjemne, więc częstotliwość będzie też nieustannie „wędrować” po całym miejscu. Musisz kontrolować ten oscylator, porównując go z oscylatorem odniesienia.
Sposobem na to jest zastosowanie pętli synchronizowanej fazowo . Pomysł jest prosty:
- Podziel częstotliwość wychodzącą z VCO przez współczynnik ; właśnie dlatego chcemy, aby VCO było szybsze niż referencyjne. Jest to łatwe: możesz na przykład po prostu użyć licznika cyfrowego, który liczy się do N, a dopiero potem zmienia wyjście.N
- Porównaj ten zegar z zegarem odniesienia w . Jeśli jeden jest szybszy od drugiego, odpowiednio dostosuj częstotliwość. Możesz to zrobić cyfrowo, po prostu XOR'ując oba zegary - idealnie, jeśli są one identyczne, wynikiem jest stała 0, ale jeśli jeden jest szybszy od drugiego, to będzie coraz więcej razy, gdy XOR obu zegarów wynosi 1; odpowiednio spowolnij lub przyspiesz VCO.fVCO/Nfref
Powyżej jest pętla kontrolna, zamknięta w fazie - stąd nazwa.
W przypadku „bogatych” mikrokontrolerów, które mają wiele urządzeń peryferyjnych i stąd korzyści płynące z posiadania wielu zegarów wewnętrznie, zwykle ma się co najmniej 1 PLL. ATMega328 jest pod tym względem nieco dziwny: to stosunkowo energochłonny, stosunkowo bogaty w peryferia mikrokontroler, który wciąż nie ma PLL.