Mikrokontrolery Infineon XMC4500 w praktyce, część 6. Obsługa zegara czasu rzeczywistego (RTC)

W artykule pokazano w jaki sposób, przy wykorzystaniu pakietu DAvE 3, napisać program obsługujący wewnętrzny zegar RTC w mikrokontrolerach XMC4500 firmy Infineon. Jako platformę sprzętową wykorzystano płytkę uruchomieniową  XMC4500 Relax Kit (dostępna jest także jej tańsza wersja, pozbawiona interfejsu Ethernet – XMC4500 Relax Kit Lite).

 

Zegar czasu rzeczywistego (RTC) to zasób występujący w większości dostępnych na rynku mikrokontrolerów. Można go traktować jako licznik, który zwiększa swoją wartość o 1 co sekundę, co de facto oznacza odmierzanie czasu z rozdzielczością jednej sekundy. Stan odczytywanego licznika ma wygodną dla programisty postać liczby sekund, minut i godzin. Analogicznie jest z datą – jest ona podawana w przystępnym formacie liczby dni, miesięcy i lat. Zegar czasu rzeczywistego aktualizuje czas i datę z uwzględnieniem specyfiki kalendarza (liczby dni danego miesiąca, lat przestępnych itp.). Za pomocą zegara czasu rzeczywistego można m.in. odmierzać czas w systemach wykonujących zadania z zadeklarowanym interwałem czasowym, bądź udostępnianie użytkownikowi informacji o aktualnym czasie i dacie.

 

Budowa zegara czasu rzeczywistego w mikrokontrolerze z rodziny XMC4500

Budowę zegara czasu rzeczywistego w mikrokontrolerze XMC4500 przedstawiono na rysunku 1. Ma on prostą konstrukcję i składa się z trzech bloków: licznika czasu (Time Counter), preskalera (Prescaler) oraz rejestrów (RTC registers).

Do działania zegara czasu rzeczywistego wymagany jest sygnał zegarowy o częstotliwości 32,768 kHz. Generować go może dołączony do mikrokontrolera kwarc o częstotliwości rezonansowej 32,768 kHz lub wbudowane w mikrokontroler źródło sygnału zegarowego o takiej samej częstotliwości pracy.

W celu ułatwienia programiście korzystania z zegara czasu rzeczywistego, blok ten ma możliwość zgłaszania przerwań. Mogą one sygnalizować zmianę wybranych pól czasu albo daty (sekund, minut, godzin, dni, miesięcy, lat) lub osiągnięcie zadeklarowanej czasu albo daty (jest to tak zwany alarm).

 

Rys. 1. Schemat blokowy zegara czasu rzeczywistego w mikrokontrolerze XMC4000 [1]

Rys. 1. Schemat blokowy zegara czasu rzeczywistego w mikrokontrolerach XMC4500 [1] 

Zegar czasu rzeczywistego może być zasilany na dwa sposoby. Pierwszym sposobem jest wykorzystanie tego samego źródła napięcia, z którego korzysta mikrokontroler (wyprowadzenia VDDP). Drugi sposób zasilania zegara czasu rzeczywistego polega na wykorzystaniu alternatywnego źródła napięcia (wyprowadzenie VBAT), co pozwala temu blokowi peryferyjnemu działać (aktualizować czas i datę) nawet w przypadku niedostępności lub zaniku napięcia zasilania dla mikrokontrolera.

Zegar czasu rzeczywistego ma możliwość wybudzania mikrokontrolera ze stanu uśpienia. Umożliwia to zaimplementowanie mechanizmu periodycznego wybudzania układu w celu wykonania określonych zadań, a następnie przywrócenia stanu uśpienia, co pozwala zminimalizować zużycie energii całego urządzenia.

Zegar czasu rzeczywistego połączony jest z modułem SCU (System Control Unit), z którym komunikuje się poprzez magistralę szeregową. Do zakresu obowiązków SCU należy zarządzanie i sterowanie zużyciem energii, sygnałami zegarowymi oraz blokiem zerowania mikrokontrolera.

Oznaczenia rejestrów sterujących zegarem czasu rzeczywistego wraz z pełną ich nazwą przedstawiono w tabeli 1.

 

Tab. 1. Oznaczenia oraz nazwy rejestrów sterujących zegarem czasu rzeczywistego [1]

Rejestr

Pełna nazwa rejestru

ID

ID Register

CTR

Control Register

RAWSTAT

Raw Service Request Register

STSSR

Status Service Request Register

MSKSR

Mask Service Request Register

CLRSR

Clear Service Request Register

ATIM0

Alarm Time Register 0

ATIM1

Alarm Time Register 1

TIM0

Time Register 0

TIM1

Time Register 1

 

DAvE Apps przewidziane do sterowania zegarem czasu rzeczywistego

Do sterowania zegarem czasu rzeczywistego firma Infineon opracowała komponent oprogramowania DAvE App o nazwie RTC001. W tabeli 2 przedstawiono krótki opis funkcji tworzących API (Application Programming Interface) tego komponentu. Kompletną dokumentację można znaleźć w systemie pomocy pakietu DAvE 3.

 

Tab. 2. Opis API komponentu DAvE App RTC001 [2]

Nazwa elementu API

Opis

RTC001_Init

Inicjalizacja zegara czasu rzeczywistego

RTC001_DeInit

Inicjalizacja zegara czasu rzeczywistego z domyślnymi parametrami działania

RTC001_Enable

Włączenie zegara czasu rzeczywistego

RTC001_Disable

Wyłączenie zegara czasu rzeczywistego

RTC001_ClearFlagStatus

Wyzerowanie wybranej flagi zegara czasu rzeczywistego

RTC001_GetFlagStatus

Odczytanie stanu wybranej flagi zegara czasu rzeczywistego

RTC001_ConfigAlarm

Ustawienie alarmu zegara czasu rzeczywistego

RTC001_Clock_GetTime

Odczytanie czasu i daty zegara czasu rzeczywistego

RTC001_Clock_SetTime

Ustawienie czasu i daty zegara czasu rzeczywistego

RTC001_Time

Obliczenie liczby sekund od początku epoki Uniksa (01.01.1970 r.)

Do pobrania

O autorze