Wykorzystywanie trybów pracy o obniżonym poborze energii w mikrokontrolerach NXP LPC1700

Wchodzenie w tryby pracy o obniżonym poborze energii

W niniejszym rozdziale opisane są mechanizmy wprowadzania mikrokontrolera LPC1700 w każdy z czterech trybów pracy o obniżonym poborze energii.

Rejestr sterujący systemem (System Control Register)

Rejestr SCR rdzenia Cortex-M3 steruje funkcjami wchodzenia w tryby pracy o obniżonym poborze energii i wychodzenia z nich.

Tryby Sleep i Deep-sleep wybierane są za pomocą bitu SLEEPDEEP w tym rejestrze. Jeśli bit SLEEPDEEP jest ustawiony na 0, wybrany zostaje tryb uśpienia (Sleep mode). Jeśli bit SLEEPDEEP jest ustawiony na 1, wybrany zostaje tryb głębokiego uśpienia (Deep-sleep mode). Pozycje bitów w rejestrze SCR są przedstawione na rysunku 2.

 

Rys. 2. Rejestr sterowania systemem mikrokontrolerów LPC1700 (SRC, 0xE000ED10)

Rys. 2. Rejestr sterowania systemem mikrokontrolerów LPC1700 (SRC, 0xE000ED10)

 

 

Jeśli bit SLEEPONEXIT jest ustawiony na 1, mikrokontroler po wykonaniu procedury obsługi przerwania (ISR) natychmiast przechodzi do trybu uśpienia. Mechanizm ten jest przydatny w zastosowaniach, w których praca mikrokontrolera jest potrzebna tylko w razie wystąpienia przerwania. Pozwala to na tworzenie bardzo oszczędnych systemów „sterowanych” przerwaniami.

Rejestr sterujący trybem zasilania (Power Mode Controle Register)

Tryby: wyłączenia (Power down) i zupelnego wyłączenia (Deep Power-down) wybierane są za pomocą bitów PM1 i PM0 rejestru PCON, podczas gdy bit SLEEPDEEP w rejestrze SCR jest ustawiony na 1.

 

Rys. 3. Struktura rejestru sterującego trybem zasilania (PCON)

Rys. 3. Struktura rejestru sterującego trybem zasilania (PCON)

 

 

W rejestrze PCON znajdują się też flagi wskazujące czy wejście w dany tryb pracy o obniżonym poborze energii wystąpiło.

Instrukcja czekania na przerwanie (Wait For Interrupt)

Wykonanie instrukcji WFI powoduje natychmiastowe wejście w tryb pracy o obniżonym poborze energii wynikający z konfiguracji bitu SLEEPDEEP i rejestru PCON opisanych powyżej.

Instrukcja WFI jest instrukcją rdzenia Cortex-M3, która nie jest bezpośrednio dostępna z poziomu ANSI C. Standard CMSIS (Cortex Microcontroller Software Interface Standard) zapewnia jednak tzw. funkcję istotną (intrinsic function) generującą instrukcję WFI i obsługiwaną przez kompilator C. Jeśli dany kompilator C nie obsługuje tej funkcji, użytkownik musi zastosować wstawkę asemblerową, aby użyć instrukcji WFI. Na rysunku 4 przedstawione są ustawienia bitów PM1 i PM0 odpowiadające różnym trybom pracy o obniżonym poboru energii dostępnym w mikrokontrolerach LPC1700.

 

Rys. 4. Sposób kodowania trybów pracy o obniżonym poborze energii w mikrokontrolerach LPC1700

Rys. 4. Sposób kodowania trybów pracy o obniżonym poborze energii w mikrokontrolerach LPC1700

 

 

Przykłady kodu

Poniższe fragmenty kodu prezentują sposoby wchodzenia w każdy z czterech trybów pracy o obniżonym poborze energii. Są one wykorzystywane w programie demonstracyjnym, który zostanie opisany później.

Tryb uśpienia

 

Rys. 5. Fragment kodu odpowiadający za wejście w tryb uśpienia (<EM>Sleep mode</EM>)” src=”/wp-content/uploads/artykuly/Wykorzystywanie_trybow_pracy_o_obnizonym_poborze_energii_w_mikro/Rys05.do_artykulow.png”></a></p>
<p style=Rys. 5. Fragment kodu odpowiadający za wejście w tryb uśpienia (Sleep mode)

 

 

Tryb głębokiego uśpienia

 

Rys. 6. Fragment kodu odpowiadający za wejście w tryb głębokiego uśpienia (<EM>Deep-sleep mode</EM>)” src=”/wp-content/uploads/artykuly/Wykorzystywanie_trybow_pracy_o_obnizonym_poborze_energii_w_mikro/Rys06.do_artykulow.png”></a></p>
<p style=Rys. 6. Fragment kodu odpowiadający za wejście w tryb głębokiego uśpienia (Deep-sleep mode)

 

 

Tryb wyłączenia

 

Rys. 7. Fragment kodu odpowiadający za wejście w tryb wyłączenia (<EM>Power-down mode</EM>)” src=”/wp-content/uploads/artykuly/Wykorzystywanie_trybow_pracy_o_obnizonym_poborze_energii_w_mikro/Rys07.do_artykulow.png”></a></p>
<p style=Rys. 7. Fragment kodu odpowiadający za wejście w tryb wyłączenia (Power-down mode)

 

 

Tryb zupełnego wyłączenia

 

Rys. 8. Fragment kodu odpowiadający za wejście w tryb zupełnego wyłączenia (<EM>Deep Power-down mode</EM>)” src=”/wp-content/uploads/artykuly/Wykorzystywanie_trybow_pracy_o_obnizonym_poborze_energii_w_mikro/Rys08.do_artykulow.png”></a></p>
<p style=Rys. 8. Fragment kodu odpowiadający za wejście w tryb zupełnego wyłączenia (Deep Power-down mode)

 

 

O autorze