修改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) 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);

View File

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

View File

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