使用MDK的AC6时,使用DWT是周期计数器无法正常测量C库做三角函数运算的执行时间,时间非常短,感觉异常了,所以暂不加入比较。 这个问题有个解决的办法。 就是dwt时钟初始化的代码在调试的时候不运行。[C] 纯文本查看 复制代码 void bsp_dwt_init(void)
{
if (DWT->CYCCNT != 0)
{
__IO uint32_t tmpCnt = 0;
__IO uint32_t tmpCCNT;
tmpCCNT = DWT->CYCCNT;
while (tmpCnt++ < 0xFFFF) __NOP(); // 延时一段时间
if (DWT->CYCCNT != tmpCCNT)
{// 数值变化了,说明是调试debug模式,debug模式调试器会打开DWT时钟。后面的打开dwt时钟操作不运行
return;
}
}
/* 禁用 TRACE */
//CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; // ~0x01000000;
/* 启动 TRACE */
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // 0x01000000;
DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk; //~0x00000001;
DWT->CYCCNT = 0U;
/* 启动 时钟周期计数器 */
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; //0x00000001;
__NOP();
while (DWT->CYCCNT == 0);
} |