Cortex M0+ 上的计数周期

Counting cycles on Cortex M0+

我有一个用于性能测试的 Cortex M0+ (SAML21) 板。我想测量一段给定的代码需要多少个周期。我尝试使用 DWT (DWT_CONTROL),但从未产生结果;无论代码是什么 运行.

,它都返回 0 个周期
  // enable the use DWT
  *DEMCR = *DEMCR | 0x01000000;

  // Reset cycle counter
  *DWT_CYCCNT = 0;

  // enable cycle counter
  *DWT_CONTROL = *DWT_CONTROL | 1 ;
  // some code here
  // .....

  // number of cycles stored in count variable
  count = *DWT_CYCCNT;

有没有一种方法可以计算周期(也许有中断和计数器?)就像我可以查询毫秒一样(例如 Arduino 上的 millis())?

根据 M0+ 的 CMSIS 头文件 (core_cm0plus.h),核心调试寄存器只能通过调试访问端口访问,不能通过处理器访问。我只能建议使用一些免费的 运行 计时器(也许是 SysTick),或者您的调试器可能有助于访问所需的寄存器。