K U R S
Mikrokontrolery z rdzeniem
ARM, część 10
Obsługa układów peryferyjnych:
PLL, VPB, MAM
W poprzednim odcinku omówiono przygotowanie środowiska umożliwiający zmianę adresów
wektorów, do których odwołuje się
programistycznego dla mikrokontrolerów ARM, strukturę plików
mikrokontroler w momencie wystÄ…-
przykładowego projektu oraz przedstawiono budowę pliku skryptu
pienia wyjÄ…tku. W mikrokontrole-
linkera zawierającego informację o rozmieszczeniu poszczególnych
rach LPC21xx posłużono się bardzo
prostym rozwiÄ…zaniem, mianowicie
segmentów programu w pamięci mikrokontrolera. Teraz zajmiemy
w zależności od zawartości rejestru
się czynnościami, które musimy wykonać przed przystąpieniem do
MEMMAP, do pierwszych 64 bajtów
wykonania głównego kodu programu (funkcja main). Wyjaśnimy za
przestrzeni adresowej zawierajÄ…cej
co odpowiedzialny jest plik startowy boot.s napisany w asemblerze. wektory wyjątków, podstawiany jest
obszar pamięci FLASH, obszar pa-
Omówimy także układy peryferyjne zawarte w bloku System
mięci RAM lub obszar kodu bootlo-
Control Block, które mają bezpośredni wpływ na prace rdzenia
adera (rys. 26).
mikrokontrolera.
Tak więc w momencie wystąpie-
nia wyjÄ…tku skok jest wykonywany
Start systemu adresu 0x00000000 (wektor reset), do odpowiedniego obszaru, co daje
W pliku startowym boot.s na po- skąd następuje skok do procedury możliwość umieszczenia programu
czątku segmentu kodu umieszczona inicjalizacyjnej Reset_Addr. Procedu- w pamięci Flash lub RAM. Rejestr
jest tablica wektorów wyjątków mi- ra ta rozpoczyna działanie od skon- MEMMAP ma długość 8 bitów i jest
krokontrolera, której delicja jest na- figurowania urządzeń peryferyjnych umieszczony pod adresem 0xE01F-
stępująca: odpowiedzialnych bezpośrednio za C040, przy czym tylko dwa naj-
Vectors: LDR PC, Reset_Addr
pracę rdzenia mikrokontrolera. Po- młodsze bity są wykorzystywane,
/* Wektor zerowania */
przez definicję odpowiednich sym- natomiast pozostałe bity są zare-
LDR PC, Undef_Addr /* Wyjatek
Undefined */
boli na początku pliku startowego zerwowane i nie powinny być usta-
LDR PC, SWI_Addr /* Wyjatek SWI
możemy do tej procedury dołączać wiane. Aby umieścić obszar wekto-
*/
LDR PC, PAbt_Addr /* Wyjatek Pre-
fragmenty kodu, które są odpowie- rów wyjątków w obszarze pamięci
fetch Abort */
LDR PC, DAbt_Addr /* Wyjatek Data dzialne za inicjalizacjÄ™ odpowied- RAM wystarczy do rejestru MEM-
Abort */
nich układów peryferyjnych. MAP wpisać wartość 2. W przypad-
NOP /* Za-
rezerwowany */ ku, gdy korzystamy z dołączonego
LDR PC, [PC, # 0x0FF0] /* Wektor
Rejestr MEMMAP mapowanie pliku startowego boot.s za wpisa-
Przerwania INT */
LDR PC, FIQ_Addr /* Wektor
pamięci nie tej wartości do rejestru MEM-
Przerwania FIQ */
Jak już wcześniej wspomniano, MAP odpowiada poniższy fragment
W momencie wystąpienia sytuacji mikrokontroler może wykonywać kodu, który jest kompilowany tylko
wyjątkowej, rdzeń mikrokontrolera program z pamięci Flash, RAM lub w przypadku wystąpienia definicji
wykonuje skok pod odpowiedni ad- w przypadku mikrokontrolerów RAM_INTVEC:
.ifdef RAM_INTVEC
res w tablicy wektorów wyjątków. Po z zewnętrzną magistralą również
LDR R0, =MEMMAP ;do rejestru
wyzerowaniu mikrokontrolera wyko- z zewnętrznej pamięci. Aby to było
R0 wpisz adres rejestru SFR MEMMAP
MOV R1, #2 ;do rejestru R1
nanie programu rozpoczyna się od możliwe musi istnieć mechanizm
Rys. 26.
Elektronika Praktyczna 9/2006
98
K U R S
Tab. 6. Funkcje bitów rejestru PLLCON (0xE01FC080)
Rejestr PLLFEED umieszczo-
Wart. ny jest pod adresem 0xE01FC08C
Bit Nazwa Opis
pocz.
i przeznaczony tylko do zapisu. Jest
Bit załączający pętlę PLL. Ustawienie tego bitu powoduje uruchomienie
on wykorzystywany do zabezpie-
[0] PLLE 0
i rozpoczęcie procesu synchronizacji pętli PLL.
czenia rejestrów PLLCON i PLLCFG
Ustawienie tego bitu powoduje podłączenie wyjścia pętli PLL jako zródła
przed przypadkowÄ… zmianÄ… zawarto-
[1] PLLC taktującego mikrokontroler. Podłączenie sygnału zegarowego nastąpi tylko 0
ści, np. w wyniku błędnego działa-
wtedy gdy bit PLLE jest ustawiony.
nia programu. Wartości wpisane do
[7:2] Zarezerwowane
tych rejestrów nie zostaną przepisa-
ne do pętli PLL dopóki do PLLFE-
Tab. 7. Funkcje bitów rejestru
RAM mikrokontrolera. Najczęściej ED nie zostanie wpisana sekwencja
PLLCFG (0xE01FC084)
jednak będziemy pracować wykonu- 0xAA, 0x55.
Wart. jąc program z Flash a więc nie bę- Rejestr PLLCON umieszczo-
Bit Nazwa Opis
pocz.
dziemy dołączać powyższego frag- ny jest pod adresem 0xE01FC080
[4:0] MSEL Mnożnik (M) pętli PLL 0
mentu kodu. i zawiera bity konfiguracyjne jak
Podzielnik (P) pętli
w tab. 6. W tab. 7 zestawiono funk-
[6:5] PSEL 0
PLL
Konfiguracja pętli PLL oraz cje bitów rejestru PLLCFG (0xE-
[7] Zarezerwowane
sygnałów zegarowych 01FC084). Stany bitów [4:0] tego
Konfiguracja pętli PLL z reguły rejestru określają wartość mnożnika
wpisz wartość 2 (wektory w RAM)
wykonywana jest podczas urucha- M (tab. 8), a wartość podzielnika P
STR R1, [R0] ;przepisz zawar-
tość R1 pod adres z R0
miania systemu, dlatego kod zwią- określają stany bitów [6:5] (tab. 9).
.endif
zany z jej inicjalizacjÄ… umieszczono Rejestr PLLSTAT (0xE01FC080)
Jeżeli więc chcemy napisać pro- w asemblerowym pliku startowym jest przeznaczony tylko do odczy-
gram, który będzie się znajdował boot.s. Konfiguracja pętli PLL spro- tu i pozwala na sprawdzenie stanu
w pamięci RAM, musimy na począt- wadza się do ustawienia parame- pętli PLL. Funkcje jego bitów zesta-
ku pliku startowego boot.s umieścić trów mnożnika (MSEL) i podziel- wiono w tab. 10.
definicję .equ RAM_INTVEC, 1. nika (PSEL), włączenia pętli PLL, Jedyną czynnością, jakiej mu-
Spowoduje to włączenie powyższe- odczekania na synchronizację pętli, simy dokonać w pliku startowym
go fragmentu kodu do procedury a następnie przełączenia sygnału ze- boot.s w celu konfiguracji pętli
startowej, a więc wektory wyjątków garowego taktującego rdzeń z zegara PLL, jest przypisanie odpowied-
znajdować się będą w obszarze pa- wewnętrznego na sygnał wyjściowy nich wartości symbolom PLL_SE-
mięci RAM. Natomiast w przeciw- pętli. Z pętlą PLL związany jest na- TUP oraz PLLCFG_Val. Przypisanie
nym przypadku rejestr zawiera war- stępujący zestaw rejestrów SFR mi- symbolowi PLL_SETUP wartości
tość domyślną 0, w efekcie czego krokontrolera: 1 powoduje dołączenie kodu ini-
do wektorów wyjątków podstawiany PLLFEED rejestr zabezpiecza- cjalizującego pętlę PLL. Natomiast
jest obszar pamięci Flash. W ten jący do którego wpisanie sekwencji gdy symbol ten przyjmie wartość
prosty sposób definiując, lub nie, 0xAA, 0x55 powoduje przepisanie 0 wówczas kod inicjalizujący nie
w pliku boot.s symbol RAM_INTVEC zawartości rejestrów konfiguracyj- będzie dołączony i mikrokontroler
możemy sterować uruchamianiem nych, co pozwala zabezpieczyć się będzie pracował z częstotliwością
kodu programu z pamięci Flash lub przed nieoczekiwaną modyfikacją sygnału zegarowego. Wartość sym-
rejestrów. bolu PLLCFG_Val określa zawartość
Tab. 8. Wartość mnożnika M w zależ- PLLCON rejestr odpowiedzial- rejestru PLLCFG jaka będzie wpi-
ności od stanu bitów [4:0] rejestru
ny za włączanie pętli PLL oraz za sana przez procedurę inicjalizacyj-
PLLCFG
wybór zródła sygnału zegarowego ną, a co za tym idzie wyznacza
M (PLLCFG bity
taktującego mikrokontroler. ona mnożnik M oraz podzielnik
Mnożnik M
[4:0])
PLLCFG rejestr którego za- P. Na przykład, gdy mamy mikro-
00000 1
pis powoduje ustawienie mnożnika kontroler pracujący z rezonatorem
00001 2
(MSEL) oraz podzielnika (PSEL). kwarcowym 12 MHz (tak jak w ze-
00010 3 PLLSTAT rejestr zawierający stawie ZL6ARM) a chcielibyśmy
00011 4 status pętli PLL. uzyskać częstotliwość taktowania
00100 5
Tab. 10. Funkcje bitów rejestru PLLSTAT (0xE01FC080)
& .
Wart.
11101 31
Bit Nazwa Opis
pocz.
11111 32
[4:0] MSEL Odczyt mnożnika (M) pętli PLL 0
[6:5] PSEL Odczyt podzielnika (P) pętli PLL 0
Tab. 9. Wartość podzielnika P w za-
[7] Zarezerwowane
leżności od stanu bitów [6:5] rejestru
[8] PLLE Odczyt stanu bitu PLLE 0
PLLCFG
[9] PLLC Odczyt stanu bitu PLLC 0
P (PLLCFG bity [6:5]) Podzielnik P
Bit ten pozwala sprawdzić stan synchronizacji pętli PLL. Gdy jest
00 1
on ustawiony oznacza to że pętla dostarcza stabilnej częstotliwości
[10] PLOCK 0
01 2
wyjściowej mogącej stanowić zródło sygnału zegarowego dla mikrokon-
10 4 trolera.
11 8 [15:11] Zarezerwowane
Elektronika Praktyczna 9/2006
99
K U R S
;Wyślij 0xAA do PLLFEED
Tab. 11. Funkcje bitów rejestru VPBDIV (0xE01FC100)
STR R2, [R0, #PLLFEED_OFS]
Wart. ;Wyślij 0x55 do PLLFEED
Bit Nazwa Opis
.endif
pocz.
00 Układy peryferyjne pracują z ź częstotliwości procesora (CClk)
Gdy nie będziemy korzystać
01 Układy peryferyjne pracują z częstotliwością procesora
z trybu POWER DOWN podczas
[1:0] VPBDIV 0
10 UkÅ‚ady peryferyjne pracujÄ… z ½ czÄ™stotliwoÅ›ci procesora
działania programu, nie będziemy
11 Zarezerwowane
musieli już ingerować w konfigura-
[7:2] Zarezerwowane
cję pętli PLL. Musimy bezwzględ-
nie pamiętać, że przejście mikro-
.if PLL_SETUP
mikrokontrolera 60 MHz, wykonu- kontrolera w tryb Power Down po-
LDR R0, =PLL_BASE ;Do R0 wpisz
jemy następujące czynności: Wy- adres bazowy rejestrów PLL woduje wyłączenie pętli PLL i gdy
MOV R1, #0xAA ;Do R1 wpisz
znaczamy wartość mnożnika M=C- mikrokontroler wyjdzie ze stanu
wartość 0xAA
Clk/Fosc=60 MHz/12 MHz=5; wy- MOV R2, #0x55 ;Do R2 wpisz
uśpienia konieczna będzie ponow-
wartość 0x55
znaczamy wartość podzielnika P na inicjalizacja pętli PLL.
# Konfiguracja pętli PLL
według wzoru: P=Fcco/(Cclk*2), Oprócz uruchomienia pętli PLL
MOV R3, #PLLCFG_Val ;Do R3 wpisz
jako Fcco podstawiamy minimal- wartość mnożnika i podzielnika
musimy jeszcze ustawić dzielnik czę-
STR R3, [R0, #PLLCFG_OFS] ;Wy-
ną i maksymalną dozwolona czę- stotliwości taktujący układy peryfe-
ślij zawartość R3 do rejestru PLLCFG
stotliwość pracy generatora CCO: MOV R3, #PLLCON_PLLE ; ryjne mikrokontrolera. Dokonać tego
W R3 ustawiony bit PLLE
P=156 MHz/(60 MHz*2)=1,3 oraz możemy poprzez modyfikację rejestru
STR R3, [R0, #PLLCON_OFS] ;
Wyślij R3 do rejestru PLLCON
P=320 MHz/(60 MHz*2)=2,66. VPBDIV (0xE01FC100), którego za-
STR R1, [R0, #PLLFEED_OFS] ;
Zgodnie z tab. 9 jedyną wartością wartość przedstawiono w tab. 11.
Wyślij sekwencję 0xAA
STR R2, [R0, #PLLFEED_OFS] ;
podzielnika, którą można ustawić Aby ustawić odpowiednie war-
Wyślij sekwencję 0x55
w rejestrze PLLCFG i która mieści tości podzielnika VPBDIV musimy
się w wyliczonym przedziale jest Po tej czynności następuje cy- w pliku startowym (boot.s) odnalezć
P=2; z tab. 8 i 9 wyznaczamy war- kliczne sprawdzanie w pętli bitu następujące linie:
.equ VPBDIV_SETUP, 1
tość symbolu PLLCFG_Val określa- PLOCK w rejestrze PLLSTAT w celu
.equ VPBDIV_Val, 0x00000001
jącego zawartość rejestru PLLCFG, oczekiwania na prawidłową syn-
która dla tego przypadku powinna chronizację, co realizuje poniższy Jeżeli chcemy zmodyfikować
wynosić 0x24; w pliku boot.s od- fragment kodu: zawartość rejestru VPBDIV usta-
najdujemy następujące linie i zmie- PLL_Loop: LDR R3, [R0, #PLLSTAT_
wiamy symbol VPBDIV_SETUP na
OFS] ;Załaduj zawartość rejestru
niamy przypisane wartości na takie wartość różną od zera oraz sym-
PLLSTAT do R3
ANDS R3, R3, #PLLSTAT_PLOCK ;Wy-
jak poniżej: bolowi VPBDIV_Val przypisujemy
konaj AND z bitem PLOCK
.equ PLL_SETUP, 1
wartość odpowiadającą zawartości
BEQ PLL_Loop ;Jeżeli bit
.equ PLLCFG_Val,
PLOCKnie jest ust. to skocz
rejestru VPBDIV, zgodnie z tab. 11.
0x00000024
Teraz omówimy fragment kodu Gdy bit PLOCK jest ustawio- Układy peryferyjne mikrokontro-
z pliku boot.s odpowiedzialny za ny, mamy pewność że pętla PLL lerów LPC, w odróżnieniu np. od
konfigurację pętli PLL. Najpierw do generuje stabilny sygnał zegarowy, STR711, mogą pracować z pełną
rejestru PLLCFG zapisywana jest możemy więc podłączyć jej wyj- częstotliwością zegara procesora.
zawartość symbolu PLLCFG_Val ście jako sygnał zegarowy taktujący Jednak praca układów peryferyj-
oraz załączana jest pętla PLL po- mikrokontroler ustawiając bit PLLC nych ze zmniejszoną prędkością
przez ustawienie bitu PLLE w reje- w rejestrze PLLCON, co realizuje może być przydatna w przypadku,
strze PLLCON. Przy czym fizyczne poniższy fragment kodu: gdy zależy nam na zmniejszeniu
# WÅ‚Ä…cz zegar z PLL
przepisanie zawartości rejestrów do poboru prądu pobieranego przez
MOV R3, #(PLLCON_PLLE | PLL-
pętli następuje po ostatniej sekwen- mikrokontroler.
CON_PLLC) ;W R3 wpisz ustawione bity
STR R3, [R0, #PLLCON_OFS]
cji zapisujÄ…cej do rejestru PLLFEED Lucjan Bryndza SQ7FGB
;Wyślij R3 do PLLCON
wartości 0x55: lucjan.bryndza@ep.com.pl
STR R1, [R0, #PLLFEED_OFS]
Elektronika Praktyczna 9/2006
100
Wyszukiwarka
Podobne podstrony:
Mikrokontrolery ARM cz1Mikrokontrolery ARM cz14Mikrokontrolery ARM cz8Mikrokontrolery ARM cz12Mikrokontrolery ARM cz15Mikrokontrolery ARM cz21Mikrokontrolery ARM cz19Mikrokontrolery ARM cz3Mikrokontrolery ARM cz6Mikrokontrolery ARM cz22Mikrokontrolery ARM cz18Mikrokontrolery ARM cz18Mikrokontrolery ARM cz11Mikrokontrolery ARM cz13Mikrokontrolery ARM cz17Mikrokontrolery ARM cz5Mikrokontrolery ARM cz20Mikrokontrolery ARM cz7Mikrokontrolery ARM cz9więcej podobnych podstron