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