RTC Calibration Sample

Dependencies:   mbed

Committer:
okini3939
Date:
Tue Aug 21 02:37:37 2018 +0000
Revision:
0:897d43c0dcf0
1st build;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:897d43c0dcf0 1 #include "mbed.h"
okini3939 0:897d43c0dcf0 2
okini3939 0:897d43c0dcf0 3 Serial pc(USBTX, USBRX);
okini3939 0:897d43c0dcf0 4 DigitalOut myled(LED1);
okini3939 0:897d43c0dcf0 5
okini3939 0:897d43c0dcf0 6 void resetClockTickCounter () {
okini3939 0:897d43c0dcf0 7 LPC_RTC->CCR |= (1<<1); // CTC Reset
okini3939 0:897d43c0dcf0 8 LPC_RTC->CCR &= ~(1<<1);
okini3939 0:897d43c0dcf0 9 }
okini3939 0:897d43c0dcf0 10
okini3939 0:897d43c0dcf0 11 void calibConfig (int value, int dir) {
okini3939 0:897d43c0dcf0 12 if (dir) {
okini3939 0:897d43c0dcf0 13 LPC_RTC->CALIBRATION = (value & 0x1ffff) | ((dir == -1) ? (1<<17) : 0);
okini3939 0:897d43c0dcf0 14 LPC_RTC->CCR &= ~(1<<4); // Calibration counter disable.
okini3939 0:897d43c0dcf0 15 } else {
okini3939 0:897d43c0dcf0 16 LPC_RTC->CALIBRATION = 0;
okini3939 0:897d43c0dcf0 17 LPC_RTC->CCR |= (1<<4); // Calibration counter disable.
okini3939 0:897d43c0dcf0 18 }
okini3939 0:897d43c0dcf0 19 }
okini3939 0:897d43c0dcf0 20 extern "C"
okini3939 0:897d43c0dcf0 21 void RTC_IRQHandler () {
okini3939 0:897d43c0dcf0 22 time_t sec = time(NULL);
okini3939 0:897d43c0dcf0 23 struct tm *t = localtime(&sec);
okini3939 0:897d43c0dcf0 24
okini3939 0:897d43c0dcf0 25 myled = !myled;
okini3939 0:897d43c0dcf0 26 pc.printf("%d %04d-%02d-%02d %02d:%02d:%02d\r\n", sec,
okini3939 0:897d43c0dcf0 27 t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
okini3939 0:897d43c0dcf0 28 LPC_RTC->ILR |= (1<<0);
okini3939 0:897d43c0dcf0 29 }
okini3939 0:897d43c0dcf0 30
okini3939 0:897d43c0dcf0 31 int main() {
okini3939 0:897d43c0dcf0 32
okini3939 0:897d43c0dcf0 33 pc.baud(115200);
okini3939 0:897d43c0dcf0 34 pc.printf("RTC Calibration\r\n");
okini3939 0:897d43c0dcf0 35 set_time(1514732400); // 2018-01-01 00:00:00
okini3939 0:897d43c0dcf0 36 LPC_RTC->CIIR |= (1<<0);
okini3939 0:897d43c0dcf0 37 NVIC_EnableIRQ(RTC_IRQn);
okini3939 0:897d43c0dcf0 38
okini3939 0:897d43c0dcf0 39 for (;;) {
okini3939 0:897d43c0dcf0 40 if (pc.readable()) {
okini3939 0:897d43c0dcf0 41 char c = pc.getc();
okini3939 0:897d43c0dcf0 42 switch (c) {
okini3939 0:897d43c0dcf0 43 case '0':
okini3939 0:897d43c0dcf0 44 calibConfig(0, 0);
okini3939 0:897d43c0dcf0 45 pc.printf("0\r\n");
okini3939 0:897d43c0dcf0 46 break;
okini3939 0:897d43c0dcf0 47 case 'f': // Forward
okini3939 0:897d43c0dcf0 48 calibConfig(4, 1);
okini3939 0:897d43c0dcf0 49 pc.printf("F\r\n");
okini3939 0:897d43c0dcf0 50 break;
okini3939 0:897d43c0dcf0 51 case 'b': // Backward
okini3939 0:897d43c0dcf0 52 calibConfig(4, -1);
okini3939 0:897d43c0dcf0 53 pc.printf("B\r\n");
okini3939 0:897d43c0dcf0 54 break;
okini3939 0:897d43c0dcf0 55 case 'r': // Reset
okini3939 0:897d43c0dcf0 56 resetClockTickCounter();
okini3939 0:897d43c0dcf0 57 pc.printf("R\r\n");
okini3939 0:897d43c0dcf0 58 break;
okini3939 0:897d43c0dcf0 59 }
okini3939 0:897d43c0dcf0 60 }
okini3939 0:897d43c0dcf0 61 }
okini3939 0:897d43c0dcf0 62 }