summaryrefslogtreecommitdiffhomepage
path: root/digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c
diff options
context:
space:
mode:
authorNicolas Schodet2012-04-12 01:00:56 +0200
committerNicolas Schodet2012-04-12 01:00:56 +0200
commit6aa0c014072a6f1bc9decd4c1ed73a8eced50018 (patch)
tree065d2f28fca9735c9c54b9b8a2cc291bbe0ecde8 /digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c
parentcc86d56d1fe75a50a89b98ec4c3d5b57b06e4372 (diff)
digital/avr/modules/motor/output: add brake control
Diffstat (limited to 'digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c')
-rw-r--r--digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c b/digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c
index 635b9bef..a75e350b 100644
--- a/digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c
+++ b/digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c
@@ -165,8 +165,7 @@ output_pwm_ocr_update_output (uint8_t index, volatile uint16_t *ocr,
else
{
/* Brake is engaged on first non null value. */
- if (brake_io_port)
- *brake_io_port |= _BV (brake_io_bit);
+ output_pwm_ocr[index].output->brake = 1;
/* Convert signed value to sign and absolute value. */
if (value < 0)
{
@@ -179,6 +178,14 @@ output_pwm_ocr_update_output (uint8_t index, volatile uint16_t *ocr,
*ocr = value + AC_OUTPUT_PWM_OCR_OFFSET;
}
}
+ /* Update brake. */
+ if (brake_io_port)
+ {
+ if (output_pwm_ocr[index].output->brake)
+ *brake_io_port |= _BV (brake_io_bit);
+ else
+ *brake_io_port &= ~_BV (brake_io_bit);
+ }
}
void