修改systick_delay方式为查询比较,保留systick累加值作为时间戳
This commit is contained in:
@@ -79,6 +79,7 @@ void get_corners();
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
clock_init(SYSTEM_CLOCK_120M);
|
clock_init(SYSTEM_CLOCK_120M);
|
||||||
|
system_delay_init();
|
||||||
debug_init();
|
debug_init();
|
||||||
mt9v03x_init();
|
mt9v03x_init();
|
||||||
pwm_init(TIM2_PWM_MAP0_CH1_A0, 50, 1000);
|
pwm_init(TIM2_PWM_MAP0_CH1_A0, 50, 1000);
|
||||||
|
|||||||
@@ -48,18 +48,20 @@
|
|||||||
//-------------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------------
|
||||||
void system_delay_ms(uint32 num)
|
void system_delay_ms(uint32 num)
|
||||||
{
|
{
|
||||||
SysTick->SR &= ~(1 << 0);
|
// SysTick->SR &= ~(1 << 0);
|
||||||
|
|
||||||
|
// SysTick->CMP = (uint64_t)(system_clock / 8000) * num;
|
||||||
|
// SysTick->CTLR |= (1 << 4);
|
||||||
|
// SysTick->CTLR |= (1 << 5) | (1 << 0);
|
||||||
|
|
||||||
SysTick->CMP = (uint64_t)(system_clock/8000) * num;
|
// while ((SysTick->SR & (1 << 0)) != (1 << 0))
|
||||||
SysTick->CTLR |= (1 << 4);
|
// ;
|
||||||
SysTick->CTLR |= (1 << 5) | (1 << 0);
|
|
||||||
|
|
||||||
while((SysTick->SR & (1 << 0)) != (1 << 0));
|
// SysTick->CTLR &= ~(1 << 0);
|
||||||
|
while (num--) {
|
||||||
SysTick->CTLR &= ~(1 << 0);
|
system_delay_us(1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------------
|
||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> system <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> us <20><><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> system <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> us <20><><EFBFBD><EFBFBD>
|
||||||
@@ -70,16 +72,24 @@ void system_delay_ms (uint32 num)
|
|||||||
//-------------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------------
|
||||||
void system_delay_us(uint32 num)
|
void system_delay_us(uint32 num)
|
||||||
{
|
{
|
||||||
SysTick->SR &= ~(1 << 0);
|
// SysTick->SR &= ~(1 << 0);
|
||||||
|
|
||||||
|
// SysTick->CMP = (uint64_t)(system_clock/8000000) * num;
|
||||||
|
// SysTick->CTLR |= (1 << 4);
|
||||||
|
// SysTick->CTLR |= (1 << 5) | (1 << 0);
|
||||||
|
|
||||||
SysTick->CMP = (uint64_t)(system_clock/8000000) * num;
|
// while((SysTick->SR & (1 << 0)) != (1 << 0));
|
||||||
SysTick->CTLR |= (1 << 4);
|
|
||||||
SysTick->CTLR |= (1 << 5) | (1 << 0);
|
|
||||||
|
|
||||||
while((SysTick->SR & (1 << 0)) != (1 << 0));
|
// SysTick->CTLR &= ~(1 << 0);
|
||||||
|
|
||||||
SysTick->CTLR &= ~(1 << 0);
|
uint64_t time_start = SysTick->CNT;
|
||||||
|
uint64_t time_delta = (uint64_t)num * (uint64_t)(system_clock / 8000000);
|
||||||
|
|
||||||
|
while (time_delta > (SysTick->CNT - time_start)) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void system_delay_init(void)
|
||||||
|
{
|
||||||
|
SysTick->CTLR |= 0x21;
|
||||||
|
}
|
||||||
@@ -41,5 +41,6 @@
|
|||||||
|
|
||||||
void system_delay_ms(uint32 time);
|
void system_delay_ms(uint32 time);
|
||||||
void system_delay_us(uint32 time);
|
void system_delay_us(uint32 time);
|
||||||
|
void system_delay_init(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user