Programowanie mikrokontrolerów 2.0

Podobne dokumenty
Programowanie mikrokontrolerów 2.0

Programowanie mikrokontrolerów 2.0

Pobór mocy przez układy mikroprocesorowe

Programowanie mikrokontrolerów 2.0

STM32 tryby obniżonego poboru mocy (2)

Pobór mocy przez układy mikroprocesorowe

Opóźnienia w STM32 (1)

3. Sygnały zegarowe i ich konfiguracja, mechanizmy bezpieczeństwa... 47

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

INSTRUKCJA OBSŁUGI. Przekaźnik czasowy ETM ELEKTROTECH Dzierżoniów. 1. Zastosowanie

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Programowanie mikrokontrolerów. 5 grudnia 2007

Mikrokontrolery ARM. Elektroniczny zegar / budzik / kalendarz z wyświetlaczem NIXIE. Opis projektu

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

2. PORTY WEJŚCIA/WYJŚCIA (I/O)

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

STM32 tryby obniżonego poboru mocy

Szkolenia specjalistyczne

Instytut Teleinformatyki

Programowanie mikrokontrolerów 2.0

Porty GPIO w mikrokontrolerach STM32F3

Programowanie mikrokontrolerów. 8 listopada 2007

Programowanie mikrokontrolerów 2.0

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

MARM. Laboratorium 1 system zegarów, porty wejścia/wyjścia. M. Suchenek

Timery w mikrokontrolerach STM32F3

Programowanie mikrokontrolerów 2.0

Układy zegarowe w systemie mikroprocesorowym

2. Architektura mikrokontrolerów PIC16F8x... 13

ad a) Konfiguracja licznika T1 Niech nasz program składa się z dwóch fragmentów kodu: inicjacja licznika T1 pętla główna

Metody obsługi zdarzeń

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

Oznaczenie poszczególnych części.

ZL25ARM. Płyta bazowa dla modułów diparm z mikrokontrolerami STR912. [rdzeń ARM966E-S]

Kontroler LED programowalny czasowo 12V 20A 5 kanałów

1.2. Architektura rdzenia ARM Cortex-M3...16

ZAPRASZAMY NA NASZE AUKCJE SCIGANY81 (c) Copyright

Stoper solarny C5085 INSTRUKCJA OBSŁUGI. Nr produktu Strona 1 z 7

Radio kuchenne Soundmaster DAB 2035, FM, RDS, srebrne

Radioodtwarzacz CD, FM SoundMaster RCD1750SI. Strona 1 z 9

Wstęp Architektura... 13

Programowanie mikrokontrolerów. 3 stycznia 2008

Hardware mikrokontrolera X51

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Wbudowane układy peryferyjne cz. 1 Wykład 7

PILOT ZDALNEGO STEROWANIA

Konfiguracja i programowanie Gamepad'a PlayStation2 na mikrokontrolerze STM32

MIKROPROCESORY architektura i programowanie

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

SCIGANY81 (c) Copyright

Programowanie mikrokontrolerów 2.0

INSTRUKCJA UŻYTKOWNIKA. Mini rejestrator cyfrowy MD-80P

LOW ENERGY TIMER, BURTC

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja

INSTRUKCJA OBSŁUGI 0580

AVREVB1. Zestaw uruchomieniowy dla mikrokontrolerów AVR. Zestawy uruchomieniowe

Instrukcja obsługi programowalnego zegara cyfrowego

Single Station Controller TORO TSSCWP

1 Moduł Neuronu Cyfrowego SM

Radio FM kuchenne SoundMaster UR 2006, LCD, pamięć 30 stacji

Zestaw uruchomieniowy z mikrokontrolerem LPC1114 i wbudowanym programatorem ISP

Programator ICP mikrokontrolerów rodziny ST7. Full MFPST7. Lite. Instrukcja użytkownika 03/09

