RISC-V技术论坛
直播中

jf_1137202360

8年用户 1371经验值
擅长:嵌入式技术
私信 关注
[经验]

【南京中科微CSM32RV20开发板试用体验】WUP 定时唤醒测试

特性
WUP 模块是唤醒模块,时钟来源 3K,每隔 0.3ms 计数一次,当 wup_data =
0 时,不工作,无 irq 产生。wup_data 不等于 0 时每隔(wup_data+1)个时钟周
期产生一个 irq,计数器重新装载 wup_data 的值。可以用于低功耗模式的唤醒等。
寄存器
wup 数据寄存器(wup_data
图片33.png
wup 中断使能寄存器(wup_irq_en
图片34.png
wup 中断寄存器(wup_irq
图片35.png
接口代码
寄存器定义在driversIncCSM32RV20.h
  1. #define WUP_BASE             0x30000610UL
  2. typedef struct
  3. {
  4. volatile uint32_t DATA;
  5. volatile uint32_t IRQ_EN;
  6. volatile uint32_t IRQ;
  7. }WUP_TypeDef;
  8. #define WUP              ((WUP_TypeDef *)WUP_BASE)
接口代码位于
driversSrcwup.c
driversIncwup.h
  1. #include "headfile.h"
  2. void WUP_Init_case1(uint32_t data)//设置中断周期,使能WUP中断
  3. {
  4.     WUP->DATA = data;
  5.     WUP->IRQ_EN = 1;
  6. }
  7. void WUP_IRQhandler(void)
  8. {
  9.     if(WUP->IRQ&0x01)
  10.     {
  11.         WUP->IRQ = 0;
  12.             //GPIO_Toggle(GPIOA,PIN14);
  13.     }
  14. }

测试代码
  1. #include "headfile.h"
  2. int main(void)
  3. {
  4.     ///----System Init ---------------------------------------------------------------------------------------------
  5.     CLIC_Init();//系统中断配置
  6.     System_Clock_Init();//系统时钟初始化
  7.     ///----Chapter 5 GPIO Test Init ---------------------------------------------------------------------------------
  8.     GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT); //GPIO 模式
  9.     UART_Init_case1(UART1);//非中断模式
  10.     WUP_Init_case1(10*1000*3);//设置中断周期,使能WUP中断 9S
  11.     Interrupt_Enable(WUP_int_ID);//CLIC使能中断
  12.     SYS_Interrupt_Enable();//CLIC开总中断
  13.         while(1)
  14.         {
  15.         //配置不同低功耗模式
  16.         System_Halt();//待机模式 halt1
  17.         ee_printf("nCSM32RV201");
  18.         System_Sleep();//睡眠模式 halt2
  19.         ee_printf("nCSM32RV202");
  20.         System_Powerdown();//掉电模式 powerdown1
  21.         ee_printf("nCSM32RV203");
  22.         System_DeepPwd();//掉电模式 powerdown2
  23.         ee_printf("nCSM32RV204");
  24.         }
  25.   return 0;
  26. }
  27. void WUP_IRQhandler(void)
  28. {
  29.     if(WUP->IRQ&0x01)
  30.     {
  31.         WUP->IRQ = 0;
  32.             GPIO_Toggle(GPIOA,PIN8);
  33.     }
  34. }

测试
烧录程序测试,可以看到每隔10*1000*3*0.3mS9S唤醒一次,打印字符串。
图片36.png
问题待确认:
打印一次显示不全,先打印的
CSM32RV20
然后打印
1
CSM32RV20
然后是
2

CSM32RV20
前两次间隔9S,后一次间隔21S。

总结
对于物联网应用来说,低功耗是很重要的。实现低功耗的一个重要手段就是休眠,定时唤醒。CSM32RV20支持不同级别的低功耗模式,可以定时唤醒,适合IOT等应用场景。

回帖(1)

dianzi

2022-5-30 14:10:04
请注意帖子格式,代码请使用代码框
举报

更多回帖

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