modify tick.c to work when interrupts disabled - modify PulseIn.c to cast argument to common_hal_delay_us

This commit is contained in:
Jerry Needell 2018-04-16 08:11:14 -04:00
parent 10eabf6bc2
commit e55e06d501
2 changed files with 15 additions and 5 deletions

View File

@ -286,7 +286,7 @@ void common_hal_pulseio_pulsein_resume(pulseio_pulsein_obj_t* self,
common_hal_mcu_disable_interrupts();
gpio_set_pin_level(self->pin, !self->idle_state);
common_hal_mcu_delay_us(trigger_duration);
common_hal_mcu_delay_us((uint32_t)trigger_duration);
gpio_set_pin_level(self->pin, self->idle_state);
common_hal_mcu_enable_interrupts();
}

View File

@ -59,14 +59,24 @@ void tick_init() {
void tick_delay(uint32_t us) {
uint32_t ticks_per_us = common_hal_mcu_processor_get_frequency() / 1000 / 1000;
uint32_t us_between_ticks = SysTick->VAL / ticks_per_us;
uint64_t start_ms = ticks_ms;
uint32_t start_tick;
while (us > 1000) {
while (ticks_ms == start_ms) {}
start_tick=SysTick->VAL; // wait for SysTick->VAL to RESET
while (SysTick->VAL < start_tick) {}
us -= us_between_ticks;
start_ms = ticks_ms;
us_between_ticks = 1000;
}
while (SysTick->VAL > ((us_between_ticks - us) * ticks_per_us)) {}
if(us&&(us < us_between_ticks)){
while (SysTick->VAL > ((us_between_ticks - us) * ticks_per_us)) {}
}
else {
start_tick=SysTick->VAL; // wait for SysTick->VAL to RESET
while (SysTick->VAL < start_tick) {}
us -= us_between_ticks;
if(us){
while (SysTick->VAL > ((1000 - us) * ticks_per_us)) {}
}
}
}
// us counts down!