1. Podstawowe wiadomości Możliwości sprzętowe Połączenia elektryczne Elementy funkcjonalne programów...

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Manometr cyfrowy z funkcją rejestracji. Dokładność: 0,1% Ciśnienie aktualne. Status

Przerwania, polling, timery - wykład 9

Sterownik czasowy Müller 23321;10 A, Program tygodniowy, IP20, (SxWxG) 84 x 84 x 40 mm

Konfiguracja i programowanie PLC Siemens SIMATIC S7 i panelu tekstowego w układzie sterowania napędami elektrycznymi. Przebieg ćwiczenia

Wykład 2. Mikrokontrolery z rdzeniami ARM

Radio przenośne Sangean PR-D5, FM, AM, RDS, białe

Wbudowane układy komunikacyjne cz. 1 Wykład 10

INSTRUKCJA OBSŁUGI ZEGARKA ANALOGOWEGO

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

Materiały pomocnicze do ćwiczeń laboratoryjnych

PRZERWANIA. 1. Obsługa zdarzeń, odpytywanie i przerwania Obsługa zdarzeń jest jedną z kluczowych funkcji w prawie każdym systemie czasu rzeczywistego.

Programowanie mikrokontrolerów 2.0

Radiobudzik FM, Karcher Radiobudzik UR , Pamięć programów: 10

Moduł przekaźnika czasowego FRM01. Instrukcja obsługi

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

INSTRUKCJA OBSŁUGI AMC 09C

LITEcompLPC1114. Zestaw ewaluacyjny z mikrokontrolerem LPC1114 (Cortex-M0) Sponsorzy:

Zewnętrzne układy peryferyjne cz. 1 Wykład 12

PL CYFROWY ZEWNĘTRZNY WYŁĄCZNIK CZASOWY Instrukcja obsługi (Tłumaczenie oryginalnej instrukcji) Ważne! Przed użyciem uważnie przeczytaj instrukcję

Radiobudzik FM SoundMaster FUR

MIKROPROCESORY architektura i programowanie

CENTRALA STERUJĄCA SMART CONTROL

INSTRUKCJA OBSŁUGI DO WYSWIETLACZA LCD C600

INSTRUKCJA OBSŁUGI. Rys.1. Wyświetlacz. Rys.2. Klawiatura

LITEcomp. Zestaw uruchomieniowy z mikrokontrolerem ST7FLITE19

Długopis z ukrytą kamerą cyfrową HD

Instrukcja obsługi. Rejestrator i kamera w zegarku MCL-1.3R MCL-1.3B

Edukacyjny sterownik silnika krokowego z mikrokontrolerem AT90S1200 na płycie E100. Zestaw do samodzielnego montażu.

SP-1101W/SP-2101W Instrukcja Szybkiej Instalacji

Przerwania w systemie mikroprocesorowym. Obsługa urządzeo wejścia/wyjścia

1 Moduł Neuronu Cyfrowego

SML3 październik

Wyłącznik czasowy GAO EMT757

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Mechanizm przerwań i menadżer zdarzeń procesora sygnałowego F/C240

EV3 X21 instrukcja uproszczona

Transkrypt:

Programowanie mikrokontrolerów 2.0 Tryby uśpienia Marcin Engel Marcin Peczarski Instytut Informatyki Uniwersytetu Warszawskiego 19 grudnia 2016

Zarządzanie energią Często musimy zadbać o zminimalizowanie zużycia energii zasilanie bateryjne względy ekologiczne Energia to iloczyn mocy i czasu Moc pobierana przez układ cyfrowy jest wprost proporcjonalna do częstotliwości taktowania i kwadratu napięcia zasilania Zużycie energii można zmniejszyć przez zmniejszenie napięcia zasilania i częstotliwości taktowania, utrzymując pobieraną moc na małym, ale stałym poziomie taktowanie układu z maksymalną szybkością i wyłączanie taktowania w okresach bezczynności: wykonaj robotę jak najszybciej i jak najdłużej śpij

