summaryrefslogtreecommitdiff
path: root/digital/asserv/src
diff options
context:
space:
mode:
authorNicolas Schodet2008-04-28 15:30:22 +0200
committerNicolas Schodet2008-04-28 15:30:22 +0200
commit124bb35a3dfafae87e776a4b7a737bbe8c4e5669 (patch)
tree9a56e203ec15ff98467b5fa413ffc367c5495bc6 /digital/asserv/src
parent7cf99bc155f4859974d99144ce29b77225c96b97 (diff)
* digital/asserv/src/asserv:
- fixed missing PWM inversion support.
Diffstat (limited to 'digital/asserv/src')
-rw-r--r--digital/asserv/src/asserv/pwm_mp.avr.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/digital/asserv/src/asserv/pwm_mp.avr.c b/digital/asserv/src/asserv/pwm_mp.avr.c
index 0bd4e6ee..0bb766c2 100644
--- a/digital/asserv/src/asserv/pwm_mp.avr.c
+++ b/digital/asserv/src/asserv/pwm_mp.avr.c
@@ -65,13 +65,17 @@ pwm_mp_init (void)
/** Send command using SPI. */
static void
-pwm_mp_send (int16_t pwm1, int16_t pwm2)
+pwm_mp_send (int16_t pwm1, int16_t pwm2, uint8_t invert1, uint8_t invert2)
{
uint8_t v;
uint8_t cks;
/* Convert to 12 bits. */
int16_t pwm1c = pwm1 << 1;
int16_t pwm2c = pwm2 << 1;
+ if (invert1)
+ pwm1c = -pwm1c;
+ if (invert2)
+ pwm2c = -pwm2c;
if (UTILS_ABS (pwm1c) < 0x10)
pwm1c = 0;
if (UTILS_ABS (pwm2c) < 0x10)
@@ -105,14 +109,18 @@ pwm_mp_update (void)
#if PWM1or2
/* Chip enable. */
PORTB &= ~_BV (0);
- pwm_mp_send (PWM1c (PWM1), PWM2c (PWM2));
+ pwm_mp_send (PWM1c (PWM1), PWM2c (PWM2),
+ PWM1c (pwm_reverse & PWM_REVERSE_BIT (PWM1)),
+ PWM2c (pwm_reverse & PWM_REVERSE_BIT (PWM2)));
/* Chip disable. */
PORTB |= _BV (0);
#endif
#if PWM3or4
/* Chip enable. */
PORTE &= ~_BV (4);
- pwm_mp_send (PWM3c (PWM3), PWM4c (PWM4));
+ pwm_mp_send (PWM3c (PWM3), PWM4c (PWM4),
+ PWM3c (pwm_reverse & PWM_REVERSE_BIT (PWM3)),
+ PWM4c (pwm_reverse & PWM_REVERSE_BIT (PWM4)));
/* Chip disable. */
PORTE |= _BV (4);
#endif