added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
107:414e9c822e99
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 107:414e9c822e99 1 /* mbed Microcontroller Library
mbed_official 107:414e9c822e99 2 * Copyright (c) 2006-2015 ARM Limited
mbed_official 107:414e9c822e99 3 *
mbed_official 107:414e9c822e99 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 107:414e9c822e99 5 * you may not use this file except in compliance with the License.
mbed_official 107:414e9c822e99 6 * You may obtain a copy of the License at
mbed_official 107:414e9c822e99 7 *
mbed_official 107:414e9c822e99 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 107:414e9c822e99 9 *
mbed_official 107:414e9c822e99 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 107:414e9c822e99 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 107:414e9c822e99 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 107:414e9c822e99 13 * See the License for the specific language governing permissions and
mbed_official 107:414e9c822e99 14 * limitations under the License.
mbed_official 107:414e9c822e99 15 */
mbed_official 107:414e9c822e99 16 #include "mbed_assert.h"
mbed_official 107:414e9c822e99 17 #include "rtc_api.h"
mbed_official 107:414e9c822e99 18 #include "cmsis.h"
mbed_official 107:414e9c822e99 19 #include "sysclk.h"
mbed_official 107:414e9c822e99 20 #include "rtc.h"
mbed_official 107:414e9c822e99 21
mbed_official 107:414e9c822e99 22 static int rtc_inited = 0;
mbed_official 107:414e9c822e99 23
mbed_official 107:414e9c822e99 24 extern uint8_t g_sys_init;
mbed_official 107:414e9c822e99 25
mbed_official 107:414e9c822e99 26 void rtc_init(void)
mbed_official 107:414e9c822e99 27 {
mbed_official 107:414e9c822e99 28 if (g_sys_init == 0) {
mbed_official 107:414e9c822e99 29 sysclk_init();
mbed_official 107:414e9c822e99 30 system_board_init();
mbed_official 107:414e9c822e99 31 g_sys_init = 1;
mbed_official 107:414e9c822e99 32 }
mbed_official 107:414e9c822e99 33 /* Default RTC configuration, 24-hour mode */
mbed_official 107:414e9c822e99 34 rtc_set_hour_mode(RTC, 0);
mbed_official 107:414e9c822e99 35 rtc_inited = 1;
mbed_official 107:414e9c822e99 36 }
mbed_official 107:414e9c822e99 37
mbed_official 107:414e9c822e99 38 void rtc_free(void)
mbed_official 107:414e9c822e99 39 {
mbed_official 107:414e9c822e99 40 /*This is a free running peripheral and cannot be disabled*/
mbed_official 107:414e9c822e99 41 rtc_inited = 0;
mbed_official 107:414e9c822e99 42 }
mbed_official 107:414e9c822e99 43
mbed_official 107:414e9c822e99 44
mbed_official 107:414e9c822e99 45 int rtc_isenabled(void)
mbed_official 107:414e9c822e99 46 {
mbed_official 107:414e9c822e99 47 return rtc_inited;
mbed_official 107:414e9c822e99 48 }
mbed_official 107:414e9c822e99 49
mbed_official 107:414e9c822e99 50
mbed_official 107:414e9c822e99 51 time_t rtc_read(void)
mbed_official 107:414e9c822e99 52 {
mbed_official 107:414e9c822e99 53 if (!rtc_inited) {
mbed_official 107:414e9c822e99 54 /* Return invalid time for now! */
mbed_official 107:414e9c822e99 55 return 0;
mbed_official 107:414e9c822e99 56 }
mbed_official 107:414e9c822e99 57 struct tm timeinfo;
mbed_official 107:414e9c822e99 58 uint32_t ul_hour, ul_minute, ul_second;
mbed_official 107:414e9c822e99 59 uint32_t ul_year, ul_month, ul_day, ul_week;
mbed_official 107:414e9c822e99 60
mbed_official 107:414e9c822e99 61 rtc_get_time(RTC, &ul_hour, &ul_minute, &ul_second);
mbed_official 107:414e9c822e99 62 rtc_get_date(RTC, &ul_year, &ul_month, &ul_day, &ul_week);
mbed_official 107:414e9c822e99 63
mbed_official 107:414e9c822e99 64 timeinfo.tm_sec = ul_second;
mbed_official 107:414e9c822e99 65 timeinfo.tm_min = ul_minute;
mbed_official 107:414e9c822e99 66 timeinfo.tm_hour = ul_hour;
mbed_official 107:414e9c822e99 67 timeinfo.tm_mday = ul_day;
mbed_official 107:414e9c822e99 68 timeinfo.tm_wday = ul_week;
mbed_official 107:414e9c822e99 69 timeinfo.tm_mon = ul_month;
mbed_official 107:414e9c822e99 70 timeinfo.tm_year = (ul_year - 1900);
mbed_official 107:414e9c822e99 71
mbed_official 107:414e9c822e99 72 /* Convert to timestamp */
mbed_official 107:414e9c822e99 73 time_t t = mktime(&timeinfo);
mbed_official 107:414e9c822e99 74 return t;
mbed_official 107:414e9c822e99 75 }
mbed_official 107:414e9c822e99 76
mbed_official 107:414e9c822e99 77 void rtc_write(time_t t)
mbed_official 107:414e9c822e99 78 {
mbed_official 107:414e9c822e99 79 if (!rtc_inited) {
mbed_official 107:414e9c822e99 80 /* Initialize the RTC is not yet initialized */
mbed_official 107:414e9c822e99 81 rtc_init();
mbed_official 107:414e9c822e99 82 }
mbed_official 107:414e9c822e99 83 struct tm *timeinfo = localtime(&t);
mbed_official 107:414e9c822e99 84 uint32_t ul_hour, ul_minute, ul_second;
mbed_official 107:414e9c822e99 85 uint32_t ul_year, ul_month, ul_day, ul_week;
mbed_official 107:414e9c822e99 86
mbed_official 107:414e9c822e99 87 ul_second = timeinfo->tm_sec;
mbed_official 107:414e9c822e99 88 ul_minute = timeinfo->tm_min;
mbed_official 107:414e9c822e99 89 ul_hour = timeinfo->tm_hour;
mbed_official 107:414e9c822e99 90 ul_day = timeinfo->tm_mday;
mbed_official 107:414e9c822e99 91 ul_week = timeinfo->tm_wday;
mbed_official 107:414e9c822e99 92 ul_month = timeinfo->tm_mon;
mbed_official 107:414e9c822e99 93 ul_year = timeinfo->tm_year;
mbed_official 107:414e9c822e99 94
mbed_official 107:414e9c822e99 95 /* Set the RTC */
mbed_official 107:414e9c822e99 96 rtc_set_time(RTC, ul_hour, ul_minute, ul_second);
mbed_official 107:414e9c822e99 97 rtc_set_date(RTC, ul_year, ul_month, ul_day, ul_week);
mbed_official 107:414e9c822e99 98 }