SPKT

Dependencies:   F746_GUI SD_PlayerSkeleton F746_SAI_IO

Committer:
phungductung
Date:
Tue Jun 04 21:37:21 2019 +0000
Revision:
0:8ede47d38d10
SPKT

Who changed what in which revision?

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