From 3c36319497da8dbcf9ac2c3c792b70a9462557f8 Mon Sep 17 00:00:00 2001 From: Jérémy Dufour Date: Sat, 9 May 2009 01:54:59 +0200 Subject: * digital/io: - bound PWM value. --- digital/io/src/pwm.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'digital/io/src/pwm.c') diff --git a/digital/io/src/pwm.c b/digital/io/src/pwm.c index b6ee727a..dc08cc17 100644 --- a/digital/io/src/pwm.c +++ b/digital/io/src/pwm.c @@ -74,19 +74,24 @@ pwm_set (int16_t value, uint16_t timer) { PWM_OCR = 0; } - else if (value > 0) - { - IO_PORT (PWM_DIR_IO) |= IO_BV (PWM_DIR_IO); - if (PWM_LMD18200_DELAY_US) - utils_delay_us (PWM_LMD18200_DELAY_US); - PWM_OCR = value; - } else { - IO_PORT (PWM_DIR_IO) &= ~IO_BV (PWM_DIR_IO); - if (PWM_LMD18200_DELAY_US) - utils_delay_us (PWM_LMD18200_DELAY_US); - PWM_OCR = -value; + /* Ensure value is not over PWM_MAX. */ + UTILS_BOUND (value, -PWM_MAX, PWM_MAX); + if (value > 0) + { + IO_PORT (PWM_DIR_IO) |= IO_BV (PWM_DIR_IO); + if (PWM_LMD18200_DELAY_US) + utils_delay_us (PWM_LMD18200_DELAY_US); + PWM_OCR = value; + } + else + { + IO_PORT (PWM_DIR_IO) &= ~IO_BV (PWM_DIR_IO); + if (PWM_LMD18200_DELAY_US) + utils_delay_us (PWM_LMD18200_DELAY_US); + PWM_OCR = -value; + } } pwm_stop_timer = timer; } -- cgit v1.2.3