Suga koubou
/
RTC_Calibration
RTC Calibration Sample
main.cpp
- Committer:
- okini3939
- Date:
- 2018-08-21
- Revision:
- 0:897d43c0dcf0
File content as of revision 0:897d43c0dcf0:
#include "mbed.h" Serial pc(USBTX, USBRX); DigitalOut myled(LED1); void resetClockTickCounter () { LPC_RTC->CCR |= (1<<1); // CTC Reset LPC_RTC->CCR &= ~(1<<1); } void calibConfig (int value, int dir) { if (dir) { LPC_RTC->CALIBRATION = (value & 0x1ffff) | ((dir == -1) ? (1<<17) : 0); LPC_RTC->CCR &= ~(1<<4); // Calibration counter disable. } else { LPC_RTC->CALIBRATION = 0; LPC_RTC->CCR |= (1<<4); // Calibration counter disable. } } extern "C" void RTC_IRQHandler () { time_t sec = time(NULL); struct tm *t = localtime(&sec); myled = !myled; pc.printf("%d %04d-%02d-%02d %02d:%02d:%02d\r\n", sec, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); LPC_RTC->ILR |= (1<<0); } int main() { pc.baud(115200); pc.printf("RTC Calibration\r\n"); set_time(1514732400); // 2018-01-01 00:00:00 LPC_RTC->CIIR |= (1<<0); NVIC_EnableIRQ(RTC_IRQn); for (;;) { if (pc.readable()) { char c = pc.getc(); switch (c) { case '0': calibConfig(0, 0); pc.printf("0\r\n"); break; case 'f': // Forward calibConfig(4, 1); pc.printf("F\r\n"); break; case 'b': // Backward calibConfig(4, -1); pc.printf("B\r\n"); break; case 'r': // Reset resetClockTickCounter(); pc.printf("R\r\n"); break; } } } }