From 084df9a0a4a34e5f4b0c955a6965859b4f29a7b1 Mon Sep 17 00:00:00 2001 From: peter wallace Date: Tue, 17 Jul 2018 16:05:45 -0700 Subject: [PATCH] Issue #394 BUGFIX: hm2 muxed encoder skew drift due to integer division truncating converted to rounding. This affects changing the muxed encoder skew value when other encoder parameters are changed. --- src/hal/drivers/mesa-hostmot2/encoder.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hal/drivers/mesa-hostmot2/encoder.c b/src/hal/drivers/mesa-hostmot2/encoder.c index 4b4be21..3c9cd83 100644 --- a/src/hal/drivers/mesa-hostmot2/encoder.c +++ b/src/hal/drivers/mesa-hostmot2/encoder.c @@ -155,7 +155,9 @@ static void hm2_encoder_set_filter_rate_and_skew(hostmot2_t *hm2) { *hm2->encoder.hal->pin.sample_frequency = hm2->encoder.clock_frequency/(filter_rate + 2); HM2_DBG("Setting encoder QFilterRate to %d\n", filter_rate); if (hm2->encoder.has_skew) { - rtapi_u32 skew = (*hm2->encoder.hal->pin.skew)/(1e9/hm2->encoder.clock_frequency); + rtapi_u32 divisor = (1e9/hm2->encoder.clock_frequency); + // Unsigned division rounding for integers. This is only valid for unsigned division + rtapi_u32 skew = (*hm2->encoder.hal->pin.skew + (divisor/2))/divisor; if (skew > 15) { skew = 15; -- 1.7.10.4