Skip to content

[Bug] GD32的RTC驱动未考虑切换时钟源 #9167

@pipi-1

Description

@pipi-1

RT-Thread Version

5.1.0

Hardware Type/Architectures

GD32

Develop Toolchain

GCC

Describe the bug

GD32的RTC驱动未考虑切换时钟源
static int rt_hw_rtc_init(void)
{
rt_err_t ret;
time_t rtc_counter;

rcu_periph_clock_enable(RCU_PMU);
pmu_backup_write_enable();
rcu_periph_clock_enable(RCU_BKPI);

rtc_counter = get_rtc_timestamp();
/* once the rtc clock source has been selected, if can't be changed
 * anymore unless the Backup domain is reset */
rcu_bkp_reset_enable();
rcu_bkp_reset_disable();
rcu_periph_clock_enable(RCU_RTC);
rcu_osci_on(RCU_LXTAL);
if (SUCCESS == rcu_osci_stab_wait(RCU_LXTAL))
{
    /* set lxtal as rtc clock source */
    rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);
}
set_rtc_timestamp(rtc_counter);

#ifdef RT_USING_DEVICE_OPS
g_gd32_rtc_dev.rtc_dev.ops = &g_gd32_rtc_ops;
#else
g_gd32_rtc_dev.rtc_dev.init = RT_NULL;
g_gd32_rtc_dev.rtc_dev.open = RT_NULL;
g_gd32_rtc_dev.rtc_dev.close = RT_NULL;
g_gd32_rtc_dev.rtc_dev.read = RT_NULL;
g_gd32_rtc_dev.rtc_dev.write = RT_NULL;
g_gd32_rtc_dev.rtc_dev.control = rt_gd32_rtc_control;
#endif
g_gd32_rtc_dev.rtc_dev.type = RT_Device_Class_RTC;
g_gd32_rtc_dev.rtc_dev.rx_indicate = RT_NULL;
g_gd32_rtc_dev.rtc_dev.tx_complete = RT_NULL;
g_gd32_rtc_dev.rtc_dev.user_data = RT_NULL;

ret = rt_device_register(&g_gd32_rtc_dev.rtc_dev, "rtc", \
    RT_DEVICE_FLAG_RDWR);
if (ret != RT_EOK)
{
    LOG_E("failed register internal rtc device, err=%d", ret);
}

return ret;

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    BSP: GD32BSP related with GD32

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions