]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/mbed/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_DELTA_DFCM_NNN40/rtc_api.c
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / mbed / targets / hal / TARGET_NORDIC / TARGET_MCU_NRF51822 / TARGET_DELTA_DFCM_NNN40 / rtc_api.c
1 /* mbed Microcontroller Library
2  * Copyright (c) 2006-2013 ARM Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #include "rtc_api.h"
17
18  
19 #define LFCLK_FREQUENCY         (32768UL)
20 #define RTC0_COUNTER_PRESCALER  ((LFCLK_FREQUENCY/8) - 1)
21 #define COMPARE_COUNTERTIME       (691200UL) //86400 x 8
22
23
24 time_t  initTime;
25
26 void rtc_init(void) {
27
28     NVIC_EnableIRQ(RTC0_IRQn);                                      // Enable Interrupt for the RTC in the core.
29     //NRF_RTC0->TASKS_STOP =1;
30     NRF_RTC0->PRESCALER     = RTC0_COUNTER_PRESCALER;               // Set prescaler to a TICK of RTC_FREQUENCY.
31     NRF_RTC0->CC[0]         = COMPARE_COUNTERTIME;                 // Compare0 after approx COMPARE_COUNTERTIME seconds.
32
33     // Enable COMPARE0 event and COMPARE0 interrupt:
34     NRF_RTC0->EVTENSET      = RTC_EVTENSET_COMPARE0_Msk;
35     NRF_RTC0->INTENSET      = RTC_INTENSET_COMPARE0_Msk;
36     NRF_RTC0->TASKS_START = 1;
37 }
38
39 void rtc_free(void) {
40     // [TODO]
41 }
42
43 /*
44  * Little check routine to see if the RTC has been enabled
45  *
46  * Clock Control Register
47  *  RTC_CCR[0] : 0 = Disabled, 1 = Enabled
48  *
49  */
50 int rtc_isenabled(void) {
51     // [TODO] return(((NRF_RTC0->TASKS_START) & 0x01) != 0);
52 }
53
54 time_t rtc_read(void) {
55
56     time_t t = initTime;
57     t += (86400*NRF_RTC0->EVENTS_COMPARE[0]);
58     t += (int)((NRF_RTC0->COUNTER)/8);
59     return(t);
60 }
61
62 void rtc_write(time_t t) {
63     // Convert the time in to a tm
64
65     // Pause clock, and clear counter register (clears us count)
66     NRF_RTC0->TASKS_STOP = 1;
67
68     initTime = t;
69     // Restart clock
70     NRF_RTC0->TASKS_START = 1;
71 }