X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2F32x%2Fpwm.c;h=e3385aad6b82ed35e046f6dd1f612ce97cb2d58b;hb=00faec9cdbc073199fa984a0450e1a961994b058;hp=3adbf211f39de0db98a956f6c46b1d69244e15ba;hpb=a8fd6e376175c06e2423d0914359c761829d6e93;p=picodrive.git diff --git a/pico/32x/pwm.c b/pico/32x/pwm.c index 3adbf21..e3385aa 100644 --- a/pico/32x/pwm.c +++ b/pico/32x/pwm.c @@ -52,10 +52,15 @@ void p32x_timers_do(unsigned int cycles) cycles *= 3; - pwm_cycle_counter += cycles; - while (pwm_cycle_counter > pwm_cycles) { - pwm_cycle_counter -= pwm_cycles; - pwm_smp_expect++; + // since we run things in async fashion, allow pwm to lag behind + // but don't allow our "queue" to be infinite + cnt = pwm_smp_expect - pwm_smp_cnt; + if (cnt <= 0 || cnt * pwm_cycles < OSC_NTSC/7*3 / 60 / 2) { + pwm_cycle_counter += cycles; + while (pwm_cycle_counter > pwm_cycles) { + pwm_cycle_counter -= pwm_cycles; + pwm_smp_expect++; + } } // WDT timers