Zarządzanie energią uwagi Maksymalna częstotliwość taktowania zależy od napięcia zasilania Całkowite zatrzymanie taktowania nie redukuje pobieranej mocy do zera prąd upływu analogowe fragmenty układu Przed uśpieniem mikrokontrolera trzeba zredukować moc pobieraną przez układy peryferyjne również wprowadzić je w stan uśpienia Poprawne zarządzanie energią wymaga przemyślenia schematu urządzenia banalny rezystor podciągający może obciążać źródło zasilania 1000 razy większym prądem niż uśpiony mikrokontroler

Zarządzanie energią w STM32 Dopuszczalny zakres napięcia zasilającego: 1,7 3,6 V Wartość napięcia zasilającego trzeba uwzględnić przy konfigurowaniu częstotliwości taktowania pamięci Flash przetwornika analogowo-cyfrowego Niektóre układy peryferyjne, np. USB, nie działają poprawnie przy zbyt niskim napięciu zasilania Taktowanie każdego układu peryferyjnego jest włączane indywidualnie Kilka trybów uśpienia

Tryby uśpienia w STM32 W kolejności zmniejszającego się poboru mocy i zwiększającego się czasu potrzebnego do wybudzenia tryb uśpienia (ang. sleep mode) tryb głębokiego uśpienia (ang. deep sleep mode) tryb zatrzymania (ang. stop mode) regulator zasilający rdzeń włączony regulator zasilający rdzeń wyłączony (ang. low power mode) tryb czuwania (ang. standby)

Wybór trybu uśpienia w STM32 Przedstawiona hierarchia wynika ze sposobu konfigurowania trybu uśpienia między trybem uśpienia a trybem głębokiego uśpienia wybiera bit SLEEPDEEP w rejestrze SCB->SCR jedynka włącza tryb głębokiego uśpienia między trybem zatrzymania a trybem czuwania wybiera bit PDDS w rejestrze PWR->CR jedynka włącza tryb czuwania wyłączaniem regulatora napięcia zasilania steruje bit LPDS w rejestrze PWR->CR jedynka wyłącza regulator

Tryb uśpienia Wszystkie uaktywnione generatory zegarowe pozostają włączone Wstrzymywane jest taktowanie rdzenia i pamięci Wszystkie włączone peryferie pozostają taktowane Zachowywana jest zawartość wszystkich rejestrów i pamięci Wybudzenie jest możliwe dowolnym wyjątkiem Po wybudzeniu kontynuowane jest wykonywanie programu rdzeń taktowany jest tym samym zegarem, co przed zaśnięciem

Tryb zatrzymania Zatrzymywane są HSI, HSE i PLL, co skutkuje wstrzymaniem taktowanie rdzenia, pamięci i większości peryferii Mogą pozostać włączone LSI (strażnik) i LSE (RTC) Zachowywana jest zawartość wszystkich rejestrów i pamięci Wybudzenie jest możliwe dowolnym wyjątkiem zgłoszonym na jednej z linii EXTI Po wybudzeniu kontynuowane jest wykonywanie programu rdzeń taktowany jest zegarem HSI konfiguracja HSE i PLL jest zachowana, ale trzeba je ponownie włączyć i poczekać na zsynchronizowanie

Tryb czuwania Zatrzymywane są HSI, HSE i PLL, co skutkuje wstrzymaniem taktowanie rdzenia, pamięci i większości peryferii Mogą pozostać włączone LSI (strażnik) i LSE (RTC) Zachowywana jest jedynie zawartość rejestrów awaryjnych (ang. backup registers) Wybudzenie jest możliwe zboczem narastającym na wejściu PA0 wyjątkiem wygenerowanym przez RTC Po wybudzeniu program rozpoczyna się od początku należy sprawdzić powód rozpoczęcia programu, odczytując wartość bitu SBF w rejestrze PWR->CSR jeśli bit SBF jest ustawiony, to nastąpiło wybudzenie z trybu czuwania i należy ten bit wyzerować przez zapisanie jedynki na bicie CSBF rejestru PWR->CR rdzeń taktowany jest zegarem HSI

