Mikrokontrolery ARM cz11


K U R S
Mikrokontrolery z rdzeniem
ARM, część 11
Obsługa układów peryferyjnych: PLL, VPB, MAM
Konfiguracja kontrolera Kontynuujemy opis konfiguracji wybranych peryferiów
pamięci MAM
mikrokontrolerów LPC213x. W tej części zajmujemy
 Kluczem do uzyskania du-
się modułem MAM, detektorem zaniku napięcia
żej szybkości pracy mikrokontro-
zasilającego oraz trybami oszczędzania energii.
lerów LPC jest kontroler pamięci
Flash umożliwiający uruchamianie
programu w pamięci Flash z mak- Tab. 12. Funkcje bitów w rejestrze konfiguracji MAM
symalną częstotliwością taktowania Wartość po-
Bit Nazwa Opis
czątkowa
wewnętrznego (60 MHz). Kontroler
00  Kontroler MAM wyłączony (Tryb 0)
MAM może pracować w następują-
01  Kontroler MAM częściowo włączony (Tryb 1)
cych trybach (rys. 27):
[1:0] MAMMC 0
10  Kontroler MAM włączony (Tryb 2)
 tryb 0  kontroler MAM jest
11  Zarezerwowane.
wyłączony i wszystkie instruk-
[7:2]  Zarezerwowane 
cje są pobierane z wewnętrznej
pamięci Flash. W tym trybie
program umieszczony w pamię- MAMCR  rejestr określający gdy częstotliwość ta jest mniejsza
ci Flash będzie się wykonywał tryb pracy niż 20 MHz, wystarczy, że czas ten
wolno, ponieważ przy dostępie MAMTIM  rejestr określający będzie równy 1 cyklowi. W przypad-
do pamięci muszą być wstawia- liczbę cykli zegarowych jaka jest ku, gdy częstotliwość zawiera się
ne dodatkowe cykle oczekiwania użyta przy dostępie do pamięci w przedziale pomiędzy 20& 40 MHz,
(Wait States). Po wyzerowaniu Flash najodpowiedniejszą wartością czasu
mikrokontroler rozpoczyna pracę Stan bitów rejestru MAMCR będzie 2 cykle. Natomiast dla czę-
w tym trybie. (0xE01FC000) określa tryb pracy stotliwości większych od 40 MHz
 tryb 1  wszystkie instrukcje kontrolera MAM w sposób pokaza- musimy ustawić czas dostępu na 3
sekwencyjne są pobierane z kon- ny w tab. 12. cykle (tab. 13).
trolera MAM, natomiast instruk- Stan bitów rejestru MAMTIM Aby zainicjalizować w pliku
cje rozgałęzione oraz dane stałe (0xE01FC004) określa czas trwania startowym boot.s kontroler pamię-
pobierane są bezpośrednio z pa- dostępu do pamięci Flash w cyklach ci MAM, musimy przypisać sym-
mięci Flash. Użycie tego try- zegarowych procesora. W przypadku, bolowi MAM_SETUP wartość róż-
bu może dawać pewne korzyści
w stosunku do trybu pełnego,
gdy pracujemy z krótkimi frag-
mentami kodu rozgałęzionego lub
gdy chcemy aby dane zawarte
w pamięci Flash były z niej od-
czytywane bezpośrednio.
 tryb 2  wszystkie instrukcje
