【南京中科微CSM32RV20开发板试用体验】+4.悲催的RTC

描述

本文来源电子发烧友社区,作者:川楠, 帖子地址:https://bbs.elecfans.com/jishu_2245155_1_1.html

前言

大家好。
首先,感谢南京中科微提供的CSM32RV20开发板,同时也感谢发烧友提供的试用平台。
这次测试的是RTC外设,但是从题目中,就可以看到,这是一个悲剧。

代码编程
直接上我写的代码吧:


  1. int main(void)
  2. {
  3.  
  4.     uint32_t rtc_val;
  5.  
  6.     ///----System Init ---------------------------------------------------------------------------------------------
  7.     CLIC_Init();//系统中断配置
  8.     System_Clock_Init();//系统时钟初始化
  9.  
  10.     GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT); //GPIO 模式
  11.     GPIO_MODE_Init(GPIOA,PIN12,GPIO_MODE_OUTPUT); //GPIO 模式
  12.     ///---- Chapter 7 RTC Test Init --------------------------------------------------------------------------------------
  13.     RTC_Init_case1();
  14.     //RTC_Init_case2();
  15.  
  16.     Interrupt_Level(MtiMER_int_ID, INT_LEVEL2 );//CLIC设置中断抢占级别
  17.     Interrupt_Enable(MTIMER_int_ID);//CLIC使能中断
  18.     SYS_Interrupt_Enable();//CLIC开总中断
  19.  
  20.     UART_Init_case1(UART1);//非中断模式
  21.     ee_printf("nHello CSM32RV20:");
  22.  
  23.         while(1)
  24.         {
  25.         Delay32M_ms(500);
  26.  
  27.         GPIO_Toggle(GPIOA,PIN8);
  28.         rtc_val=RTC_MTIME->mtime;
  29.         printf("RTC VAL %ldrn",rtc_val);
  30.         }
  31.  
  32.   return 0;
  33. }
复制代码



RTC初始化程序:
南京中科微

我发分频系数开到了最大。
中断函数:
南京中科微

最后,我直接说我程序实现的功能吧:首先RTC完成初始化后,RTC的计数器开始计数,也就是RTC_MTIME->mtime。我在主函数中,每个500MS打印一次计数值。
RTC的中断中,通过设置RTC_MTIMECMP->mtimecmp的值,改变下一次中断时间。

最后,实验结果是:
南京中科微

每隔500msRTC的计数值变化大约534881个值,这个精度感觉完全是浪费了。

手册分析
接下来,我分析官方的手册吧。
南京中科微

看到了这里,我就感觉到了憋屈,总不能我想要RTC的时钟频率低一点,我需要降低主频,降低单片机性能吧。
在跳转到RTC的寄存器章节。
南京中科微

就两个寄存器,一个是时间计数寄存器,另一个是比较寄存器,通过mtimecmpmtime的值对比,产生中断。
看到了这里,我只想说,算了,惹不起!以后,我还是用通用定时器,来做RTC吧。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分