diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-23 09:55:15 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-23 15:18:44 +0200 |
commit | 4fb1b79a804ca8de866be0ef718e54e1f62fa3ec (patch) | |
tree | 11b85c98244db22c927e7f1323ed222c43a589b0 /c/src/lib/libbsp/arm/lpc32xx | |
parent | bsps: Move legacy network drivers to bsps (diff) | |
download | rtems-4fb1b79a804ca8de866be0ef718e54e1f62fa3ec.tar.bz2 |
bsps: Move RTC drivers to bsps
This patch is a part of the BSP source reorganization.
Update #3285.
Diffstat (limited to 'c/src/lib/libbsp/arm/lpc32xx')
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/Makefile.am | 2 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc32xx/rtc/rtc-config.c | 142 |
2 files changed, 1 insertions, 143 deletions
diff --git a/c/src/lib/libbsp/arm/lpc32xx/Makefile.am b/c/src/lib/libbsp/arm/lpc32xx/Makefile.am index 9353f67da9..4a370756ff 100644 --- a/c/src/lib/libbsp/arm/lpc32xx/Makefile.am +++ b/c/src/lib/libbsp/arm/lpc32xx/Makefile.am @@ -69,7 +69,7 @@ librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/clock/clock-nxp-lpc.c # RTC librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/rtc/rtc-support.c -librtemsbsp_a_SOURCES += rtc/rtc-config.c +librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/lpc32xx/rtc/rtc-config.c # Misc librtemsbsp_a_SOURCES += misc/boot.c diff --git a/c/src/lib/libbsp/arm/lpc32xx/rtc/rtc-config.c b/c/src/lib/libbsp/arm/lpc32xx/rtc/rtc-config.c deleted file mode 100644 index bd225248b3..0000000000 --- a/c/src/lib/libbsp/arm/lpc32xx/rtc/rtc-config.c +++ /dev/null @@ -1,142 +0,0 @@ -/** - * @file - * - * @ingroup arm_lpc32xx - * - * @brief RTC configuration. - */ - -/* - * Copyright (c) 2009-2011 embedded brains GmbH. All rights reserved. - * - * embedded brains GmbH - * Obere Lagerstr. 30 - * 82178 Puchheim - * Germany - * <rtems@embedded-brains.de> - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#include <libchip/rtc.h> - -#include <bsp.h> -#include <bsp/lpc32xx.h> - -#define LPC32XX_RTC_COUNT 1U - -#define LPC32XX_RTC_COUNTER_DELTA 0xfffffffeU - -#define LPC32XX_RTC_KEY 0xb5c13f27U - -#define LPC32XX_RTC_CTRL_FORCE_ONSW (1U << 7) -#define LPC32XX_RTC_CTRL_STOP (1U << 6) -#define LPC32XX_RTC_CTRL_RESET (1U << 4) -#define LPC32XX_RTC_CTRL_MATCH_1_ONSW (1U << 3) -#define LPC32XX_RTC_CTRL_MATCH_0_ONSW (1U << 2) -#define LPC32XX_RTC_CTRL_MATCH_1_INTR (1U << 1) -#define LPC32XX_RTC_CTRL_MATCH_0_INTR (1U << 0) - -static void lpc32xx_rtc_set(uint32_t val) -{ - unsigned i = lpc32xx_arm_clk() / LPC32XX_OSCILLATOR_RTC; - - lpc32xx.rtc.ctrl |= LPC32XX_RTC_CTRL_STOP; - lpc32xx.rtc.ucount = val; - lpc32xx.rtc.dcount = LPC32XX_RTC_COUNTER_DELTA - val; - lpc32xx.rtc.ctrl &= ~LPC32XX_RTC_CTRL_STOP; - - /* It needs some time before we can read the values back */ - while (i != 0) { - __asm__ volatile ("nop"); - --i; - } -} - -static void lpc32xx_rtc_reset(void) -{ - lpc32xx.rtc.ctrl = LPC32XX_RTC_CTRL_RESET; - lpc32xx.rtc.ctrl = 0; - lpc32xx.rtc.key = LPC32XX_RTC_KEY; - lpc32xx_rtc_set(0); -} - -static void lpc32xx_rtc_initialize(int minor) -{ - uint32_t up_first = 0; - uint32_t up_second = 0; - uint32_t down_first = 0; - uint32_t down_second = 0; - - if (lpc32xx.rtc.key != LPC32XX_RTC_KEY) { - lpc32xx_rtc_reset(); - } - - do { - up_first = lpc32xx.rtc.ucount; - down_first = lpc32xx.rtc.dcount; - up_second = lpc32xx.rtc.ucount; - down_second = lpc32xx.rtc.dcount; - } while (up_first != up_second || down_first != down_second); - - if (up_first + down_first != LPC32XX_RTC_COUNTER_DELTA) { - lpc32xx_rtc_reset(); - } -} - -static int lpc32xx_rtc_get_time(int minor, rtems_time_of_day *tod) -{ - struct timeval now = { - .tv_sec = lpc32xx.rtc.ucount, - .tv_usec = 0 - }; - struct tm time; - - gmtime_r(&now.tv_sec, &time); - - tod->year = time.tm_year + 1900; - tod->month = time.tm_mon + 1; - tod->day = time.tm_mday; - tod->hour = time.tm_hour; - tod->minute = time.tm_min; - tod->second = time.tm_sec; - tod->ticks = 0; - - return RTEMS_SUCCESSFUL; -} - -static int lpc32xx_rtc_set_time(int minor, const rtems_time_of_day *tod) -{ - lpc32xx_rtc_set(_TOD_To_seconds(tod)); - - return 0; -} - -static bool lpc32xx_rtc_probe(int minor) -{ - return true; -} - -const rtc_fns lpc32xx_rtc_ops = { - .deviceInitialize = lpc32xx_rtc_initialize, - .deviceGetTime = lpc32xx_rtc_get_time, - .deviceSetTime = lpc32xx_rtc_set_time -}; - -size_t RTC_Count = LPC32XX_RTC_COUNT; - -rtc_tbl RTC_Table [LPC32XX_RTC_COUNT] = { - { - .sDeviceName = "/dev/rtc", - .deviceType = RTC_CUSTOM, - .pDeviceFns = &lpc32xx_rtc_ops, - .deviceProbe = lpc32xx_rtc_probe, - .pDeviceParams = NULL, - .ulCtrlPort1 = 0, - .ulDataPort = 0, - .getRegister = NULL, - .setRegister = NULL - } -}; |