pobierane są z wykorzystaniem
kontrolera MAM. Wówczas każdy
dostęp do pamięci Flash odbywa
się z wykorzystaniem kontrolera
MAM. W większości przypadków
zapewnia to maksymalną wydaj- Rys. 27.
ność programu umieszczonego
Tab. 13. Funkcje bitów w rejestrze MAMTIM
w pamięci Flash, więc podczas
Bit Nazwa Opis Wartość początkowa
normalnej pracy będziemy korzy-
000  Zarezerwowane
stać z tego trybu.
001  1 cykl częstotliwości procesora (CCLK)
W większości przypadków praco-
010  2 cykl częstotliwości procesora (CCLK)
wać będziemy przy całkowicie włą-
011  3 cykl częstotliwości procesora (CCLK)
[2:0] MAMFCT 0x07
czonym kontrolerze MAM (Tryb 2),
100  4 cykl częstotliwości procesora (CCLK)
co zapewni maksymalną szybkość 101  5 cykl częstotliwości procesora (CCLK)
110  6 cykl częstotliwości procesora (CCLK)
wykonania programu. Do konfigura-
111  7 cykl częstotliwości procesora (CCLK)
cji kontrolera pamięci służą nastę-
[7:3]  Zarezerwowane 
pujące rejestry SFR:
Elektronika Praktyczna 10/2006
106
K U R S
.equ ABT_Stack_Size, 0x00000004
zmiana zawartości
;Rozmiar stosu trybu Abort
SFR musi odby- .equ FIQ_Stack_Size, 0x00000004
;Rozmiar stosu trybu FIQ
wać się z pomocą
.equ IRQ_Stack_Size, 0x00000100
;Rozmiar stosu trybu IRQ
rejestrów ogólnego
.equ USR_Stack_Size, 0x00000200
przeznaczenia.
;Rozmiar stosu trybu User
Zmieniając poszczególne warto-
Pozostałe ści liczbowe w powyższych liniach,
elementy pliku mamy możliwość kontrolowania in-
startowego dywidualnie poszczególnych rozmia-
O p r ó c z ko d u rów stosów dla wybranego trybu
związanego z kon- ochrony. W przypadku, gdy dany
figuracją urządzeń tryb ochrony nie będzie wykorzy-
mających wpływ stywany, należy ustawić najmniejszy
na działanie rdze- dopuszczalny rozmiar stosu, czyli 4
nia mikrokontrole- bajty. Natomiast dla trybów ochro-
ra, plik startowy ny, z których będziemy korzystać
ustawia rozmiar należy ustawić wielkość stosu od
Rys. 28. stosu dla każdego kilkudziesięciu do kilkuset bajtów
trybu ochrony pro- w zależności od liczby zagłębień
ną od 0. Spowoduje to dołączenie cesora. Zapewnia inicjalizację pa- w programie oraz maksymalnego roz-
kodu odpowiedzialnego za inicja- mięci zgodną ze standardem ANSI miaru zmiennych automatycznych.
lizację. Należy również symbolowi C/C++, czyli zeruje obszar pamięci Obszar stosu został umieszczony na
MAMCR_Val przypisać odpowied- danych niezainicjalizowanych oraz końcu pamięci RAM mikrokontrole-
nią wartość zgodnie z tab. 12 oraz inicjalizuje obszar pamięci danych ra, przy czym poszczególne wskaz-
symbolowi MAMTIM_Val przypisać zainicjalizowanych. Wywołuje in- niki stosów wskazują na wierzchoł-
ilość cykli dostępu do pamięci dywidualne konstruktory obiektów ki stosów. Stos zorganizowany jest
zgodnie z tab. 13. Poniżej przedsta- globalnych, czyli specjalne metody w kierunku adresów malejących.
wiono definicję symboli dla najczę- klas odpowiedzialne za inicjaliza- Odłożenie wybranego rejestru na
ściej wykorzystywanego trybu pracy cję obiektów, a na końcu wywołuje stos powoduje zmniejszenie adresu
z częstotliwością w okolicy 60 MHz, funkcję główną programu (main). wskaznika wierzchołka, a następnie
z całkowicie włączonym kontrole- Po zakończeniu działania programu umieszczenie pod tym adresem wy-
rem MAM oraz zdefiniowanym cza- kod zawarty w pliku startowym wy- branego rejestru. Na rys. 28 przed-
sem dostępu na 3 cykle zegarowe wołuje destruktory obiektów global- stawiono organizację poszczególnych
CCLK: nych, czyli specjalne metody wy- stosów w pamięci mikrokontrolera.
.equ MAM_SETUP, 1
woływane w celu zakończenia życia Aby ustawić wskaznik stosu
.equ MAMCR_Val, 0x00000002
obiektu. Ostatnią czynnością jaką w wybranym trybie ochrony, należy
.equ MAMTIM_Val, 0x00000003
Za inicjalizację kontrolera MAM wykonuje kod startowy jest wejście wejść w ten tryb poprzez modyfika-
odpowiada poniższy fragment kodu, w nieskończoną pętlę, ponieważ cję rejestru znaczników CPSR, a na-
który wpisuje do rejestrów kontro- poza programem nie istnieje już ża- stępnie należy ustawić wskaznik
lera MAM odpowiednie wartości den system nadrzędny. W przypad- stosu SP (R13) tak, aby wskazywał
zgodnie z wartościami przypisanymi ku, gdyby program działał pod kon- na żądany adres.
do symboli: trolą systemu operacyjnego, ostatnią Poniżej przedstawiono fragment
.if MAM_SETUP
czynnością byłoby oddanie kontroli kodu odpowiedzialnego za ustawienie
LDR R0, =MAM_BASE ;Do R0 adres
do systemu. Za konfigurację stosów wskaznika stosu w trybie Undefined:
bazowy MAM
MOV R1, #MAMTIM_Val ;Do R1 zawar-
LDR R0, =Top_Stack ;Do R0 wierz-
dla różnych trybów ochrony odpo-
tość rejestru MAMTIM
chołek stosu
STR R1, [R0, #MAMTIM_OFS] ; Za- wiedzialne są następujące symbole
# Stos dla trybu Undefined
pisz R1 do rejestru MAMTIM
MSR CPSR_c, #Mode_UND|I_ Bit|F_Bit
w pliku startowym boot.s:
MOV R1, #MAMCR_Val ;Do R1 za-
;Wejdz w tryb undefined
wartość rejestru MAMCR #Ustawienia stosu
MOV SP, R0 ;Ust wskaznik sto-
STR R1, [R0, #MAMCR_OFS] ;Za- .equ Top_Stack, 0x40008000
su na wierzchołek
pisz R1 do rejestru MAMCR ;Adres określający wierzchołek stosu
SUB R0, R0, #UND_Stack_Size
.endif .equ UND_Stack_Size, 0x00000004
;Odejmij rozmiar stosu trybu UNDEF
;Rozmiar stosu trybu Undefined
Działanie tego fragmentu progra- Kod startowy przechodzi po ko-
.equ SVC_Stack_Size, 0x00000004
;Rozmiar stosu trybu Supervisor
mu sprowadza się do przepisania lei przez wszystkie tryby ochrony
wartości symbolu MAMTIM_Val do
rejestru SFR MAMTIM oraz sym- Tab. 14. Funkcje bitów w rejestrze RSIR
bolu MAMCR_Val do rejestru SFR
Bit Nazwa Opis
MAMCR. Przepisanie zawartości od-
Ustawienie tego bitu oznacza, że mikrokontroler został wyzerowany w wyniku jego
[0] POR
bywa się pośrednio poprzez wpisa- włączenia. Ustawienie tego bitu powoduje wyzerowanie pozostałych.
nie odpowiedniej liczby do rejestru
[1] EXTR Bit ten jest ustawiany w wyniku wystąpienia sygnału zewnętrznego zerowania
R1, a następnie przepisaniu zawarto-
Bit ten jest ustawiany w wyniku zadziałania układu Watchdog i jest kasowany
[2] WDTR
w wyniku wystąpienia jakiejkolwiek innej przyczyny zerowania.
ści tego rejestru do odpowiedniego
rejestru SFR. Jak pamiętamy rdzeń Bit ten jest ustawiany jeżeli zerowanie nastąpiło w wyniku zadziałania układu
[3] BODR detektora napięcia. Bit ten nie jest kasowany w wyniku ustawienia bitu WDTR albo
ARM nie może wykonywać żadnych
EXTR.
operacji bezpośrednio na pamięci,
[7:4]  Zarezerwowane
którą także są rejestry SFR, dlatego
Elektronika Praktyczna 10/2006
107
K U R S
i w każdym z nich oddzielnie usta- Tab. 15. Funkcje bitów w rejestrze PCON
wia wskaznik stosu. Musimy pa- Wartość
Bit Nazwa Opis
początkowa
miętać, że jako ostatni powinien
Ustawienie tego bitu powoduje przejście mikrokontrolera w tryb Idle
być inicjalizowany wskaznik stosu
czyli sygnał zegarowy dla jednostki centralnej zostaje wyłączony,
trybu użytkownika, ponieważ nie
[0] IDL natomiast pozostałe układy peryferyjne pracują. Jeżeli wystąpi jakieś 0
ma możliwości jawnego opuszczenia
przerwanie od układu peryferyjnego, jednostka centralna jest urucha-
tego trybu. Po ustawieniu wskaz-
miana i kontynuuje wykonanie przerwanego programu
ników stosów inicjalizowana jest
Ustawienie tego bitu powoduje przejście mikrokontrolera w tryb
pamięć RAM zgodnie z wymogami
Power Down, powoduje wyłączenie generatora sygnału zegarowego
taktującego mikrokontroler. Jednym sposobem na wyjście z tego trybu
języka ANSI C/C++. Najpierw ze-
[1] PD jest zerowanie mikrokontrolera lub obudzenie na skutek przerwania 0
rowana jest sekcja .bss zawierająca
zewnętrznego lub alarmu od zegara RTC. Należy pamiętać, że gdy
niezainicjalizowane zmienne global-
mikrokontroler wyjdzie z tego trybu musimy ponownie skonfigurować
ne, które zgodnie z definicją powin-
pętlę PLL.
ny przyjąć wartość 0. Czynność tę
Ustawienie tego bitu powoduje, że detektor zaniku napięcia zasilają-
realizuje poniższy fragment kodu:
cego, gdy mikrokontroler wejdzie w tryb Power Down jest wyłączany,
# Wyczyść sekcje .bss (Inicjaliza- [2] PDBOT zapobiegając w ten sposób wyjściu z tego trybu w wyniku obniżenia 0
cja 0)
napięcia zasilającego. Gdy ten bit jest ustawiony detektor zaniku
MOV R0, #0 ;Do R0 wpisz 0
napięcia pracuje również w trybie Power Down.
LDR R1, =__bss_start__ ;Do R1
adr. pocz. danych
[7:3]  Zarezerwowane
LDR R2, =__bss_end__ ;Do R2
adr. końca danych
LoopZI: CMP R1, R2
pętli
;Porównaj R2 z R3 Detektor zaniku napięcia
ctor_end:
STRLO R0, [R1], #4 ;Do ko-
zasilającego oraz identyfikacja
mórki pam. z R1 wpisz zawartość R0
zmniejsz index tylko wtedy gdy nie Chcielibyśmy zwrócić szczegól- zródła zerowania
koniec segmentu
ną uwagę Czytelników na sposób, Zbyt niskie napięcie zasilające mi-
BLO LoopZI ;Jeśli w obsza-
rze .bss to skocz
w jaki odbywa się uruchomienie krokontroler może spowodować nie-
Następnie kopiowany jest do konstruktorów. Widać tutaj wielką prawidłową pracę programu objawia-
sekcji .data w obszarze pamięci zaletę równouprawnienia wszystkich jącą się nieokreślonym zachowaniem,
RAM fragment pamięci Flash prze- rejestrów rdzenia. Uruchomienie na przykład skokiem w nieokreślone
chowujący wartości początkowe danej procedury sprowadza się do miejsce pamięci, co w przypadku sys-
zmiennych zainicjalizowanych. Pro- wprowadzenia do licznika rozkazów temów mikroprocesorowych sterujący-
cedura kopiująca jest podobna do PC (R15) adresu podprogramu, co mi ważnymi procesami może mieć
poprzedniej z tą różnicą, że dane jest nie do pomyślenia w większo- opłakane skutki. Dlatego w większo-
odczytywane z pamięci Flash wpi- ści mikrokontrolerów o tradycyjnej ści współczesnych mikrokontrolerów
sywane są do rejestru R0, skąd architekturze. Po zainicjalizowaniu wprowadzono detektor zaniku napię-
następnie wędrują do sekcji .data wszystkich obiektów poprzez wy- cia zasilającego, który w przypadku
zawartej w pamięci RAM. Pętla ta wołanie ich konstruktorów nastę- zbyt niskiego napięcia zasilającego
zapewnia odpowiednie ustawie- puje uruchomienie funkcji głównej utrzymuje mikrokontroler w sta-
nie zmiennych zainicjalizowanych main: nie zerowania. W mikrokontrolerach
#Wywołaj funkcję main
zgodnie z wartościami przypisany- LPC213x detektor posiada dwa progi
LDR R2, =main
mi tym zmiennym w kodzie pro- MOV LR, PC
zadziałania. W przypadku, gdy napię-
MOV PC, R2
gramu. cie zasilające spadnie poniżej 2,9 V,
Po zainicjalizowaniu obszaru Jeżeli funkcja main zakończy ustawiana jest flaga BOD (bit 20)
danych w pamięci RAM następuje działanie w pisanych przez nas w rejestrze VICRawIntr (0xFFFFF008),
uruchomienie po kolei wszystkich programach, co w zasadzie nigdy która może zgłosić przerwanie infor-
metod konstruktorów obiektów glo- nie będzie miało miejsca, wykony- mujące o zaniku napięcia zasilającego.
balnych, co zapewnia odpowiednie wany jest kod odpowiedzialny za Przerwanie to można wykorzystać na
zainicjalizowanie wszystkich obiek- wywołanie destruktorów. Destrukto- przykład do zapamiętania w pamięci
tów klas. Za wywołanie konstruk- ry klas są odpowiedzialne za wyko- EEPROM danych konfiguracyjnych.
torów odpowiedzialny jest poniższy nanie czynności mających na celu Natomiast, gdy napięcie spadnie po-
kod: zakończenie istnienia obiektu. Na niżej 2,6 V, wówczas mikrokontroler
LDR R0, =__ctors_start__ ;do R0
przykład zwolnienie pamięci przy- jest utrzymywany w stanie zerowania,
początek tablicy adresów konstrukto-
dzielonej dynamicznie. Kod odpo- co zapobiega błędnemu działaniu
rów ob. glob
LDR R1, =__ctors_end__ ;do R1
wiedzialny za wywołanie destruk- mikrokontrolera. Z punktu widzenia
koniec tablicy adresów konstruktorów
torów jest w zasadzie identyczny programisty istotne może być okre-
ob. glob
ctor_loop:
jak w przypadku wywołania kon- ślenie przyczyny z jakiej mikrokontro-
CMP R0, R1 ;Porównaj czy to
ostatni adres struktorów. Różnica polega jedynie ler został wyzerowany i w zależności
BEQ ctor_end ;Jeżeli tak to
na podstawieniu adresów procedur od sytuacji podjęcie odpowiednich
opuść pętle
LDR R2, [R0], #+4 ;Do R2 wpisz destruktorów __dtors_start__. Po czynności. Na przykład jeżeli sys-
adres konstruktora
opuszczeniu kodu odpowiedzialnego tem został wyzerowany z powodu za-
STMFD SP!, {R0 R1} ;Zapisz R0,R1
na stosie
za wywołanie destruktorów nie ma działania układu Watchdog, możemy
MOV LR, PC ;Do Link Reg (R14)
już więcej żadnych czynności do poinformować użytkownika o wystą-
przepisz licznik rozk. (R15)
MOV PC, R2 ;Do PC (R15) wpisz
wykonania dlatego ostatnią czyn- pieniu sytuacji krytycznej. Przyczynę
adres konstruktora
nością jest wejście mikrokontrolera zerowania mikrokontrolera możemy
LDMFD SP!, {R0 R1} ;Zdejmij ze
stosu R0,R1
w nieskończoną pętlę. określić poprzez zbadanie stanu bi-
B ctor_loop ;Skocz do początku
Elektronika Praktyczna 10/2006
108
K U R S
Tab. 16. Funkcje bitów w rejestrze PCONP
projektem. Po tej czynności przy-
Wartość stępujemy do kompilacji projektu,
Bit Nazwa Opis
początkowa
co możemy zrobić wydając z menu
[0]  Zarezerwowane 
polecenie Project >Build All. Jeżeli
[1] PCTIM1 Załączenie TIMER0 1
wszystko przebiegło poprawnie pro-
[2] PCTIM2 Załączenie TIMER1 1 jekt zostanie skompilowany, w wyni-
ku czego powstanie plik wynikowy
[3] PCUART0 Załączenie układu UART0 1
bodtst.hex. Aby sprawdzić działanie
[4] PCUART1 Załączenie układu UART1 1
poniższego programu musimy pod-
[5] PCPWM0 Załączenie układu PWM0 1
łączyć zestaw ZL6ARM do zasila-
[6]  Zarezerwowane 
cza regulowanego i ustawić napię-
[7] PCI2C0 Załączenie układu I2C0 1
cia wyjściowe, np. na poziomie 10
[8] PCSPI0 Załączenie układu SPI0 1
V, powinna wówczas zaświecić się
[9] PCRTC Załączenie układu RTC 1
dioda LED1. Następnie stopniowo
[10] PCSPI1 Załączenie układu SPI1 1
zmniejszamy napięcie zasilające do
[11]  Zarezerwowane 
momentu aż zapali się dioda LED0
Załączenie układu A/D0. Bit PDN w rejestrze AD0CR musi
i zgaśnie LED1, co oznacza ustawie-
[12] PCAD0 być wyzerowany przed wyzerowaniem tego bitu. Również ten 1
nie flagi przerwania od detektora
bit musi być ustawiony przed ustawieniem bitu PDN.
BOD. Możemy również przetesto-
[18:13]  Zarezerwowane 
wać działanie stanu rejestru RSIR
[19] PCI2CI Załączenie układu I2C1 1
obserwując stan diod D4& D0. Gdy
Załączenie układu A/D1. Bit PDN w rejestrze AD1CR musi
włączymy napięcie zasilające do
[20] PCAD1 być wyzerowany przed wyzerowaniem tego bitu. Również ten 1
zestawu ZL6ARM, nie powinna się
bit musi być ustawiony przed ustawieniem bitu PDN.
palić żadna z diod D4& D7, następ-
[31:21]  Zarezerwowane 
nie jeżeli wciśniemy np. przycisk
tów rejestru RSIR (0xE01FC180), któ- istotnymi bitami i przesunięty o 4 RESET powinna zapalić się dioda
rych znaczenie jak w tab. 14. bity w lewo, tak aby diody D4... D5 odzwierciedlająca stan bitu ze-
Wszystkie ustawione bity w reje- D7 odzwierciedlały stan rejestru rowania sygnałem zewnętrznym. Je-
strze RSIR możemy skasować pro- RSIR. W następnej linii sprawdzany żeli teraz, np. będziemy zmniejszać
gramowo poprzez wpisanie jedynki jest stan bitu BOD i jeżeli jest on stopniowo napięcie aż do momen-
na wybranym bicie. Aby sprawdzić skasowany (co oznacza prawidłowe tu, gdy układ BOD wystawi sygnał
w praktyce działanie rejestru RSIR napięcie zasilające), ustawiany jest RESET, a następnie zwiększymy na-
oraz działanie detektora zaniku w zmiennej r bit odpowiadający pięcie zasilające, powinna zaświecić
napięcia napiszemy bardzo prosty diodzie LED1 w zestawie ZL6ARM. się dioda D7. Oznacza to, że przy-
program (ep4.zip) badający cyklicz- Natomiast, gdy napięcie zasilające czyną zerowania był układ detekto-
nie stan bitu BOD w rejestrze SFR jest za niskie i zawiera się w prze- ra zaniku napięcia.
VicRawIntr oraz sprawdzający przy- dziale 2,6...2,9 V, ustawiany jest bit
czynę zerowania mikrokontrolera, odpowiadający diodzie LED0. Na Tryby oszczędzania energii
którego listing znajduje się poniżej: końcu pętli zawartość zmiennej r Mikrokontrolery LPC213x/214x
#include  lpc213x.h
jest wysyłana do portu P1, co po- posiadają tryby oszczędzania energii
//Definicja LED ow
woduje ustawienie odpowiednich bardzo podobne jak w 8 bitowym
#define LEDS (0xFF<<16)
#define LEDDIR IO1DIR
diod LED. Aby skompilować ten mikrokontrolerze 8051, mianowicie
#define LEDPIN IO1PIN
przykład należy po uruchomieniu tryb Idle oraz Tryb Power Down.
//Funkcja glowna main
Eclipse wybierać z menu polecenie W trybie Idle rdzeń mikrokontro-
int main(void)
{ File >New >Project. Pokaże nam lera zostaje zatrzymany, natomiast
LEDDIR = LEDS; //ustaw linie
się okno dialogowe, z którego wy- zegar oraz urządzenia peryferyjne
P1.16..P1.24 jako wyjściowe
unsigned char r=0; bieramy opcję: Standard Make C++ nadal pracują. Nadejście najbliższe-
while(1)
Project. Następnie klikamy przycisk go przerwania powoduje urucho-
{
if(RSID & 0x01) RSID |= 0x0F;
Next>, wówczas pojawi się kolejne mienie CPU i kontynuację wykona-
r = (RSID & 0x0f)<<4;
okno dialogowe. W polu tekstowym nia programu. W trybie Power Down
if(VICRawIntr & (1<<20) ) r |=
1;
Project Name wpisujemy nazwę pro- zatrzymana jest jednostka centralna,
else r |= 2;
jektu, np. Bod i wciskamy klawisz wszystkie urządzenia peryferyjne
LEDPIN = ((unsigned int)r)<<16;
}
Finish, co spowoduje utworzenie oraz zegar mikrokontrolera. Jedy-
}
pustego projektu. Kolejną czynno- ną możliwością wyjścia z tego try-
Działanie tego programu jest bar- ścią jest import plików do projektu. bu jest zerowanie mikrokontrolera,
dzo proste, mianowicie na początku Możemy tego dokonać klikając pra- zgłoszenie przerwania zewnętrznego
inicjalizowane są piny wyjściowe wym przyciskiem myszy na otwar- lub przerwanie od alarmu zegara
sterujące diodami LED. Następnie tym projekcie, a następnie wybrać RTC. Ponadto wprowadzono dodat-
określana jest przyczyna zerowania polecenie Import. Pojawi się wów- kowy rejestr konfiguracyjny umoż-
i jeżeli bit POR (0) w rejestrze RSIR czas okno dialogowe, z którego wy- liwiający wyłączenie nieużywanych
jest ustawiony, wszystkie bity w tym bieramy opcję Archive File, zobaczy- układów peryferyjnych. Do urucha-
rejestrze są kasowane. Następnie do my wtedy kolejne okno, w którym miania trybów oszczędności energii
zmiennej r wpisywany jest stan re- klikamy przycisk Browse i wybie- służy rejestr PCON (0xE01FC0C0),
jestru RSIR z zamaskowanymi nie- ramy plik ep4.zip z przykładowym natomiast za wyłączanie poszcze-
Elektronika Praktyczna 10/2006
109
K U R S
gólnych układów peryferyjnych od- żeli wybrany bit jest wyzerowany, peryferyjnych. Jeszcze jedną możli-
powiada rejestr PCONP (0xE01F- wówczas odpowiadający mu układ wością zmniejszenia poboru prądu
C0C4). Rejestr PCON zawiera dwa peryferyjny jest wyłączony. pobieranego przez mikrokontroler
bity (tab. 15), których ustawienie Zestawienie bitów rejestru jest zmniejszenie częstotliwości tak-
powoduje wejście w wybrany tryb PCONP znajduje się w tab. 16. tującej urządzenia peryferyjne, po-
obniżonego poboru mocy. Jeżeli oba Aby przejść w tryb IDLE, wy- przez ustawienie odpowiednio duże-
bity są ustawione wówczas mikro- starczy, że w programie ustawimy go podzielnika sygnału zegarowego
kontroler wchodzi w tryb uśpienia bit IDL w rejestrze PCON, co moż- VPBDIV.
(Power Down). na zrobić na przykład poprzez wy- Na tym kończymy opis układów
Rejestr PCONP zawiera zestaw wołanie następującej instrukcji: peryferyjnych związanych z System
PCON |= PCON_IDL;
bitów umożliwiających wyłączenie Control Block. Zaprezentowane tutaj
nieużywanych układów peryferyj- Będzie to ostatnia instrukcja wy- wiadomości nie wyczerpały tema-
nych. Niektórych układów nie moż- konana przez jednostkę centralną. tu, miały one nauczyć czytelnika
na wyłączyć, np. Watchdoga, por- Dodatkowe zmniejszenie poboru prą- jak skonfigurować plik startowy do
tów wejścia wyjścia czy układów du można uzyskać poprzez wyłącze- własnych wymagań oraz zapoznać
związanych z generacją sygnału ze- nie nieużywanych układów peryfe- go ze wstępnymi informacjami na
garowego. Prawidłowy zapis i odczyt ryjnych. Powiedzmy, że w programie temat trybów oszczędzania energii.
rejestrów danego układu peryferyj- nie będziemy nigdy używać Timera0 Przykłady dotyczące tych trybów
nego jest możliwy tylko wtedy, gdy i interfejsów SPI, wówczas wystarczy będą szczegółowo rozważanie pod-
ten układ peryferyjny jest włączo- wykonać następującą instrukcję: czas omawiania przerwań zewnętrz-
PCONP &= ~( PCONP_PCSPIO| PCONP_
ny. Jeżeli wybrany bit w rejestrze nych.
PCSPI1| PCONP_PCTIM0);
PCONP jest ustawiony oznacza to, Lucjan Bryndza SQ7FGB
że odpowiadający mu układ peryfe- Zaowocuje to wyłączeniem lucjan.bryndza@ep.com.pl
ryjny jest włączony. Natomiast je- wspomnianych wcześniej układów
Elektronika Praktyczna 10/2006
110


Wyszukiwarka