summaryrefslogtreecommitdiff
path: root/bsp/bluetrum/libraries
diff options
context:
space:
mode:
authorgreedyhao <[email protected]>2021-08-08 16:32:56 +0800
committergreedyhao <[email protected]>2021-08-08 16:32:56 +0800
commit5409ceed63d4b1e61362cdf54350655dcb423f7a (patch)
tree4502387753426cc9b3945f0567c934c00cb19558 /bsp/bluetrum/libraries
parent1e7290231e5075f58917d648ecfb50a2d45497ce (diff)
[bsp][bluetrum] Fixed RTC driver building errors
Diffstat (limited to 'bsp/bluetrum/libraries')
-rw-r--r--bsp/bluetrum/libraries/hal_drivers/drv_rtc.c131
1 files changed, 24 insertions, 107 deletions
diff --git a/bsp/bluetrum/libraries/hal_drivers/drv_rtc.c b/bsp/bluetrum/libraries/hal_drivers/drv_rtc.c
index 9107107ab0..69b7613943 100644
--- a/bsp/bluetrum/libraries/hal_drivers/drv_rtc.c
+++ b/bsp/bluetrum/libraries/hal_drivers/drv_rtc.c
@@ -144,151 +144,68 @@ void hal_rtc_init(void)
}
/************** HAL End *******************/
-static time_t get_rtc_time_stamp(void)
+static rt_err_t ab32_rtc_get_secs(void *args)
{
- time_t sec = 0;
-
- sec = irtc_time_read(RTCCNT_CMD);
- LOG_D("get rtc time.");
+ *(rt_uint32_t *)args = irtc_time_read(RTCCNT_CMD);
+ LOG_D("RTC: get rtc_time %x\n", *(rt_uint32_t *)args);
- return sec;
+ return RT_EOK;
}
-static rt_err_t set_rtc_time_stamp(time_t time_stamp)
+static rt_err_t ab32_rtc_set_secs(void *args)
{
- irtc_time_write(RTCCNT_CMD, time_stamp);
+ irtc_time_write(RTCCNT_CMD, *(rt_uint32_t *)args);
return RT_EOK;
}
-static rt_err_t set_rtc_alarm_stamp(time_t alarm_stamp)
+static rt_err_t ab32_rtc_get_alarm(void *args)
{
- irtc_time_write(RTCALM_CMD, alarm_stamp);
+ *(rt_uint32_t *)args = irtc_time_read(RTCALM_CMD);
return RT_EOK;
}
-static time_t get_rtc_alarm_stamp(void)
+static rt_err_t ab32_rtc_set_alarm(void *args)
{
- time_t sec = 0;
-
- sec = irtc_time_read(RTCALM_CMD);
+ irtc_time_write(RTCALM_CMD, *(rt_uint32_t *)args);
- return sec;
+ return RT_EOK;
}
-static void rt_rtc_init(void)
+static rt_err_t ab32_rtc_init(void)
{
hal_rtc_init();
-}
-static rt_err_t ab32_rtc_control(rt_device_t dev, int cmd, void *args)
-{
- rt_err_t result = RT_EOK;
- RT_ASSERT(dev != RT_NULL);
- switch (cmd)
- {
- case RT_DEVICE_CTRL_RTC_GET_TIME:
- *(time_t *)args = get_rtc_time_stamp();
- LOG_D("RTC: get rtc_time %x", *(time_t *)args);
- break;
-
- case RT_DEVICE_CTRL_RTC_SET_TIME:
- if (set_rtc_time_stamp(*(time_t *)args))
- {
- result = -RT_ERROR;
- }
- LOG_D("RTC: set rtc_time %x", *(time_t *)args);
- break;
- case RT_DEVICE_CTRL_RTC_SET_ALARM:
- if (set_rtc_alarm_stamp(*(time_t *)args))
- {
- result = -RT_ERROR;
- }
- LOG_D("RTC: set alarm_stamp %x", *(time_t *)args);
- break;
- case RT_DEVICE_CTRL_RTC_GET_ALARM:
- *(time_t *)args = get_rtc_alarm_stamp();
- LOG_D("RTC: get alarm_stamp %x", *(time_t *)args);
- break;
- }
-
- return result;
+ return RT_EOK;
}
-#ifdef RT_USING_DEVICE_OPS
-const static struct rt_device_ops rtc_ops =
+static const struct rt_rtc_ops ab32_rtc_ops =
{
+ ab32_rtc_init,
+ ab32_rtc_get_secs,
+ ab32_rtc_set_secs,
+ ab32_rtc_get_alarm,
+ ab32_rtc_set_alarm,
RT_NULL,
RT_NULL,
- RT_NULL,
- RT_NULL,
- RT_NULL,
- ab32_rtc_control
};
-#endif
-
-static rt_err_t rt_hw_rtc_register(rt_device_t device, const char *name, rt_uint32_t flag)
-{
- RT_ASSERT(device != RT_NULL);
- rt_rtc_init();
-#ifdef RT_USING_DEVICE_OPS
- device->ops = &rtc_ops;
-#else
- device->init = RT_NULL;
- device->open = RT_NULL;
- device->close = RT_NULL;
- device->read = RT_NULL;
- device->write = RT_NULL;
- device->control = ab32_rtc_control;
-#endif
- device->type = RT_Device_Class_RTC;
- device->rx_indicate = RT_NULL;
- device->tx_complete = RT_NULL;
- device->user_data = RT_NULL;
+static rt_rtc_dev_t ab32_rtc_dev;
- /* register a character device */
- return rt_device_register(device, name, flag);
-}
-
-#ifdef RT_USING_ALARM
-RT_SECTION(".irq.rtc")
-static void rtc_isr(int vector, void *param)
-{
- rt_interrupt_enter();
-
- if (RTCCON & RTC_CON_ALM_PEND)
- {
- RTCCPND |= RTC_CPND_ALM;
- }
-
-#ifdef RTC_USING_1S_INT
- if (RTCCON & RTC_CON_1S_PEND)
- {
- RTCCPND |= RTC_CPND_1S;
- }
-#endif
-
- rt_interrupt_leave();
-}
-#endif
-
-int rt_hw_rtc_init(void)
+static int rt_hw_rtc_init(void)
{
rt_err_t result;
- result = rt_hw_rtc_register(&rtc, "rtc", RT_DEVICE_FLAG_RDWR);
+ ab32_rtc_dev.ops = &ab32_rtc_ops;
+ result = rt_hw_rtc_register(&ab32_rtc_dev, "rtc", RT_DEVICE_FLAG_RDWR, RT_NULL);
if (result != RT_EOK)
{
LOG_E("rtc register err code: %d", result);
return result;
}
-
-#ifdef RT_USING_ALARM
- rt_hw_interrupt_install(IRQ_RTC_VECTOR, rtc_isr, RT_NULL, "rtc_isr");
-#endif
LOG_D("rtc init success");
+
return RT_EOK;
}
INIT_DEVICE_EXPORT(rt_hw_rtc_init);