Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-src by
rtc_api.c
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2006-2013 ARM Limited 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 #include "rtc_api.h" 00017 00018 // ensure rtc is running (unchanged if already running) 00019 00020 /* Setup the RTC based on a time structure, ensuring RTC is enabled 00021 * 00022 * Can be clocked by a 32.768KHz oscillator or prescale divider based on the APB clock 00023 * - We want to use the 32khz clock, allowing for sleep mode 00024 * 00025 * Most registers are not changed by a Reset 00026 * - We must initialize these registers between power-on and setting the RTC into operation 00027 00028 * Clock Control Register 00029 * RTC_CCR[0] : Enable - 0 = Disabled, 1 = Enabled 00030 * RTC_CCR[1] : Reset - 0 = Normal, 1 = Reset 00031 * RTC_CCR[4] : Clock Source - 0 = Prescaler, 1 = 32k Xtal 00032 * 00033 * The RTC may already be running, so we should set it up 00034 * without impacting if it is the case 00035 */ 00036 void rtc_init(void) { 00037 LPC_SC->PCONP |= 0x200; // Ensure power is on 00038 LPC_RTC->CCR = 0x00; 00039 00040 LPC_RTC->CCR |= 1 << 0; // Ensure the RTC is enabled 00041 } 00042 00043 void rtc_free(void) { 00044 // [TODO] 00045 } 00046 00047 /* 00048 * Little check routine to see if the RTC has been enabled 00049 * 00050 * Clock Control Register 00051 * RTC_CCR[0] : 0 = Disabled, 1 = Enabled 00052 * 00053 */ 00054 int rtc_isenabled(void) { 00055 return(((LPC_RTC->CCR) & 0x01) != 0); 00056 } 00057 00058 /* 00059 * RTC Registers 00060 * RTC_SEC Seconds 0-59 00061 * RTC_MIN Minutes 0-59 00062 * RTC_HOUR Hour 0-23 00063 * RTC_DOM Day of Month 1-28..31 00064 * RTC_DOW Day of Week 0-6 00065 * RTC_DOY Day of Year 1-365 00066 * RTC_MONTH Month 1-12 00067 * RTC_YEAR Year 0-4095 00068 * 00069 * struct tm 00070 * tm_sec seconds after the minute 0-61 00071 * tm_min minutes after the hour 0-59 00072 * tm_hour hours since midnight 0-23 00073 * tm_mday day of the month 1-31 00074 * tm_mon months since January 0-11 00075 * tm_year years since 1900 00076 * tm_wday days since Sunday 0-6 00077 * tm_yday days since January 1 0-365 00078 * tm_isdst Daylight Saving Time flag 00079 */ 00080 time_t rtc_read(void) { 00081 // Setup a tm structure based on the RTC 00082 struct tm timeinfo; 00083 timeinfo.tm_sec = LPC_RTC->SEC; 00084 timeinfo.tm_min = LPC_RTC->MIN; 00085 timeinfo.tm_hour = LPC_RTC->HOUR; 00086 timeinfo.tm_mday = LPC_RTC->DOM; 00087 timeinfo.tm_mon = LPC_RTC->MONTH - 1; 00088 timeinfo.tm_year = LPC_RTC->YEAR - 1900; 00089 00090 // Convert to timestamp 00091 time_t t = mktime(&timeinfo); 00092 00093 return t; 00094 } 00095 00096 void rtc_write(time_t t) { 00097 // Convert the time in to a tm 00098 struct tm *timeinfo = localtime(&t); 00099 00100 // Pause clock, and clear counter register (clears us count) 00101 LPC_RTC->CCR |= 2; 00102 00103 // Set the RTC 00104 LPC_RTC->SEC = timeinfo->tm_sec; 00105 LPC_RTC->MIN = timeinfo->tm_min; 00106 LPC_RTC->HOUR = timeinfo->tm_hour; 00107 LPC_RTC->DOM = timeinfo->tm_mday; 00108 LPC_RTC->MONTH = timeinfo->tm_mon + 1; 00109 LPC_RTC->YEAR = timeinfo->tm_year + 1900; 00110 00111 // Restart clock 00112 LPC_RTC->CCR &= ~((uint32_t)2); 00113 }
Generated on Tue Jul 12 2022 13:47:01 by
1.7.2
