summaryrefslogtreecommitdiffhomepage
path: root/digital/io
diff options
context:
space:
mode:
authorJérémy Dufour2009-05-09 01:54:59 +0200
committerJérémy Dufour2009-05-09 01:54:59 +0200
commit3c36319497da8dbcf9ac2c3c792b70a9462557f8 (patch)
tree09fe458c746a3b97d2ca17d215ed836927dcbf72 /digital/io
parent45e3ef9221d905d8a3da0fc7e19899352d646fee (diff)
* digital/io:
- bound PWM value.
Diffstat (limited to 'digital/io')
-rw-r--r--digital/io/src/pwm.c27
1 files changed, 16 insertions, 11 deletions
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;
}