Suga koubou
/
RTC_Calibration
RTC Calibration Sample
main.cpp@0:897d43c0dcf0, 2018-08-21 (annotated)
- Committer:
- okini3939
- Date:
- Tue Aug 21 02:37:37 2018 +0000
- Revision:
- 0:897d43c0dcf0
1st build;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |