STM32 -> DWT時間計算
阿新 • • 發佈:2018-12-19
基於ARM-M3核心的DWT 資料監測暫存器:
dwt.c檔案
#include "dwt.h" #define DWT_CR *(uint32_t *)0xE0001000 #define DWT_CYCCNT *(uint32_t *)0xE0001004 #define DEM_CR *(uint32_t *)0xE000EDFC #define DEM_CR_TRCENA (1 << 24) #define DWT_CR_CYCCNTENA (1 << 0) /* 初始化時間戳 */ void CPU_TS_TmrInit(void) { /* 使能DWT外設 */ DEM_CR |= (uint32_t)DEM_CR_TRCENA; /* DWT CYCCNT暫存器計數清0 */ DWT_CYCCNT = (uint32_t)0u; /* 使能Cortex-M3 DWT CYCCNT暫存器 */ DWT_CR |= (uint32_t)DWT_CR_CYCCNTENA; } uint32_t OS_TS_GET(void) { uint32_t _get_ts; uint32_t _ts; static uint32_t _ts_bak; /* 時間戳備份 */ _get_ts = DWT_CYCCNT; if(_get_ts < _ts_bak) { /* 做溢位修正 */ _ts = 0XFFFFFFFF - _ts_bak + _get_ts; /* 加上上次資料 即可求出本次時間差*/ _ts = _ts+_ts_bak; } else { /* 正常情況 */ _ts = _get_ts; } _ts_bak = _ts; return _ts; }
dwt.h檔案
#ifndef _DWT_H
#define _DWT_H
#include "stm32f10x.h"
void CPU_TS_TmrInit(void);
uint32_t OS_TS_GET(void);
#endif