目录
RTC:Real Time Clock,实时时钟,能够提供日历和闹钟的功能。
RTC是一个独立的二进码十进制格式(BCD码)定时器/计数器。其中一个32位寄存器包括BCD格式表示的seconds、minutes、hours(12或24小时制),另一个32位寄存器包括二进制格式表示的days。BCD码是用4位二进制数来表示1位十进制数中的0~9这10个数码。另外可以自动将月份的天数计为28、29(闰年)、30、31天以及夏令时补偿。
只要工作电压维持在运行范围,不管在运行模式、低功耗模式还是重置情况下,RTC都不会停止。
通过之前写的使用PKE8720DF-C13-F10(AMB26)开发板——周期性点亮LED灯这篇文章,了解PKE8720DF-C13-F10(AMB26)开发板的特性、Linux编译环境准备、SDK code下载与编译生成bin文件、使用自带Image tool将bin文件烧到板子里面,我们可以很方便用PKE8720DF-C13-F10(AMB26)开发板进行二次开发。
本文主要说明如何使用开发板的RTC功能来达到每秒计时的目的,实验结果是通过每秒打印时间信息给出,方便使用者理解。
基于RTC实验每秒打印时间信息
(1)材料准备
- 1 块 PKE8720DF-C13-F10开发板
- 1 根 USB转type-C数据线
(2)代码修改
本实验的代码位于~\ambd_sdk\project\realtek_amebaD_va0_example\example_sources\\RTC\raw\rtc\src\main.c,将main()函数的最后几行修改如下:
DiagPrintf("Time as seconds since January 1, 1970 = %d\n", seconds);
DiagPrintf("Time as a basic string = %s", ctime(&seconds));
DiagPrintf("Time as a custom formatted string = %04d-%02d-%02d %02d:%02d:%02d\n\n",
timeinfo->tm_year+1900, timeinfo->tm_mon+1, timeinfo->tm_mday, timeinfo->tm_hour,
timeinfo->tm_min,timeinfo->tm_sec);
修改之后替换/project/realtek_amebaD_va0_example/src/src_hp里面的main.c,make all生成3个bin文件:
km0_boot_all.bin
km4_boot_all.bin
km0_km4_image2.bin
之后download image到板子。
(3)使用Tera Term串口调试工具来打印结果
用USB转type-C数据线将开发板连接到PC上,显示为COM15口
打开Tera Term,进行如下setting,
按板子上的RESET按键,这时候可以看到Tera Term开始打印时间相关的信息,并且按秒递增,如果给板子一直供电,时间相关的信息会一直打印。
第一行log打印的seconds为1256729737也即与42行赋值的初始值一样,这是从1970年1月1日0分0秒经过的总秒数,换算成实际时间是2009-10-28 11:35:37,这也体现在第二行打印的log上,这段字符串是由ctime()函数生成。
第三行log打印的是结构体struct tm *timeinfo里面的时间信息,可以网上搜索struct tm结构体的具体作用,里面的成员有两个需要注意的:
a) int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
b) int tm_year; /* 年份,其值等于实际年份减去1900 */
所以在代码中有进行相应的修改以便更符合实际情况。
实验中的三行log反应的是同一时间信息,并且可以看到是按秒递增,结果符合预期!!!