驱动看完了,剩下的就是适配RTC驱动了,从分析的驱动上看,我们需要做两个事,一个是注册一个g_rtc的设备,二是在注册的设备中注册rtc_callback的回调函数。
设备注册
还是老套路,直接从stacks中开始操作。
以上操作执行完毕后,点击Generate Project Content生成工程后保存即可。
选开RTC功能
选择完成后运行scons --target=mdk5生成新工程
代码编写
代码上就直接拷贝了RTT论坛上的RTC测试代码,那份测试代码仅仅是设置了RTC时钟,并延时3s读取RTC时间。我们可以使用测试代码初始化RTC后,隔一段时间读一下date状态便能确认RTC是否跑起来。
#define RTC_NAME "rtc" static int rtc_sample(int argc, char *argv[]) { rt_err_t ret = RT_EOK; time_t now; rt_device_t device = RT_NULL; /*寻找设备*/ device = rt_device_find(RTC_NAME); if (!device) { rt_kprintf("find %s failed!", RTC_NAME); return RT_ERROR; } /*初始化RTC设备*/ if(rt_device_open(device, 0) != RT_EOK) { rt_kprintf("open %s failed!", RTC_NAME); return RT_ERROR; } /* 设置日期 */ ret = set_date(2018, 12, 3); if (ret != RT_EOK) { rt_kprintf("set RTC date failed\n"); return ret; } /* 设置时间 */ ret = set_time(11, 15, 50); if (ret != RT_EOK) { rt_kprintf("set RTC time failed\n"); return ret; } /* 延时3秒 */ rt_thread_mdelay(3000); /* 获取时间 */ now = time(RT_NULL); rt_kprintf("%s\n", ctime(&now)); return ret; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(rtc_sample, rtc sample);
结果验证
\ | / - RT - Thread Operating System / | \ 5.2.0 build Jan 23 2025 00:19:14 2006 - 2024 Copyright by RT-Thread team Hello RT-Thread! msh >rt rtc_sample msh >rtc_sample Mon Dec 3 11:15:53 2018 msh >date date msh >date local time: Mon Dec 3 11:15:59 2018 timestamps: 1543806959 timezone: UTC+08:00:00 msh >date local time: Mon Dec 3 11:16:09 2018 timestamps: 1543806969 timezone: UTC+08:00:00 msh > \ | / - RT - Thread Operating System / | \ 5.2.0 build Jan 23 2025 00:19:14 2006 - 2024 Copyright by RT-Thread team Hello RT-Thread! msh >date date msh >date local time: Mon Dec 3 11:16:21 2018 timestamps: 1543806959 timezone: UTC+08:00:00
从结果上看RTC已经跑起来了,而且我第二次敲date命令时有刻意得计时10s再去按回车,可以发现时间还是准的 ,另外,按rst键重启板卡,可以发现RTC模块还是在跑的,说明硬件RTC适配完成。