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 !!!