12.10 WFI Instrukcja WFI (ang. wait for interrupt) powoduje wejście w jeden z trybów uśpienia Wybudzenie następuje, gdy pojawi się wyjątek, który jest tak skonfigurowany, że ma spowodować wywołanie procedury obsługi i ma dostatecznie wysoki priorytet, aby ją wywołać Po wybudzeniu, jeśli to nie był tryb czuwania, to wywoływana jest procedura obsługi wyjątku, który spowodował wybudzenie ewentualnie wywoływane są procedury obsługi kolejnych wyjątków po zakończeniu obsługi wszystkich oczekujących wyjątków wykonywana jest instrukcja następna po WFI CMSIS dostarcza funkcji WFI()

WFE Instrukcja WFE (ang. wait for event) współpracuje z jednobitowym rejestrem zdarzenia Jeśli rejestr zdarzenia jest wyzerowany, instrukcja WFE powoduje wejście w jeden z trybów uśpienia Jeśli rejestr zdarzenia jest ustawiony, instrukcja WFE zeruje go i nie powoduje zaśnięcia Jeśli nastąpiło zaśnięcie na instrukcji WFE i został ustawiony rejestr zdarzenia, następuje wybudzenie i wyzerowanie rejestru zdarzenia Po wybudzeniu, jeśli to nie był tryb czuwania, to ewentualnie wywoływane są procedury obsługi wyjątków, jeśli jakieś wyjątki oczekują na obsłużenie po zakończeniu obsługi wyjątków wykonywana jest instrukcja następna po WFE

12.12 WFE, cd. Rejestr zdarzenia może być ustawiany przez te same zdarzenia, które wyzwalają wyjątki, choć nie jest konieczne, aby zdarzenie wyzwalało procedurę obsługi Rejestr zdarzenia nie może być odczytywany ani zerowany przez program Rejestr zdarzenia może być ustawiony instrukcją SEV CMSIS dostarcza funkcji WFE() i SEV()

Przerwanie a zdarzenie Przerwanie jest wynikiem zajścia zdarzenia Przerwanie jest zgłaszane, jeśli ustawione są odpowiednie maski w układzie zgłaszającym zdarzenie i w układzie NVIC oraz przerwanie ma dostatecznie wysoki priorytet Parametr mode funkcji GPIOinConfigure przyjmuje dwie wartości EXTI Mode Interrupt EXTI Mode Event Układ EXTI ma dwa rejestry EXTI->IMR maska przerwań EXTI->EMR maska zdarzeń Linie przerwań RTC, linia przerwania kontrolera napięcia zasilania, linie wybudzania układów USB i Ethernet nie są podłączone bezpośrednio do układu NVIC, a do układu EXTI, aby możliwe było wybudzanie z trybu głębokiego uśpienia zdarzeniami sygnalizowanymi na tych liniach

Rejestr zdarzenia Rejestr zdarzenia jest ustawiany jeśli zostało zgłoszone przerwanie w procedurze obsługi przerwania trzeba wyczyścić znacznik zdarzenia, które było przyczyną tego przerwania jeśli uaktywnione jest zdarzenie na linii EXTI i wystąpiło to zdarzenie po wybudzeniu trzeba wyczyścić znacznik zdarzenia w rejestrze EXTI->PR jeśli uaktywnione jest przerwanie układu peryferyjnego, ale nie jest ono włączone w układzie NVIC, jest ustawiony bit SEVONPEND w rejestrze SCB->SCR i wystąpiło zdarzenie po wybudzeniu trzeba wyczyścić znacznik zdarzenia w układzie peryferyjnym i znacznik oczekującego przerwania w układzie NVIC

