138 lines
3.3 KiB
C
138 lines
3.3 KiB
C
|
/**
|
|||
|
******************************************************************
|
|||
|
* @file core_delay.c
|
|||
|
* @author fire
|
|||
|
* @version V1.0
|
|||
|
* @date 2018-xx-xx
|
|||
|
* @brief ʹ<EFBFBD><EFBFBD><EFBFBD>ں˼Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>ʱ
|
|||
|
******************************************************************
|
|||
|
* @attention
|
|||
|
*
|
|||
|
* ʵ<EFBFBD><EFBFBD>ƽ̨:Ұ<EFBFBD><EFBFBD> STM32H750 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD>̳ :http://www.firebbs.cn
|
|||
|
* <EFBFBD>Ա<EFBFBD> :https://fire-stm32.taobao.com
|
|||
|
*
|
|||
|
******************************************************************
|
|||
|
*/
|
|||
|
|
|||
|
#include "./delay/core_delay.h"
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
**********************************************************************
|
|||
|
* ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
**********************************************************************
|
|||
|
*/
|
|||
|
/*
|
|||
|
<EFBFBD><EFBFBD>Cortex-M<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT(Data Watchpoint and Trace)<EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>32λ<EFBFBD>ļĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CYCCNT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD>¼<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>
|
|||
|
8.94s=2<EFBFBD><EFBFBD>32<EFBFBD>η<EFBFBD>/480000000
|
|||
|
(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>Ƶ<EFBFBD><EFBFBD>Ϊ480M<EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1/480M=2.08ns)
|
|||
|
<EFBFBD><EFBFBD>CYCCNT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ʹ<EFBFBD><EFBFBD>CYCCNT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>裺
|
|||
|
1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>DWT<EFBFBD><EFBFBD><EFBFBD>裬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ں˵<EFBFBD><EFBFBD>ԼĴ<EFBFBD><EFBFBD><EFBFBD>DEMCR<EFBFBD><EFBFBD>λ24<EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>д1ʹ<EFBFBD><EFBFBD>
|
|||
|
2<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>CYCCNT<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
|||
|
3<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>CYCCNT<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT_CTRL(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϻ궨<EFBFBD><EFBFBD>ΪDWT_CR)<EFBFBD><EFBFBD>λ0<EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>д1ʹ<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#define DWT_CR *(__IO uint32_t *)0xE0001000
|
|||
|
#define DWT_CYCCNT *(__IO uint32_t *)0xE0001004
|
|||
|
#define DEM_CR *(__IO uint32_t *)0xE000EDFC
|
|||
|
|
|||
|
|
|||
|
#define DEM_CR_TRCENA (1 << 24)
|
|||
|
#define DWT_CR_CYCCNTENA (1 << 0)
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
* @note ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
|
|||
|
{
|
|||
|
/* ʹ<><CAB9>DWT<57><54><EFBFBD><EFBFBD> */
|
|||
|
DEM_CR |= (uint32_t)DEM_CR_TRCENA;
|
|||
|
|
|||
|
/* DWT CYCCNT<4E>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 */
|
|||
|
DWT_CYCCNT = (uint32_t)0u;
|
|||
|
|
|||
|
/* ʹ<><CAB9>Cortex-M DWT CYCCNT<4E>Ĵ<EFBFBD><C4B4><EFBFBD> */
|
|||
|
DWT_CR |= (uint32_t)DWT_CR_CYCCNTENA;
|
|||
|
|
|||
|
return HAL_OK;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT_CYCCNT<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
*/
|
|||
|
uint32_t CPU_TS_TmrRd(void)
|
|||
|
{
|
|||
|
return ((uint32_t)DWT_CYCCNT);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param <EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>ǰʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT_CYCCNT<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
*/
|
|||
|
uint32_t HAL_GetTick(void)
|
|||
|
{
|
|||
|
return ((uint32_t)DWT_CYCCNT/SysClockFreq*1000);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>־<EFBFBD>ȷ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param us : <EFBFBD>ӳٳ<EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>λ1 us
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
* @note ʹ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><EFBFBD><EFBFBD>CPU_TS_TmrInit<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ܼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD>ʹ<EFBFBD>ܺ<EFBFBD>CPU_TS_INIT_IN_DELAY_FUNCTION
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱֵΪ8<EFBFBD>룬<EFBFBD><EFBFBD>8*1000*1000
|
|||
|
*/
|
|||
|
void CPU_TS_Tmr_Delay_US(uint32_t us)
|
|||
|
{
|
|||
|
uint32_t ticks;
|
|||
|
uint32_t told,tnow,tcnt=0;
|
|||
|
|
|||
|
/* <20>ں<EFBFBD><DABA><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#if (CPU_TS_INIT_IN_DELAY_FUNCTION)
|
|||
|
/* <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
HAL_InitTick(5);
|
|||
|
#endif
|
|||
|
|
|||
|
ticks = us * (GET_CPU_ClkFreq() / 1000000); /* <20><>Ҫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
tcnt = 0;
|
|||
|
told = (uint32_t)CPU_TS_TmrRd(); /* <20>ս<EFBFBD><D5BD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
|||
|
|
|||
|
while(1)
|
|||
|
{
|
|||
|
tnow = (uint32_t)CPU_TS_TmrRd();
|
|||
|
if(tnow != told)
|
|||
|
{
|
|||
|
/* 32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
if(tnow > told)
|
|||
|
{
|
|||
|
tcnt += tnow - told;
|
|||
|
}
|
|||
|
/* <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0> */
|
|||
|
else
|
|||
|
{
|
|||
|
tcnt += UINT32_MAX - told + tnow;
|
|||
|
}
|
|||
|
|
|||
|
told = tnow;
|
|||
|
|
|||
|
/*ʱ<>䳬<EFBFBD><E4B3AC>/<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ӳٵ<D3B3>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>˳<EFBFBD> */
|
|||
|
if(tcnt >= ticks)break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*********************************************END OF FILE**********************/
|