Browse Source

FMU driver: Only init pins right before using the for PWM. Prevents accidental pulses

sbg
Lorenz Meier 9 years ago
parent
commit
2e8accc6ff
  1. 32
      src/drivers/px4fmu/fmu.cpp

32
src/drivers/px4fmu/fmu.cpp

@ -161,6 +161,8 @@ private: @@ -161,6 +161,8 @@ private:
volatile bool _initialized;
bool _throttle_armed;
bool _pwm_on;
bool _pwm_init;
uint8_t _pwm_channel_mask;
MixerGroup *_mixers;
@ -313,6 +315,8 @@ PX4FMU::PX4FMU() : @@ -313,6 +315,8 @@ PX4FMU::PX4FMU() :
_initialized(false),
_throttle_armed(false),
_pwm_on(false),
_pwm_init(false),
_pwm_channel_mask(0),
_mixers(nullptr),
_groups_required(0),
_groups_subscribed(0),
@ -418,10 +422,7 @@ PX4FMU::set_mode(Mode mode) @@ -418,10 +422,7 @@ PX4FMU::set_mode(Mode mode)
_pwm_default_rate = 50;
_pwm_alt_rate = 50;
_pwm_alt_rate_channels = 0;
/* XXX magic numbers */
up_pwm_servo_init(0x3);
set_pwm_rate(_pwm_alt_rate_channels, _pwm_default_rate, _pwm_alt_rate);
_pwm_channel_mask = 0x3;
break;
@ -432,10 +433,7 @@ PX4FMU::set_mode(Mode mode) @@ -432,10 +433,7 @@ PX4FMU::set_mode(Mode mode)
_pwm_default_rate = 50;
_pwm_alt_rate = 50;
_pwm_alt_rate_channels = 0;
/* XXX magic numbers */
up_pwm_servo_init(0xf);
set_pwm_rate(_pwm_alt_rate_channels, _pwm_default_rate, _pwm_alt_rate);
_pwm_channel_mask = 0xf;
break;
@ -446,10 +444,7 @@ PX4FMU::set_mode(Mode mode) @@ -446,10 +444,7 @@ PX4FMU::set_mode(Mode mode)
_pwm_default_rate = 50;
_pwm_alt_rate = 50;
_pwm_alt_rate_channels = 0;
/* XXX magic numbers */
up_pwm_servo_init(0x3f);
set_pwm_rate(_pwm_alt_rate_channels, _pwm_default_rate, _pwm_alt_rate);
_pwm_channel_mask = 0x3f;
break;
@ -461,10 +456,7 @@ PX4FMU::set_mode(Mode mode) @@ -461,10 +456,7 @@ PX4FMU::set_mode(Mode mode)
_pwm_default_rate = 50;
_pwm_alt_rate = 50;
_pwm_alt_rate_channels = 0;
/* XXX magic numbers */
up_pwm_servo_init(0xff);
set_pwm_rate(_pwm_alt_rate_channels, _pwm_default_rate, _pwm_alt_rate);
_pwm_channel_mask = 0xff;
break;
#endif
@ -477,6 +469,7 @@ PX4FMU::set_mode(Mode mode) @@ -477,6 +469,7 @@ PX4FMU::set_mode(Mode mode)
/* disable servo outputs - no need to set rates */
up_pwm_servo_deinit();
_pwm_init = false;
break;
@ -873,6 +866,13 @@ PX4FMU::cycle() @@ -873,6 +866,13 @@ PX4FMU::cycle()
if (_pwm_on != pwm_on) {
_pwm_on = pwm_on;
if (!_pwm_init && _pwm_on) {
up_pwm_servo_init(_pwm_channel_mask);
set_pwm_rate(_pwm_alt_rate_channels, _pwm_default_rate, _pwm_alt_rate);
_pwm_init = true;
}
up_pwm_servo_arm(pwm_on);
}
}

Loading…
Cancel
Save