Programowanie zegara procesora LPC17xx

Transkrypt

Programowanie zegara procesora LPC17xx
Techniki Mikroprocesorowe
Programowanie zegara procesora LPC17xx
Rejestry:
PLL0CON – [0] – Enable, [1] – Connect; RW
PLL0CFG – [14:0] to M-1, [23:16] to N-1; RW
PLL0STAT – powtarza PLL0CFG oraz [24] – Enable, [25] – Connect, i [26] – PLOCK0; po podaniu sekwencji
FEED; RO
PLLxFEED – miejsce do którego wpisuje się sekwencje aktywującą (feed): 0xAA, 0x55; WO
CCLKCFG – [7:0] – od 2 do 255 gdy PLL0 jest aktywna (współczynnik podziału jest o jeden większy)
CLKSRCCFG – [1:0] – trzy możliwości
Sekwencja wprowadzania feed
Poprawna sekwencja wprowadzania (feed) musi być wpisana do rejestru PLL0FEED aby zmiany w
rejestrach PLL0CON and PLL0CFG odniosły efekt. Sekwencja ta jest następująca:
1. wpisz wartość 0xAA do PLL0FEED.
2. wpisz wartość 0x55 do PLL0FEED.
Obydwie operacje zapisu muszą być wykonane we właściwej kolejności, a pomiędzy tymi operacjami
nie może zajść żadna inna operacja dostępu w przestrzeni adresowej (0x400F C000 to 0x400F
FFFF). Dlatego może być konieczne wyłączenie przerwań (disable interrupts) na czas trwania
operacji feed na PLL0, jeśli istniej prawdopodobieństwo, że obsługa przerwania mogłaby zakłócić
operację feed.
Jeśli któraś z wartości wprowadzania (feed) jest nie poprawna lub jeden z wymienionych warunków jest nie spełniony to
żadna zmiana w rejestrach PLL0CON or PLL0CFG nie przyniesie skutku.
Sekwencja startowa PLL0
Konieczna do inicjalizacji i uruchumienia pętli PLL0 :
1.
Jeśli PLL0 jest już połączone to odłącz ją za pomocą sekwencji feed; PLL0CON[1] = 0.
2.
Wyłącz (disable) PLL0 kolejną sekwencją feed.
3.
Jeśli to jest potrzebne, zmień ustawienie dzielnika zegara (CPU Clock Divider) aby
przyspieszyć pracę bez PLL0; CCLKCFG[7:0].
4.
Zapisz rejestr CLKSRCCFG (Clock Source Selection Control) jeśli zmiana źródła zegara jest
potrzebna.
5.
Zapisz rejestr PLL0CFG i potwierdź operacją feed. Aktualizacja rejestru PLL0CFG może być
wykonana tylko jeśli pętla PLL0 jest nie aktywne (disable).
Techniki Mikroprocesorowe
6.
Uaktywnij (enable) PLL0 jedną sekwencją (feed).
7.
Zmień ustawienie dzielnika zegara procesora (CPU Clock Divider CCLKCFG[7:0]) dla pracy z
pętlą PLL0. Jest to ważne aby zrobić to przed podłączeniem (connect) pętli PLL0.
8.
Zaczekaj aż pętla PLL0 osiągnie stan synchronizacji (lock) sprawdzając bit PLOCK0 w
rejestrze statusowym PLL0STAT albo używając przerwania PLOCK0 interrupt Gdy stosowany jest
wolny zegar wejściowy do PLL0 (32 kHz) można zaczekać określony interwał czasu. Wartość flagi
PLOCK0 może być niestabilna kiedy częstotliwość odniesienia pętli FREF jest mniejsza od 100kHz lub
większa od 20MHz. Częstotliwość FREF to częsttotliwość wejściowa podzielona przez wartość
dzielnika wstępnego. W tym przypadku pętla może być uznana za zsynchronizowaną po upływie
czasu uruchamiania (start-up time). Ten czas wynosi 500 µs gdy FREF jest większy od 400 kHz i
200/FREF sekund gdy FREF jest mniejszy od 400 kHz.
9.
Podłącz (connect) PLL0 za pomocą jednej sekwencji feed.
Nie wolno łączyć żadnego z powyższych kroków !!!