Mikrokontrolery_ARM_cz2.pdf

(1412 KB) Pobierz
ep_01_093-095_arm_cz2.indd
K U R S
Mikrokontrolery
z rdzeniem ARM , część 2
W większości obecnie
prezentowanych (nie tylko w EP)
projektów królują mikrokontrolery
8–bitowe. Dawniej była to
nieśmiertelna rodzina 8051,
obecnie panuje moda na AVR–y.
Dotychczas użycie 32–bitowych
mikrokontrolerów pozostawało
w sferze marzeń przeciętnego
konstruktora ze względu na
wysoką cenę, skomplikowane
rozwiązania układowe
wymagające prowadzenia na
płytkach 32–bitowych magistral
systemowych oraz konieczność
stosowania dodatkowych
układów zewnętrznych. Sytuacja
uległa diametralnej zmianie
w momencie pojawienia się
na rynku mikrokontrolerów
z rdzeniem ARM i wbudowaną
pamięcią Flash, najpierw firmy
Philips LPC21xx i wkrótce
później Atmela AT91SAM7, ATM
– rodzina STR700 i wielu innych
producentów.
w tab. 1 . Na przykład
rejestr R13 w trybie
systemowym zamie-
niany jest na rejestr
R13_sys.
Musimy pamiętać,
że przy zmianie trybu
ochrony nie wszystkie
rejestry są podmienia-
ne. W trybie FIQ pod-
mieniane są rejestry
R8…R14. Natomiast w pozostałych
trybach tylko rejestry R13 oraz R14.
Tryb FIQ podmienia więcej re-
jestrów niż pozostałe, ponieważ
jest on wykorzystywany do obsłu-
gi krytycznych czasowo przerwań.
Gdyby tryb ten zapisywał tylko
rejestry R13, R14 pozostałe trzeba
by było zachować w sposób pro-
gramowy, co spowodowałoby to
dodatkową stratę czasu.
Oprócz rejestrów R0…R15 do
dyspozycji mamy rejestr CPSR
( Current Program Status Register ),
który jest rejestrem słowa stanu
procesora. Zawiera on znaczniki
wyniku wykonanych operacji aryt-
metycznych i logicznych, flagi po-
zwalające na kontrolę przyjmowa-
nia przerwań, oraz bity ustawień
trybu ochrony. Gdy procesor znaj-
duje się w trybie uprzywilejowanym
dodatkowo widoczny jest rejestr
SPSR ( Saved Program Status Regi-
ster ), będący kopią rejestru CPSR,
utworzoną tuż przed zmianą trybu
ochrony. Na przykład w momencie
przyjęcia przerwania rejestr statu-
su CPSR jest kopiowany do SPSR,
a po zakończeniu procedury obsługi
przerwania jest on ponownie kopio-
wany do CPSR. Gdyby zawartość
rejestru flag nie była kopiowana
program sam musiałby troszczyć
się o odtworzenie jego zawartości.
Wszystkie rejestry R0…R15 są
równouprawnione i można na nich
wykonywać wszystkie operacje znaj-
Rejestry
Rdzeń ARM7TDMI–S posiada
łącznie 31 rejestrów ogólnego prze-
znaczenia oraz 6 rejestrów statusu
(flag), przy czym programista ma
dostęp jednocześnie do 16 reje-
strów R0…R15. Pozostałe rejestry
są używane zamiennie z rejestrami
R0…R15. Gdy mikroprocesor zo-
stanie przełączony z trybu ochrony
użytkownika na inny tryb część
rejestrów zostaje podmieniona. Na
przykład, gdy w wyniku wystąpie-
nia przerwania zostanie zmieniony
tryb z użytkownika na IRQ rejestry
R0…R12 i R15 pozostaną te same,
natomiast w miejsce rejestrów R13
i R14 zostanie podstawiony prywat-
ny rejestr wykorzystywany przez
tryb IRQ, nazwany R13_IRQ i R14_
IRQ. Wykonanie instrukcji MOVS
R13,#100 podczas gdy procesor
znajduje się w trybie IRQ powo-
duje wpisanie do rejestru R13_IRQ
wartości 100, natomiast rejestr R13
pozostanie nienaruszony. Rejestry
prywatne w trybach ochrony przyj-
mują identyfikatory przedstawione
Rys. 3. Mapa rejestrów procesora (w trybie ARM)
Elektronika Praktyczna 1/2006
93
196534751.175.png 196534751.186.png 196534751.197.png 196534751.208.png
K U R S
Rys. 4. Mapa rejestrów procesora (w trybie Thumb)
jak AVR czy 8051 wywołanie pod-
programu odbywa się za pomocą
instrukcji CALL, która powoduje
zapamiętanie licznika rozkazów na
stosie oraz skok do podprogramu.
Powrót z podprogramu wykonywa-
ny jest za pomocą instrukcji RET,
która odtwarza ze stosu zawar-
tość licznika rozkazów. Ponieważ
w ARM7 stos jest realizowany na
drodze programowej i nie jest nie-
zbędny do pracy systemu, skok
do podprogramu realizowany jest
za pomocą instrukcji BL ( Branch
Link ). Instrukcja ta działa w ten
sposób, że kopiuje zawartość licz-
nika rozkazów PC (R15), do reje-
stru LR (R14) Link Register , a na-
stępnie wykonuje skok pod wska-
zany adres. Powrót z podprogramu
odbywa się poprzez skopiowanie
zawartości rejestru LR z powrotem
do licznika rozkazów PC. Wyraźnie
widać tutaj zaletę równouprawnie-
nia wszystkich rejestrów, ponieważ
zbędne staje się użycie specjalnych
rozkazów operujących na liczni-
ku rozkazów np. RET czy RETI.
W przypadku zagnieżdżenia podpro-
gramów, czyli skoku z podprogramu
do innego podprogramu, użytkow-
nik musi sam zatroszczyć się o za-
pamiętanie rejestru LR (R14) przed
skokiem do kolejnego podprogramu,
a następnie po wyjściu z zagnież-
dżonego podprogramu powinien
odtworzyć jego zawartość. Do zapa-
miętania rejestru LR (R14) można
wykorzystać np. stos lub dowol-
ny obszar pamięci. W pozostałych
przypadkach, gdy nie używamy
rozkazu BL, rejestr R14 może być
wykorzystany w dowolnym celu.
Chociaż R13 nie ma szczególnego
zastosowania wyznaczonego przez
architekturę procesora, najczęściej
oprogramowanie wykorzystuje ten
dujące się na liście rozkazów. Dwa
z nich spełniają szczególne funkcje:
Rejestr R15 jest licznikiem rozka-
zów PC ( Program Counter ), do jego
zawartości można się odwoływać
za pomocą wielu instrukcji. Na
przykład skok pod wskazany adres
można zrealizować poprzez wpisa-
nie określonej wartości instrukcją
MOV do rejestru R15. W typowych
mikrokontrolerach np. w AVR nie
ma możliwości wykonywania ja-
kichkolwiek operacji bezpośrednio
na zawartości licznika rozkazów.
Kolejnym rejestrem pełniącym do-
datkową funkcję jest rejestr R14,
wykorzystywany jako Link Register
(LR) . W mikrokontrolerach takich
Tab. 1. Tryby ochrony procesora i wynikające z nich dozwolone ustawienia bitów
Bity M[4..0] Tryb Widoczne rejestry trybuTHUMB Widoczne rejestry trybu ARM
10000 User R0–R7, SP, LR, PC, CPSR
R0–R14, PC,CPSR
10001 FIQ
R0–R7, SP_fiq, LR_fiq, PC, CPSR,
SPSR_fiq
R0–R7, R8_fiq–R14_fiq, PC, CPSR,
SPSR_fiq
10010 IRQ
R0–R7, SP_irq, LR_irq, PC, CPSR,
SPSR_irq
R0–R12, R13_irq–R14_irq, PC,
CPSR, SPSR_irq
10011 Supervisor
R0–R7, SP_svc, LR_svc, PC,
CPSR, SPSR_svc
R0–R12, R13_svc–R14_svc, PC,
CPSR, SPSR_svc
10111 Abort
R0–R7, SP_abt, LR_abt, PC,
CPSR, SPSR_abt
R0–R12, R13_abt–R14_abt, PC,
CPSR, SPSR_abt
11011 Undefined
R0–R7, SP_und LR_und, PC,
CPSR, SPSR_und
R0–R12, R13_und–R14_und, PC,
CPSR, SPSR_und
11111 System R0–R7, SP, LR, PC, CPSR
R0–R14, PC,CPSR
94
Elektronika Praktyczna 1/2006
196534751.001.png 196534751.012.png 196534751.023.png 196534751.034.png 196534751.045.png 196534751.056.png 196534751.067.png 196534751.078.png 196534751.089.png 196534751.100.png 196534751.111.png 196534751.122.png 196534751.133.png 196534751.138.png 196534751.139.png 196534751.140.png 196534751.141.png 196534751.142.png 196534751.143.png 196534751.144.png 196534751.145.png 196534751.146.png 196534751.147.png 196534751.148.png 196534751.149.png 196534751.150.png 196534751.151.png 196534751.152.png 196534751.153.png 196534751.154.png 196534751.155.png 196534751.156.png 196534751.157.png 196534751.158.png 196534751.159.png 196534751.160.png 196534751.161.png 196534751.162.png 196534751.163.png 196534751.164.png 196534751.165.png 196534751.166.png 196534751.167.png 196534751.168.png 196534751.169.png 196534751.170.png 196534751.171.png 196534751.172.png 196534751.173.png 196534751.174.png 196534751.176.png 196534751.177.png 196534751.178.png 196534751.179.png 196534751.180.png 196534751.181.png 196534751.182.png 196534751.183.png 196534751.184.png 196534751.185.png 196534751.187.png 196534751.188.png 196534751.189.png 196534751.190.png 196534751.191.png 196534751.192.png 196534751.193.png 196534751.194.png 196534751.195.png 196534751.196.png 196534751.198.png 196534751.199.png 196534751.200.png 196534751.201.png 196534751.202.png 196534751.203.png 196534751.204.png 196534751.205.png 196534751.206.png 196534751.207.png 196534751.209.png 196534751.210.png 196534751.211.png 196534751.212.png 196534751.213.png 196534751.214.png 196534751.215.png 196534751.216.png 196534751.217.png 196534751.218.png 196534751.002.png 196534751.003.png 196534751.004.png 196534751.005.png 196534751.006.png 196534751.007.png 196534751.008.png 196534751.009.png 196534751.010.png 196534751.011.png 196534751.013.png 196534751.014.png 196534751.015.png 196534751.016.png 196534751.017.png 196534751.018.png 196534751.019.png 196534751.020.png 196534751.021.png 196534751.022.png 196534751.024.png 196534751.025.png 196534751.026.png 196534751.027.png 196534751.028.png 196534751.029.png 196534751.030.png 196534751.031.png 196534751.032.png 196534751.033.png 196534751.035.png 196534751.036.png 196534751.037.png 196534751.038.png 196534751.039.png 196534751.040.png 196534751.041.png 196534751.042.png 196534751.043.png 196534751.044.png 196534751.046.png 196534751.047.png 196534751.048.png 196534751.049.png 196534751.050.png 196534751.051.png 196534751.052.png 196534751.053.png 196534751.054.png 196534751.055.png 196534751.057.png 196534751.058.png 196534751.059.png 196534751.060.png 196534751.061.png 196534751.062.png 196534751.063.png 196534751.064.png 196534751.065.png 196534751.066.png 196534751.068.png 196534751.069.png 196534751.070.png 196534751.071.png 196534751.072.png 196534751.073.png 196534751.074.png 196534751.075.png 196534751.076.png 196534751.077.png 196534751.079.png 196534751.080.png 196534751.081.png 196534751.082.png 196534751.083.png 196534751.084.png 196534751.085.png 196534751.086.png 196534751.087.png 196534751.088.png 196534751.090.png 196534751.091.png 196534751.092.png 196534751.093.png 196534751.094.png 196534751.095.png 196534751.096.png 196534751.097.png 196534751.098.png 196534751.099.png 196534751.101.png 196534751.102.png 196534751.103.png 196534751.104.png 196534751.105.png 196534751.106.png 196534751.107.png 196534751.108.png 196534751.109.png 196534751.110.png 196534751.112.png 196534751.113.png 196534751.114.png 196534751.115.png 196534751.116.png 196534751.117.png 196534751.118.png 196534751.119.png 196534751.120.png 196534751.121.png 196534751.123.png 196534751.124.png 196534751.125.png 196534751.126.png 196534751.127.png 196534751.128.png 196534751.129.png 196534751.130.png 196534751.131.png
K U R S
Rys. 5. Sposób mapowania rejestrów z trybu Thumb na
tryb ARM
tację oddzielnych
stosów dla każde-
go trybu. Na dobrą
sprawę gdybyśmy
chcieli używać tyl-
ko jednego stosu
dla wszystkich try-
bów, równie dobrze
jako wskaźnik stosu
możnaby użyć inne-
go rejestru z zakresu
R0…R12.
Instrukcje proce-
sora ARM umożli-
wiają implementację
wszystkich rodzajów
stosu: rosnący lub
malejący, wskazują-
cy na ostatni zajęty
element lub pierw-
szy wolny. Wszystko
zależy od programu
lub, w bardziej za-
awansowanych apli-
kacjach, od syste-
mu operacyjnego i nie jest sztywno
ustalone, jak w przypadku standar-
dowych architektur.
Na rys. 3 przedstawiono reje-
stry procesora (Tryb ARM) w po-
szczególnych trybach ochrony.
W 16–bitowym trybie THUMB
mamy do dyspozycji 32–bitowe re-
jestry R0…R7, LR, SP, PC, CPSR,
SPSR. Wszystkie rejestry są pod-
zbiorem rejestrów trybu ARM. Po-
nieważ lista rozkazów w tym trybie
jest zbliżona do zestawu instrukcji
standardowego mikroprocesora do
dyspozycji mamy rejestr wskaźnika
stosu implementowany sprzętowo.
Rejestry tego trybu są przedstawio-
ne na rys. 4 .
Rejestry z trybu THUMB są ma-
powane na rejestry trybu ARM
w sposób przedstawiony na rys. 5 .
W trybie THUMB rejestry R0…
R7 są nazywane zestawem dolnym,
natomiast rejestry R8…R15 są na-
zwane górnym zestawem rejestrów.
Górne rejestry nie są dostępne
w standardowym zestawie, ale moż-
na je wykorzystać jako pamięć tym-
czasową. Dostęp do górnych reje-
strów jest możliwy za pomocą spe-
cjalnego wariantu instrukcji MOV.
Lucjan Bryndza SQ7FGB
lucjan.bryndza@ep.com.pl
rejestr jako wskaźnik stosu (SP)
( Stack Pointer ), ponieważ jest on
bankowany we wszystkich trybach
ochrony. Umożliwia to implemen-
Elektronika Praktyczna 1/2006
95
196534751.132.png 196534751.134.png 196534751.135.png 196534751.136.png 196534751.137.png
Zgłoś jeśli naruszono regulamin