summaryrefslogtreecommitdiff
path: root/bsp
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2019-04-02 13:36:11 +0800
committerGitHub <[email protected]>2019-04-02 13:36:11 +0800
commit762cdcc2721673c643b8864de534336d21ca129e (patch)
tree809490db47a5e764c196a6b91d5f4d3daa108afe /bsp
parent8d5c456ad3f7571dd353c5cb77c235fddf3e0594 (diff)
parentf3e4da9530af7a74df041b1e3b772f4177ce8e6c (diff)
Merge pull request #2532 from wangyq2018/es32f0334
[bsp/es32f0334] add rtc driver
Diffstat (limited to 'bsp')
-rw-r--r--bsp/es32f0334/.config5
-rw-r--r--bsp/es32f0334/README.md1
-rw-r--r--bsp/es32f0334/drivers/Kconfig7
-rw-r--r--bsp/es32f0334/drivers/SConscript4
-rw-r--r--bsp/es32f0334/drivers/drv_rtc.c157
-rw-r--r--bsp/es32f0334/drivers/drv_rtc.h16
-rw-r--r--bsp/es32f0334/libraries/SConscript9
-rw-r--r--bsp/es32f0334/rtconfig.h3
-rw-r--r--bsp/es32f0334/rtconfig.py2
9 files changed, 198 insertions, 6 deletions
diff --git a/bsp/es32f0334/.config b/bsp/es32f0334/.config
index 293b4810e0..3272773644 100644
--- a/bsp/es32f0334/.config
+++ b/bsp/es32f0334/.config
@@ -353,6 +353,11 @@ CONFIG_BSP_USING_UART1=y
# CONFIG_BSP_USING_HWTIMER3 is not set
#
+# RTC Drivers
+#
+# CONFIG_BSP_USING_RTC is not set
+
+#
# Onboard Peripheral Drivers
#
# CONFIG_BSP_USING_SPI_FLASH is not set
diff --git a/bsp/es32f0334/README.md b/bsp/es32f0334/README.md
index 086d941d7e..c3a6da273c 100644
--- a/bsp/es32f0334/README.md
+++ b/bsp/es32f0334/README.md
@@ -43,6 +43,7 @@ ES-PDS-ES32F0334-V1.1
| I2C | 支持 | I2C0/1 |
| PWM | 支持 | PWM0/1/2/3 |
| TIMER | 支持 | TIMER0/1/2/3 |
+| RTC | 支持 | RTC |
更多详细信息请咨询[上海东软载波微电子技术支持](http://www.essemi.com/)
diff --git a/bsp/es32f0334/drivers/Kconfig b/bsp/es32f0334/drivers/Kconfig
index 6f91a318d6..002d413c76 100644
--- a/bsp/es32f0334/drivers/Kconfig
+++ b/bsp/es32f0334/drivers/Kconfig
@@ -88,6 +88,13 @@ menu "Hardware Drivers Config"
default n
endmenu
+ menu "RTC Drivers"
+ config BSP_USING_RTC
+ bool "Using RTC"
+ select RT_USING_RTC
+ default n
+ endmenu
+
endmenu
menu "Onboard Peripheral Drivers"
diff --git a/bsp/es32f0334/drivers/SConscript b/bsp/es32f0334/drivers/SConscript
index 99e3465388..8461fc9679 100644
--- a/bsp/es32f0334/drivers/SConscript
+++ b/bsp/es32f0334/drivers/SConscript
@@ -35,6 +35,10 @@ if GetDepend('BSP_USING_PWM0') or GetDepend('BSP_USING_PWM1') or GetDepend('BSP_
if GetDepend('BSP_USING_HWTIMER0') or GetDepend('BSP_USING_HWTIMER1') or GetDepend('BSP_USING_HWTIMER2') or GetDepend('BSP_USING_HWTIMER3'):
src += ['drv_hwtimer.c']
+# add rtc driver code
+if GetDepend(['BSP_USING_RTC']):
+ src += ['drv_rtc.c']
+
CPPPATH = [cwd]
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH)
diff --git a/bsp/es32f0334/drivers/drv_rtc.c b/bsp/es32f0334/drivers/drv_rtc.c
new file mode 100644
index 0000000000..cea28064f9
--- /dev/null
+++ b/bsp/es32f0334/drivers/drv_rtc.c
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2018 Shanghai Eastsoft Microelectronics Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2019-04-01 wangyq the first version
+ */
+
+#include <rthw.h>
+#include <rtthread.h>
+#include <rtdevice.h>
+#include <string.h>
+#include "board.h"
+#include "drv_rtc.h"
+#include <ald_cmu.h>
+#include <ald_rtc.h>
+
+#ifdef RT_USING_RTC
+
+static void rtc_init(rtc_init_t *init)
+{
+ assert_param(IS_RTC_HOUR_FORMAT(init->hour_format));
+ assert_param(IS_RTC_OUTPUT_SEL(init->output));
+ assert_param(IS_RTC_OUTPUT_POLARITY(init->output_polarity));
+
+ rtc_reset();
+ RTC_UNLOCK();
+
+ MODIFY_REG(RTC->CON, RTC_CON_HFM_MSK, init->hour_format << RTC_CON_HFM_POS);
+ MODIFY_REG(RTC->CON, RTC_CON_EOS_MSK, init->output << RTC_CON_EOS_POSS);
+ MODIFY_REG(RTC->CON, RTC_CON_POL_MSK, init->output_polarity << RTC_CON_POL_POS);
+ MODIFY_REG(RTC->PSR, RTC_PSR_SPRS_MSK, init->synch_pre_div << RTC_PSR_SPRS_POSS);
+ MODIFY_REG(RTC->PSR, RTC_PSR_APRS_MSK, init->asynch_pre_div << RTC_PSR_APRS_POSS);
+
+ RTC_LOCK();
+ return;
+}
+
+static rt_err_t es32f0_rtc_control(rt_device_t dev, int cmd, void *args)
+{
+ rt_err_t result = RT_EOK;
+
+ struct tm time_temp;
+ struct tm *pNow;
+ rtc_date_t date;
+ rtc_time_t time;
+
+ switch (cmd)
+ {
+ case RT_DEVICE_CTRL_RTC_GET_TIME:
+
+ rtc_get_date_time(&date, &time, RTC_FORMAT_DEC);
+ time_temp.tm_sec = time.second;
+ time_temp.tm_min = time.minute;
+ time_temp.tm_hour = time.hour;
+ time_temp.tm_mday = date.day;
+ time_temp.tm_mon = date.month - 1;
+ time_temp.tm_year = date.year - 1900 + 2000;
+ *((time_t *)args) = mktime(&time_temp);
+ break;
+
+ case RT_DEVICE_CTRL_RTC_SET_TIME:
+
+ rt_enter_critical();
+ /* converts calendar time time into local time. */
+ pNow = localtime((const time_t *)args);
+ /* copy the statically located variable */
+ memcpy(&time_temp, pNow, sizeof(struct tm));
+ /* unlock scheduler. */
+ rt_exit_critical();
+
+ time.hour = time_temp.tm_hour;
+ time.minute = time_temp.tm_min;
+ time.second = time_temp.tm_sec;
+ date.year = time_temp.tm_year + 1900 - 2000;
+ date.month = time_temp.tm_mon + 1;
+ date.day = time_temp.tm_mday;
+ rtc_set_time(&time, RTC_FORMAT_DEC);
+ rtc_set_date(&date, RTC_FORMAT_DEC);
+ /* start RTC */
+ RTC_UNLOCK();
+ SET_BIT(RTC->CON, RTC_CON_GO_MSK);
+ RTC_LOCK();
+ break;
+
+ case RT_DEVICE_CTRL_RTC_GET_ALARM:
+ break;
+
+ case RT_DEVICE_CTRL_RTC_SET_ALARM:
+ break;
+
+ default:
+ break;
+ }
+
+ return result;
+}
+
+#ifdef RT_USING_DEVICE_OPS
+const static struct rt_device_ops es32f0_rtc_ops =
+{
+ RT_NULL,
+ RT_NULL,
+ RT_NULL,
+ RT_NULL,
+ RT_NULL,
+ es32f0_rtc_control
+};
+#endif
+
+int rt_hw_rtc_init(void)
+{
+ rt_err_t ret = RT_EOK;
+ static struct rt_device rtc_dev;
+ rtc_init_t rtc_initstruct;
+
+ /* enable external 32.768kHz */
+ CMU_LOSC_ENABLE();
+ cmu_losc_safe_config(ENABLE);
+ /* set default time */
+ RTC_UNLOCK();
+ WRITE_REG(RTC->TIME, 0x134251);
+ WRITE_REG(RTC->DATE, 0x1190401);
+ RTC_LOCK();
+ /* RTC function initialization */
+ rtc_initstruct.hour_format = RTC_HOUR_FORMAT_24;
+ rtc_initstruct.asynch_pre_div = 0;
+ rtc_initstruct.synch_pre_div = 32767;
+ rtc_initstruct.output = RTC_OUTPUT_DISABLE;
+ rtc_init(&rtc_initstruct);
+
+ rtc_dev.type = RT_Device_Class_RTC;
+ rtc_dev.rx_indicate = RT_NULL;
+ rtc_dev.tx_complete = RT_NULL;
+
+#ifdef RT_USING_DEVICE_OPS
+ rtc_dev.ops = &es32f0_rtc_ops;
+#else
+ rtc_dev.init = RT_NULL;
+ rtc_dev.open = RT_NULL;
+ rtc_dev.close = RT_NULL;
+ rtc_dev.read = RT_NULL;
+ rtc_dev.write = RT_NULL;
+ rtc_dev.control = es32f0_rtc_control;
+#endif
+
+ rtc_dev.user_data = RTC;
+
+ ret = rt_device_register(&rtc_dev, "rtc", RT_DEVICE_FLAG_RDWR);
+
+ return ret;
+}
+INIT_DEVICE_EXPORT(rt_hw_rtc_init);
+
+#endif
diff --git a/bsp/es32f0334/drivers/drv_rtc.h b/bsp/es32f0334/drivers/drv_rtc.h
new file mode 100644
index 0000000000..68c2b8c891
--- /dev/null
+++ b/bsp/es32f0334/drivers/drv_rtc.h
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2018 Shanghai Eastsoft Microelectronics Co., Ltd.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2019-04-01 wangyq the first version
+ */
+
+#ifndef DRV_RTC_H__
+#define DRV_RTC_H__
+
+int rt_hw_rtc_init(void);
+
+#endif
diff --git a/bsp/es32f0334/libraries/SConscript b/bsp/es32f0334/libraries/SConscript
index 13ed7d3a2b..3a0122acd7 100644
--- a/bsp/es32f0334/libraries/SConscript
+++ b/bsp/es32f0334/libraries/SConscript
@@ -10,18 +10,17 @@ src = []
src += Glob('ES32F033x_ALD_StdPeriph_Driver/Source/*.c')
-
#add for startup script
if rtconfig.CROSS_TOOL == 'gcc':
src = src + ['CMSIS/Device/EastSoft/es32f033x/Startup/gcc/startup_es32f033x.s']
elif rtconfig.CROSS_TOOL == 'keil':
src = src + ['CMSIS/Device/EastSoft/es32f033x/Startup/keil/startup_es32f033x.s']
elif rtconfig.CROSS_TOOL == 'iar':
- src = src + ['CMSIS/Device/EastSoft/es32f033x/Startup/iar/startup_es32f033x.s']
+ src = src + ['CMSIS/Device/EastSoft/es32f033x/Startup/iar/startup_es32f033x.s']
-path = [cwd + '/CMSIS/Device/EastSoft/es32f033x/Include',
- cwd + '/CMSIS/Include',
- cwd + '/ES32F033x_ALD_StdPeriph_Driver/Include']
+path = [cwd + '/CMSIS/Device/EastSoft/es32f033x/Include',
+ cwd + '/CMSIS/Include',
+ cwd + '/ES32F033x_ALD_StdPeriph_Driver/Include']
group = DefineGroup('Libraries', src, depend = [''], CPPPATH = path)
diff --git a/bsp/es32f0334/rtconfig.h b/bsp/es32f0334/rtconfig.h
index d081a962cd..424c0f62e7 100644
--- a/bsp/es32f0334/rtconfig.h
+++ b/bsp/es32f0334/rtconfig.h
@@ -175,6 +175,9 @@
/* HWtimer Drivers */
+/* RTC Drivers */
+
+
/* Onboard Peripheral Drivers */
diff --git a/bsp/es32f0334/rtconfig.py b/bsp/es32f0334/rtconfig.py
index 170bae8a7b..eb371bf3a7 100644
--- a/bsp/es32f0334/rtconfig.py
+++ b/bsp/es32f0334/rtconfig.py
@@ -46,7 +46,7 @@ if PLATFORM == 'gcc':
DEVICE = ' -mcpu=' + CPU + ' -mthumb -ffunction-sections -fdata-sections'
CFLAGS = DEVICE
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb'
- LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds'
+ LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T drivers/linker_scripts/link.lds'
CPATH = ''
LPATH = ''