【南京中科微CSM32RV20开发板试用体验】RTC+UART时间输出

描述

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

1. 配置rtc,设置成秒中断,2秒闪烁一次;

  1. void RTC_IRQhandler(void)//RTC中断函数
  2. {
  3.     RTC_MtiMECMP->mtimecmp += 1000000;
  4.     s_time_cnt++;
  5.         GPIO_Toggle(GPIOA,PIN12);
  6. }
复制代码



  1. void RTC_Init_case1(void)
  2. {
  3.     uint32_t mask=0x1f<<10;
  4.  
  5.     uint32_t temp = CMU->CLK_DIV;
  6.     temp &= ~mask;
  7.     temp |= 31<<10;
  8.     CMU->CLK_DIV = temp;
  9.  
  10.         RTC_MTIME->mtime = 0;
  11.         RTC_MTIMECMP->mtimecmp = 1000000;
  12. }
复制代码

2. 配置rtc主函数,同时借用了risc-v编译器中的time库来将秒中断计数值转换为日历。


  1. #include "headfile.h"
  2. #include
  3.  
  4. int main(void)
  5. {
  6.  
  7.     ///----System Init ---------------------------------------------------------------------------------------------
  8.     CLIC_Init();//系统中断配置
  9.     System_Clock_Init();//系统时钟初始化
  10.     RTC_Init_case1();
  11.     Interrupt_Level(MTIMER_int_ID, INT_LEVEL2 );//CLIC设置中断抢占级别
  12.     Interrupt_Enable(MTIMER_int_ID);//CLIC使能中断
  13.     SYS_Interrupt_Enable();//CLIC开总中断
  14.     UART_Init_case1(UART1);//非中断模式
  15.     time_t raw_time;
  16.     struct tm *timeinfo;
  17.     time(&raw_time);
  18.     timeinfo = localtime(&raw_time);
  19.     timeinfo->tm_year= 2022 - 1900;
  20.     timeinfo->tm_mon = 5 -1;
  21.     timeinfo->tm_mday = 26;
  22.     timeinfo->tm_hour = 20;
  23.     timeinfo->tm_min = 15;
  24.     timeinfo->tm_sec = 15;
  25.     raw_time = mktime(timeinfo);
  26.     time_t last_time = s_time_cnt;
  27.     char buffer[80];
  28.         while(1)
  29.         {
  30.         Delay32M_ms(1000);
  31.         raw_time += (s_time_cnt -last_time);
  32.         last_time = s_time_cnt;
  33.         timeinfo = localtime(&raw_time);
  34.         raw_time = mktime(timeinfo);
  35.         strftime(buffer, sizeof(buffer), "%c", timeinfo );
  36.         printf(buffer);
  37.         printf("n")
  38.         }
  39. }
复制代码

3. Makefile沿用前面的,同时注意


  1. void RTC_IRQhandler(void) __attribute__((interrupt("SiFive-CLIC-preemptible")));
复制代码

在linux编辑中更改为

  1. void RTC_IRQhandler(void) __attribute__((interrupt()));
复制代码

4. 效果展示
南京中科微
 

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

全部0条评论

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

×
20
完善资料,
赚取积分