Mikrokontrolery Infineon XMC4500 w praktyce, część 6. Obsługa zegara czasu rzeczywistego (RTC)
Komponent RTC001 został dodany do projektu oraz skonfigurowany, dlatego kolejnym krokiem jest uruchomienie generatora kodu, który wytworzy i doda do projektu pliki z kodem źródłowym sterującym zegarem czasu rzeczywistego.
Następnie można przejść do edycji kodu pliku main.c. Bazując na pliku main.c z projektu programistycznego aplikacji sterującej wyświetlaczem LCD, należy dokonać następujących zmian:
Usunąć:
- Deklarację tablicy zawierającej dane pliku graficznego,
- Wywołania funkcji wyświetlających przykładowy tekst, figurę oraz obrazek z tablicy.
Dopisać:
- Deklarację struktury danych przechowującej odczytaną wartość czasu i daty,
- Deklarację dwóch tablic, które przechowywać będą wartość czasu i daty w postaci pojedynczych cyfr przyporządkowanych do komórek tablic,
- Wywołania funkcji wyświetlającej tekst w celu wyświetlenia słów ‘Time’ i ‘Date’,
- Definicję funkcji obsługującej przerwanie. Ciało tej funkcji tworzą: wywołanie funkcji odczytującej do zadeklarowanej wcześniej struktury danych wartość daty i czasu, przypisanie cyfr odczytanych wartości daty i czasu do komórek zadeklarowanych wcześniej tablic, wywołanie funkcji wyświetlającej tekst w celu wyświetlenia daty i czasu na wyświetlaczu.
Po dokonaniu wymienionych zmian zawartość pliku main.c powinna prezentować się tak jak na listingu 1.
List. 1. Kod źródłowy przykładowej aplikacji
/* * Main.c * * Created on: 30-12-2012 * Author: admin */ #include// Declarations from DAvE3 Code Generation (includes SFR declaration) #include "LCD/lcd.h" RTC001_TimeHandle CurrentTime; uint8_t date[11] = {0,0,'.',0,0,'.',0,0,0,0,0}; uint8_t time[9] = {0,0,':',0,0,':',0,0,0}; int main(void) { // status_t status; // Declaration of return variable for DAvE3 APIs (toggle comment if required) DAvE_Init(); // Initialization of DAvE Apps LCDInit(); LCDFill(WHITE); LCDPutStr("Time", 18, 20, 1, BLACK, WHITE); LCDPutStr("Date", 58, 20, 1, BLACK, WHITE); while(1) { } return 0; } void RTC_seconds_interrupt(uint32_t CbArg) { RTC001_Clock_GetTime(&CurrentTime); time[0] = (CurrentTime.Hours)/10+48; time[1] = (CurrentTime.Hours)%10+48; time[3] = (CurrentTime.Min)/10+48; time[4] = (CurrentTime.Min)%10+48; time[6] = (CurrentTime.Sec)/10+48; time[7] = (CurrentTime.Sec)%10+48; date[0] = (CurrentTime.Days)/10+48; date[1] = (CurrentTime.Days)%10+48; date[3] = (CurrentTime.Month)/10+48; date[4] = (CurrentTime.Month)%10+48; date[6] = (CurrentTime.Year)/1000+48; date[7] = ((CurrentTime.Year)%1000)/100+48; date[8] = ((CurrentTime.Year)%100)/10+48; date[9] = (CurrentTime.Year%10)+48; LCDPutStr(&time, 38, 20, 1, BLACK, WHITE); LCDPutStr(&date, 78, 20, 1, BLACK, WHITE); }
Fot. 7. Uruchomiony program aktualizuje co sekundę wartość czasu i daty na wyświetlaczu
Program jest gotowy. Można go teraz skompilować, wgrać do pamięci mikrokontrolera i uruchomić lub debugować. Uzyskany na wyświetlaczu efekt działania programu przedstawiono na fotografii 7.
Literatura
[1] www.infineon.com XMC4500 Reference Manual [2] System pomocy DAvE 3 [3] www.infineon.com Evaluation Board for XMC4000 Family, XMC4500 Relax Kit