Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions bsp/es32f0334/.config
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,11 @@ CONFIG_BSP_USING_UART1=y
# CONFIG_BSP_USING_HWTIMER2 is not set
# CONFIG_BSP_USING_HWTIMER3 is not set

#
# RTC Drivers
#
# CONFIG_BSP_USING_RTC is not set

#
# Onboard Peripheral Drivers
#
Expand Down
1 change: 1 addition & 0 deletions bsp/es32f0334/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/)

Expand Down
7 changes: 7 additions & 0 deletions bsp/es32f0334/drivers/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 4 additions & 0 deletions bsp/es32f0334/drivers/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
157 changes: 157 additions & 0 deletions bsp/es32f0334/drivers/drv_rtc.c
Original file line number Diff line number Diff line change
@@ -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
16 changes: 16 additions & 0 deletions bsp/es32f0334/drivers/drv_rtc.h
Original file line number Diff line number Diff line change
@@ -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
9 changes: 4 additions & 5 deletions bsp/es32f0334/libraries/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
3 changes: 3 additions & 0 deletions bsp/es32f0334/rtconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,9 @@
/* HWtimer Drivers */


/* RTC Drivers */


/* Onboard Peripheral Drivers */


Expand Down
2 changes: 1 addition & 1 deletion bsp/es32f0334/rtconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
DEVICE = ' -mcpu=' + CPU + ' -mthumb -ffunction-sections -fdata-sections'
CFLAGS = DEVICE + ' -std=c99'
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 = ''
Expand Down