diff --git a/libraries/APM_RC/APM_RC_APM1.cpp b/libraries/APM_RC/APM_RC_APM1.cpp index 7f648e50f60d1b58ed189ed5180a05100237f30d..1915efa1fd90aeb72d7cb2f298f80d94052a2316 100644 --- a/libraries/APM_RC/APM_RC_APM1.cpp +++ b/libraries/APM_RC/APM_RC_APM1.cpp @@ -219,15 +219,10 @@ uint16_t APM_RC_APM1::InputCh(uint8_t ch) return _HIL_override[ch]; } - // We need to block ICP4 interrupts during the read of 16 bit PWM values - uint8_t _timsk4 = TIMSK4; - TIMSK4 &= ~(1<<ICIE4); - - // value + // we need to stop interrupts to be sure we get a correct 16 bit value + cli(); result = _PWM_RAW[ch]; - - // Enable ICP4 interrupt if previously active - TIMSK4 = _timsk4; + sei(); // Because timer runs at 0.5us we need to do value/2 result >>= 1; diff --git a/libraries/APM_RC/APM_RC_APM2.cpp b/libraries/APM_RC/APM_RC_APM2.cpp index aa6847fa96d8e95c8f443fd605e6f61616ec8c08..d78105227a604eb065e76bcfa41e2ccabc0d119b 100644 --- a/libraries/APM_RC/APM_RC_APM2.cpp +++ b/libraries/APM_RC/APM_RC_APM2.cpp @@ -241,16 +241,11 @@ uint16_t APM_RC_APM2::InputCh(unsigned char ch) return _HIL_override[ch]; } - // We need to block ICP5 interrupts during the read of 16 bit PWM values - uint8_t _timsk5 = TIMSK5; - TIMSK5 &= ~(1<<ICIE5); - + // we need to block interrupts during the read of a 16 bit // value + cli(); result = _PWM_RAW[ch]; - - // Enable ICP5 interrupt if previously active - TIMSK5 = _timsk5; - + sei(); // Because timer runs at 0.5us we need to do value/2 result >>= 1;