Christopher Haster / mbed-hal

Dependencies:   target-freescale

Fork of mbed-hal by Morpheus

Committer:
Christopher Haster
Date:
Wed Apr 06 09:41:33 2016 -0500
Revision:
20:fbc6173aa5b2
Parent:
0:9c59db1fbc9e
Added Binder class for statically allocated function binding

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:9c59db1fbc9e 1 /* mbed Microcontroller Library
screamer 0:9c59db1fbc9e 2 * Copyright (c) 2006-2013 ARM Limited
screamer 0:9c59db1fbc9e 3 *
screamer 0:9c59db1fbc9e 4 * Licensed under the Apache License, Version 2.0 (the "License");
screamer 0:9c59db1fbc9e 5 * you may not use this file except in compliance with the License.
screamer 0:9c59db1fbc9e 6 * You may obtain a copy of the License at
screamer 0:9c59db1fbc9e 7 *
screamer 0:9c59db1fbc9e 8 * http://www.apache.org/licenses/LICENSE-2.0
screamer 0:9c59db1fbc9e 9 *
screamer 0:9c59db1fbc9e 10 * Unless required by applicable law or agreed to in writing, software
screamer 0:9c59db1fbc9e 11 * distributed under the License is distributed on an "AS IS" BASIS,
screamer 0:9c59db1fbc9e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
screamer 0:9c59db1fbc9e 13 * See the License for the specific language governing permissions and
screamer 0:9c59db1fbc9e 14 * limitations under the License.
screamer 0:9c59db1fbc9e 15 */
screamer 0:9c59db1fbc9e 16 #include "rtc_api.h"
screamer 0:9c59db1fbc9e 17
screamer 0:9c59db1fbc9e 18 #include <time.h>
screamer 0:9c59db1fbc9e 19 #include "rtc_time.h"
screamer 0:9c59db1fbc9e 20 #include "us_ticker_api.h"
screamer 0:9c59db1fbc9e 21
screamer 0:9c59db1fbc9e 22 #if DEVICE_RTC
screamer 0:9c59db1fbc9e 23 static void (*_rtc_init)(void) = rtc_init;
screamer 0:9c59db1fbc9e 24 static int (*_rtc_isenabled)(void) = rtc_isenabled;
screamer 0:9c59db1fbc9e 25 static time_t (*_rtc_read)(void) = rtc_read;
screamer 0:9c59db1fbc9e 26 static void (*_rtc_write)(time_t t) = rtc_write;
screamer 0:9c59db1fbc9e 27 #else
screamer 0:9c59db1fbc9e 28 static void (*_rtc_init)(void) = NULL;
screamer 0:9c59db1fbc9e 29 static int (*_rtc_isenabled)(void) = NULL;
screamer 0:9c59db1fbc9e 30 static time_t (*_rtc_read)(void) = NULL;
screamer 0:9c59db1fbc9e 31 static void (*_rtc_write)(time_t t) = NULL;
screamer 0:9c59db1fbc9e 32 #endif
screamer 0:9c59db1fbc9e 33
screamer 0:9c59db1fbc9e 34 #ifdef __cplusplus
screamer 0:9c59db1fbc9e 35 extern "C" {
screamer 0:9c59db1fbc9e 36 #endif
screamer 0:9c59db1fbc9e 37 #if defined (__ICCARM__)
screamer 0:9c59db1fbc9e 38 time_t __time32(time_t *timer)
screamer 0:9c59db1fbc9e 39 #else
screamer 0:9c59db1fbc9e 40 time_t time(time_t *timer)
screamer 0:9c59db1fbc9e 41 #endif
screamer 0:9c59db1fbc9e 42
screamer 0:9c59db1fbc9e 43 {
screamer 0:9c59db1fbc9e 44 if (_rtc_isenabled != NULL) {
screamer 0:9c59db1fbc9e 45 if (!(_rtc_isenabled())) {
screamer 0:9c59db1fbc9e 46 set_time(0);
screamer 0:9c59db1fbc9e 47 }
screamer 0:9c59db1fbc9e 48 }
screamer 0:9c59db1fbc9e 49
screamer 0:9c59db1fbc9e 50 time_t t = 0;
screamer 0:9c59db1fbc9e 51 if (_rtc_read != NULL) {
screamer 0:9c59db1fbc9e 52 t = _rtc_read();
screamer 0:9c59db1fbc9e 53 }
screamer 0:9c59db1fbc9e 54
screamer 0:9c59db1fbc9e 55 if (timer != NULL) {
screamer 0:9c59db1fbc9e 56 *timer = t;
screamer 0:9c59db1fbc9e 57 }
screamer 0:9c59db1fbc9e 58 return t;
screamer 0:9c59db1fbc9e 59 }
screamer 0:9c59db1fbc9e 60
screamer 0:9c59db1fbc9e 61 void set_time(time_t t) {
screamer 0:9c59db1fbc9e 62 if (_rtc_init != NULL) {
screamer 0:9c59db1fbc9e 63 _rtc_init();
screamer 0:9c59db1fbc9e 64 }
screamer 0:9c59db1fbc9e 65 if (_rtc_write != NULL) {
screamer 0:9c59db1fbc9e 66 _rtc_write(t);
screamer 0:9c59db1fbc9e 67 }
screamer 0:9c59db1fbc9e 68 }
screamer 0:9c59db1fbc9e 69
screamer 0:9c59db1fbc9e 70 clock_t clock() {
screamer 0:9c59db1fbc9e 71 clock_t t = us_ticker_read();
screamer 0:9c59db1fbc9e 72 t /= 1000000 / CLOCKS_PER_SEC; // convert to processor time
screamer 0:9c59db1fbc9e 73 return t;
screamer 0:9c59db1fbc9e 74 }
screamer 0:9c59db1fbc9e 75
screamer 0:9c59db1fbc9e 76 void attach_rtc(time_t (*read_rtc)(void), void (*write_rtc)(time_t), void (*init_rtc)(void), int (*isenabled_rtc)(void)) {
screamer 0:9c59db1fbc9e 77 __disable_irq();
screamer 0:9c59db1fbc9e 78 _rtc_read = read_rtc;
screamer 0:9c59db1fbc9e 79 _rtc_write = write_rtc;
screamer 0:9c59db1fbc9e 80 _rtc_init = init_rtc;
screamer 0:9c59db1fbc9e 81 _rtc_isenabled = isenabled_rtc;
screamer 0:9c59db1fbc9e 82 __enable_irq();
screamer 0:9c59db1fbc9e 83 }
screamer 0:9c59db1fbc9e 84
screamer 0:9c59db1fbc9e 85
screamer 0:9c59db1fbc9e 86
screamer 0:9c59db1fbc9e 87 #ifdef __cplusplus
screamer 0:9c59db1fbc9e 88 }
screamer 0:9c59db1fbc9e 89 #endif
screamer 0:9c59db1fbc9e 90