RTC使用实例
本实例提供RTC接口的完整使用流程:
- 系统启动,驱动管理模块会识别系统当前的RTC器件;
- 驱动管理模块完成RTC设备的初始化和设备创建;
- 用户通过不同API,对该RTC设备进行对应的操作;
- 关闭RTC设备,释放设备资源。
示例如下:
1. #include "rtc_if.h"
2. int32_t RtcAlarmACallback(enum RtcAlarmIndex alarmIndex)
3. {
4. if (alarmIndex == RTC_ALARM_INDEX_A) {
5. /* 报警A的处理 */
6. printf("RTC Alarm A callback function\n\r");
7. } else if (alarmIndex == RTC_ALARM_INDEX_B) {
8. /* 报警B的处理 */
9. printf("RTC Alarm B callback function\n\r");
10. } else {
11. /* 错误处理 */
12. }
13. return 0;
14. }
16. void RtcTestSample(void)
17. {
18. int32_t ret;
19. struct RtcTime tm;
20. struct RtcTime alarmTime;
21. uint32_t freq;
22. struct DevHandle *handle = NULL;
24. /* 获取RTC设备句柄 */
25. handle = RtcOpen();
26. if (handle == NULL) {
27. /* 错误处理 */
28. }
29. /* 注册报警A的定时回调函数 */
30. ret = RtcRegisterAlarmCallback(handle, RTC_ALARM_INDEX_A, RtcAlarmACallback);
31. if (ret != 0) {
32. /* 错误处理 */
33. }
34. /* 设置RTC外接晶体振荡频率,注意按照器件手册要求配置RTC外频 */
35. freq = 32768; /* 32768 Hz */
36. ret = RtcSetFreq(handle, freq);
37. if (ret != 0) {
38. /* 错误处理 */
39. }
40. /* 设置RTC报警中断使能 */
41. ret = RtcAlarmInterruptEnable(handle, RTC_ALARM_INDEX_A, 1);
42. if (ret != 0) {
43. /* 错误处理 */
44. }
45. /* 设置RTC时间为2020/01/01 00:00:10 .990 */
46. tm.year = 2020;
47. tm.month = 01;
48. tm.day = 01;
49. tm.hour= 0;
50. tm.minute = 0;
51. tm.second = 10;
52. tm.millisecond = 990;
53. /* 写RTC时间信息 */
54. ret = RtcWriteTime(handle, &tm);
55. if (ret != 0) {
56. /* 错误处理 */
57. }
58. /* 设置RTC报警时间为2020/01/01 00:00:30 .100 */
59. alarmTime.year = 2020;
60. alarmTime.month = 01;
61. alarmTime.day = 01;
62. alarmTime.hour = 0;
63. alarmTime.minute = 0;
64. alarmTime.second = 30;
65. alarmTime.millisecond = 100;
66. /* 设置RTC_ALARM_INDEX_A索引定时报警时间信息, 定时时间到后会打印"RTC Alarm A callback function" */
67. ret = RtcWriteAlarm(handle, RTC_ALARM_INDEX_A, &alarmTime);
68. if (ret != 0) {
69. /* 错误处理 */
70. }
72. /* 读取RTC实时时间 */
73. ret = RtcReadTime(handle, &tm);
74. if (ret != 0) {
75. /* 错误处理 */
76. }
77. sleep(5)
78. printf("RTC read time:\n\r");
79. printf("year-month-date-weekday hour:minute:second .millisecond %04u-%02u-%02u-%u %02u:%02u:%02u .%03u",
80. tm.year, tm.month, tm.day, tm.weekday, tm.hour, tm.minute, tm.second, tm.millisecond);
81. /* 销毁RTC设备句柄 */
82. RtcClose(handle);
83. }
