RISC-V技术论坛
直播中

jf_25674040

2年用户 108经验值
擅长:可编程逻辑 MEMS/传感技术 接口/总线/驱动 控制/MCU
私信 关注
[经验]

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

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.     uint32_t temp = CMU->CLK_DIV;
  5.     temp &= ~mask;
  6.     temp |= 31<<10;
  7.     CMU->CLK_DIV = temp;

  8.         RTC_MTIME->mtime = 0;
  9.         RTC_MTIMECMP->mtimecmp = 1000000;
  10. }
2. 配置rtc主函数,同时借用了risc-v编译器中的time库来将秒中断计数值转换为日历。
  1. #include "headfile.h"
  2. #include

  3. int main(void)
  4. {

  5.     ///----System Init ---------------------------------------------------------------------------------------------
  6.     CLIC_Init();//系统中断配置
  7.     System_Clock_Init();//系统时钟初始化
  8.     RTC_Init_case1();
  9.     Interrupt_Level(MTIMER_int_ID, INT_LEVEL2 );//CLIC设置中断抢占级别
  10.     Interrupt_Enable(MTIMER_int_ID);//CLIC使能中断
  11.     SYS_Interrupt_Enable();//CLIC开总中断
  12.     UART_Init_case1(UART1);//非中断模式
  13.     time_t raw_time;
  14.     struct tm *timeinfo;
  15.     time(&raw_time);
  16.     timeinfo = localtime(&raw_time);
  17.     timeinfo->tm_year= 2022 - 1900;
  18.     timeinfo->tm_mon = 5 -1;
  19.     timeinfo->tm_mday = 26;
  20.     timeinfo->tm_hour = 20;
  21.     timeinfo->tm_min = 15;
  22.     timeinfo->tm_sec = 15;
  23.     raw_time = mktime(timeinfo);
  24.     time_t last_time = s_time_cnt;
  25.     char buffer[80];
  26.         while(1)
  27.         {
  28.         Delay32M_ms(1000);
  29.         raw_time += (s_time_cnt -last_time);
  30.         last_time = s_time_cnt;
  31.         timeinfo = localtime(&raw_time);
  32.         raw_time = mktime(timeinfo);
  33.         strftime(buffer, sizeof(buffer), "%c", timeinfo );
  34.         printf(buffer);
  35.         printf("n")
  36.         }
  37. }
3. Makefile沿用前面的,同时注意
  1. void RTC_IRQhandler(void) __attribute__((interrupt("SiFive-CLIC-preemptible")));
在linux编辑中更改为
  1. void RTC_IRQhandler(void) __attribute__((interrupt()));
4. 效果展示
2022-05-26_20-26.png

更多回帖

发帖
×
20
完善资料,
赚取积分