From 6aa0c014072a6f1bc9decd4c1ed73a8eced50018 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Thu, 12 Apr 2012 01:00:56 +0200 Subject: digital/avr/modules/motor/output: add brake control --- digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'digital/avr/modules/motor/output/pwm_ocr/output_pwm_ocr.avr.c') 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 -- cgit v1.2.3