aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-01-29 11:54:15 -0500
committerKevin O'Connor <kevin@koconnor.net>2018-01-29 11:54:15 -0500
commitb7b216af7f49995f816f326c08f721b3814c9685 (patch)
treebc18ae8c74af3c51882d8ec019dc1b420f32a7a4
parent077a56c2ca0315957efa8969221b850ed34c2cf7 (diff)
downloadkutter-b7b216af7f49995f816f326c08f721b3814c9685.tar.gz
kutter-b7b216af7f49995f816f326c08f721b3814c9685.tar.xz
kutter-b7b216af7f49995f816f326c08f721b3814c9685.zip
avr: Round hardware pwm clock ticks to nearest divisor
Instead of rounding down to the nearest supported pwm divisor, round to the nearest divisor. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/avr/gpio.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/avr/gpio.c b/src/avr/gpio.c
index ec782501..774885e4 100644
--- a/src/avr/gpio.c
+++ b/src/avr/gpio.c
@@ -186,21 +186,21 @@ gpio_pwm_setup(uint8_t pin, uint32_t cycle_time, uint8_t val)
uint8_t flags = READP(p->flags), cs;
if (flags & GP_AFMT) {
switch (cycle_time) {
- case 0 ... 8*510L - 1: cs = 1; break;
- case 8*510L ... 32*510L - 1: cs = 2; break;
- case 32*510L ... 64*510L - 1: cs = 3; break;
- case 64*510L ... 128*510L - 1: cs = 4; break;
- case 128*510L ... 256*510L - 1: cs = 5; break;
- case 256*510L ... 1024*510L - 1: cs = 6; break;
- default: cs = 7; break;
+ case 0 ... (1+8) * 510L / 2 - 1: cs = 1; break;
+ case (1+8) * 510L / 2 ... (8+32) * 510L / 2 - 1: cs = 2; break;
+ case (8+32) * 510L / 2 ... (32+64) * 510L / 2 - 1: cs = 3; break;
+ case (32+64) * 510L / 2 ... (64+128) * 510L / 2 - 1: cs = 4; break;
+ case (64+128) * 510L / 2 ... (128+256) * 510L / 2 - 1: cs = 5; break;
+ case (128+256) * 510L / 2 ... (256+1024) * 510L / 2 - 1: cs = 6; break;
+ default: cs = 7; break;
}
} else {
switch (cycle_time) {
- case 0 ... 8*510L - 1: cs = 1; break;
- case 8*510L ... 64*510L - 1: cs = 2; break;
- case 64*510L ... 256*510L - 1: cs = 3; break;
- case 256*510L ... 1024*510L - 1: cs = 4; break;
- default: cs = 5; break;
+ case 0 ... (1+8) * 510L / 2 - 1: cs = 1; break;
+ case (1+8) * 510L / 2 ... (8+64) * 510L / 2 - 1: cs = 2; break;
+ case (8+64) * 510L / 2 ... (64+256) * 510L / 2 - 1: cs = 3; break;
+ case (64+256) * 510L / 2 ... (256+1024) * 510L / 2 - 1: cs = 4; break;
+ default: cs = 5; break;
}
}
volatile uint8_t *rega = READP(p->rega), *regb = READP(p->regb);