修改systick_delay方式为查询比较,保留systick累加值作为时间戳
This commit is contained in:
@@ -79,6 +79,7 @@ void get_corners();
|
||||
int main(void)
|
||||
{
|
||||
clock_init(SYSTEM_CLOCK_120M);
|
||||
system_delay_init();
|
||||
debug_init();
|
||||
mt9v03x_init();
|
||||
pwm_init(TIM2_PWM_MAP0_CH1_A0, 50, 1000);
|
||||
|
||||
@@ -48,18 +48,20 @@
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
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;
|
||||
SysTick->CTLR |= (1 << 4);
|
||||
SysTick->CTLR |= (1 << 5) | (1 << 0);
|
||||
// while ((SysTick->SR & (1 << 0)) != (1 << 0))
|
||||
// ;
|
||||
|
||||
while((SysTick->SR & (1 << 0)) != (1 << 0));
|
||||
|
||||
SysTick->CTLR &= ~(1 << 0);
|
||||
// SysTick->CTLR &= ~(1 << 0);
|
||||
while (num--) {
|
||||
system_delay_us(1000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <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)
|
||||
{
|
||||
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;
|
||||
SysTick->CTLR |= (1 << 4);
|
||||
SysTick->CTLR |= (1 << 5) | (1 << 0);
|
||||
// while((SysTick->SR & (1 << 0)) != (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_us(uint32 time);
|
||||
void system_delay_init(void);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user