Funkcja Sleep Konfiguruj licznik, aby zgłaszał przerwanie po zadanym czasie, ale nie ustawiaj tego czasu i nie włączaj licznika Zadeklaruj globalną zmienną, informującą, że wystąpiło przerwanie licznika static volatile int wait = 0; W przerwaniu licznika wyłącz go i wyzeruj tę zmienną wait = 0;

12.16 Funkcja Sleep, cd. Funkcja usypiająca na zadany czas void Sleep(unsigned time) { if (time > 0) { wait = 1; /* Uruchom licznik, aby odmierzył time. */... /* Ustaw tryb uśpienia. */ SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; /* Śpij, gdy nie ma nic do zrobienia. */ do { WFE(); } while (wait); } } Dlaczego nie można użyć instrukcji WFI?

Funkcja main W dobrze napisanym programie wszystko dzieje się w przerwaniach Funkcja main wygląda tak int main() { /* Konfiguruj układy peryferyjne i przerwania. */... for (;;) WFI(); }

Funkcja main Alternatywnie można też ustawić zasypianie po obsłużeniu wyjątku (ang. sleep on exit) int main() { /* Konfiguruj układy peryferyjne i przerwania. */... SCB->SCR = SCB_SCR_SLEEPONEXIT_Msk; WFI(); /* Tu sterowanie nigdy nie dochodzi. */ return 0; }

Zatrzymanie Skonfiguruj zdarzenie lub przerwanie EXTI, które ma wybudzić Ustaw tryb zatrzymania SCB->SCR = SCB_SCR_SLEEPDEEP_Msk; PWR->CR &= ~PWR_CR_PDDS; Pozostaw włączony regulator zasilający rdzeń PWR->CR &= ~PWR_CR_LPDS; albo wyłącz regulator zasilający rdzeń PWR->CR = PWR_CR_LPDS; Zaśnij, wywołując instrukcję WFE lub WFI Jeśli wybudzenie nastąpiło w wyniku zgłoszenia przerwania, to procedura jego obsługi będzie wykonywana z zegarem HSI Jeśli przed zaśnięciem były używane HSE i PLL, to po wybudzeniu włącz je oraz poczekaj na ich zsynchronizowanie

Czuwanie Konfiguruj sposób wybudzenia ustaw alarm lub budzik RTC; nie trzeba konfigurować przerwania w układach EXTI i NVIC, gdyż zawartość rejestrów tych układów jest tracona po wejściu w tryb czuwania zboczem narastającym na PA0 PWR->CSR = PWR_CSR_EWUP; Wyzeruj bity SBF i WUF, wybierz tryb czuwania SCB->SCR = SCB_SCR_SLEEPDEEP_Msk; PWR->CR = PWR_CR_CSBF PWR_CR_CWUF PWR_CR_PDDS; Zaśnij WFI(); Dlaczego nie można użyć instrukcji WFE? Po uruchomieniu programu sprawdź wartość bitu SBF w rejestrze PWR->CSR Jeśli ten bit jest ustawiony, to nastąpiło wybudzenie z trybu czuwania i konfiguracja RTC jest zachowana

Uwagi końcowe Modyfikowanie rejestrów układu PWR wymaga włączenia jego taktowania RCC->APB1ENR = RCC_APB1ENR_PWREN; Konfigurowanie wejść układu EXTI wymaga włączenia taktowania układu SYSCFG RCC->APB2ENR = RCC_APB2ENR_SYSCFGEN; Po skonfigurowaniu tych wejść można wyłączyć taktowanie układu SYSCFG RCC->APB2ENR &= ~RCC_APB2ENR_SYSCFGEN; W zestawie laboratoryjnym przycisk AT MODE jest podłączony do wyprowadzenia PA0 i jego wciśnięcie powoduje zbocze narastające W trybach głębokiego uśpienia nie działa interfejs do programowania mikrokontrolera trzeba go najpierw obudzić, np. naciskając RESET