修改systick_delay方式为查询比较,保留systick累加值作为时间戳

This commit is contained in:
2024-01-05 09:13:10 +08:00
parent 8fc8049eb8
commit b4b265cdef
3 changed files with 97 additions and 85 deletions

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -41,5 +41,6 @@
void system_delay_ms(uint32 time);
void system_delay_us(uint32 time);
void system_delay_init(void);
#endif