132 lines
4.9 KiB
C
132 lines
4.9 KiB
C
|
|
/*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
*
|
|||
|
|
* ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD>ݹ۲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(DWT)ģ<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : bsp_dwt.c
|
|||
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> : V1.0
|
|||
|
|
* ˵ <EFBFBD><EFBFBD> : <EFBFBD><EFBFBD>CM3<EFBFBD><EFBFBD>CM4<EFBFBD>п<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ETM, ITM <EFBFBD><EFBFBD>DWT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʵ<EFBFBD><EFBFBD>
|
|||
|
|
* DWT<EFBFBD>е<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>CYCCNT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>˹<EFBFBD><EFBFBD>ܷdz<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><EFBFBD> ˵<EFBFBD><EFBFBD>
|
|||
|
|
* V1.0 2015-08-18 Eric2013 <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* Copyright (C), 2015-2020, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> www.armfly.com
|
|||
|
|
*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
*/
|
|||
|
|
#include "bsp.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
* <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
*/
|
|||
|
|
#define DWT_CYCCNT *(volatile unsigned int *)0xE0001004
|
|||
|
|
#define DWT_CR *(volatile unsigned int *)0xE0001000
|
|||
|
|
#define DEM_CR *(volatile unsigned int *)0xE000EDFC
|
|||
|
|
#define DBGMCU_CR *(volatile unsigned int *)0xE0042004
|
|||
|
|
|
|||
|
|
#define DEM_CR_TRCENA (1 << 24)
|
|||
|
|
#define DWT_CR_CYCCNTENA (1 << 0)
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: bsp_InitDWT
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>DWT. <EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> bsp_Init() <EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
*/
|
|||
|
|
void bsp_InitDWT(void)
|
|||
|
|
{
|
|||
|
|
DEM_CR |= (unsigned int)DEM_CR_TRCENA; /* Enable Cortex-M4's DWT CYCCNT reg. */
|
|||
|
|
DWT_CYCCNT = (unsigned int)0u;
|
|||
|
|
DWT_CR |= (unsigned int)DWT_CR_CYCCNTENA;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: bsp_DelayUS
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CPU<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD>32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* OSSchedLock(&err);
|
|||
|
|
* bsp_DelayUS(5);
|
|||
|
|
* OSSchedUnlock(&err); <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>: _ulDelayTime <EFBFBD>ӳٳ<EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>λ1 us
|
|||
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
|
|||
|
|
* ˵ <EFBFBD><EFBFBD>: 1. <EFBFBD><EFBFBD>Ƶ168MHz<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2^32/168000000 = 25.565<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳٵĻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¡<EFBFBD>
|
|||
|
|
* 2. ʵ<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>0.25us<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>ʱ<EFBFBD>䡣
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>. MDK5.15<EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD><EFBFBD>ȼ<EFBFBD>0, <EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>MDK<EFBFBD>Ż<EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>Ӱ<EFBFBD>졣
|
|||
|
|
* <EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>. STM32F407IGT6
|
|||
|
|
* <EFBFBD><EFBFBD>3<EFBFBD><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* GPIOI->BSRRL = GPIO_Pin_8;
|
|||
|
|
* bsp_DelayUS(10);
|
|||
|
|
* GPIOI->BSRRH = GPIO_Pin_8;
|
|||
|
|
* -------------------------------------------
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ʵ<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>
|
|||
|
|
* bsp_DelayUS(1) 1.2360us
|
|||
|
|
* bsp_DelayUS(2) 2.256us
|
|||
|
|
* bsp_DelayUS(3) 3.256us
|
|||
|
|
* bsp_DelayUS(4) 4.256us
|
|||
|
|
* bsp_DelayUS(5) 5.276us
|
|||
|
|
* bsp_DelayUS(6) 6.276us
|
|||
|
|
* bsp_DelayUS(7) 7.276us
|
|||
|
|
* bsp_DelayUS(8) 8.276us
|
|||
|
|
* bsp_DelayUS(9) 9.276us
|
|||
|
|
* bsp_DelayUS(10) 10.28us
|
|||
|
|
* 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD>ֵ<EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>Ļ<EFBFBD>ȡ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>A,B,C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>A > B <EFBFBD><EFBFBD>ôA - B = C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⣬<EFBFBD><EFBFBD>ȫû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>A < B <EFBFBD><EFBFBD>ôA - B = C<EFBFBD><EFBFBD> C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0xFFFFFFFF - B + A + 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ҫ<EFBFBD>ر<EFBFBD>ע<EFBFBD>⣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
*/
|
|||
|
|
void bsp_DelayUS(uint32_t _ulDelayTime)
|
|||
|
|
{
|
|||
|
|
uint32_t tCnt, tDelayCnt;
|
|||
|
|
uint32_t tStart;
|
|||
|
|
|
|||
|
|
tStart = DWT_CYCCNT; /* <20>ս<EFBFBD><D5BD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
|||
|
|
tCnt = 0;
|
|||
|
|
tDelayCnt = _ulDelayTime * (SystemCoreClock / 1000000); /* <20><>Ҫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
|
|||
|
|
while(tCnt < tDelayCnt)
|
|||
|
|
{
|
|||
|
|
tCnt = DWT_CYCCNT - tStart; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD> */
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: bsp_DelayMS
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>: Ϊ<EFBFBD><EFBFBD><EFBFBD>õײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>RTOS<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><EFBFBD><EFBFBD><EFBFBD>ms<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>: n <EFBFBD>ӳٳ<EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>λ1 ms
|
|||
|
|
* <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ֵ: <EFBFBD><EFBFBD>
|
|||
|
|
*********************************************************************************************************
|
|||
|
|
*/
|
|||
|
|
void bsp_DelayMS(uint32_t _ulDelayTime)
|
|||
|
|
{
|
|||
|
|
bsp_DelayUS(1000*_ulDelayTime);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void bsp_DelayDWT(uint32_t _ulDelayTime)
|
|||
|
|
{
|
|||
|
|
uint32_t tCnt, tDelayCnt;
|
|||
|
|
uint32_t tStart;
|
|||
|
|
|
|||
|
|
tCnt = 0;
|
|||
|
|
tDelayCnt = _ulDelayTime; /* <20><>Ҫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
tStart = DWT_CYCCNT; /* <20>ս<EFBFBD><D5BD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
|||
|
|
|
|||
|
|
while(tCnt < tDelayCnt)
|
|||
|
|
{
|
|||
|
|
tCnt = DWT_CYCCNT - tStart; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>32λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD> */
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/***************************** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> www.armfly.com (END OF FILE) *********************************/
|