From 03864adbe2ad9f65f65715a9f6f9c441e196453a Mon Sep 17 00:00:00 2001 From: Andrew Tridgell <tridge@samba.org> Date: Wed, 21 Nov 2012 23:02:21 +1100 Subject: [PATCH] Revert "Optimized APM_RC.InputCh() to prevent global interrupt disable each time a value is read." This reverts commit 6ef0652efa2f7b0bb7702f8abee4b54e5de3b20e. This doesn't look safe to me. See my email to the list. --- libraries/APM_RC/APM_RC_APM1.cpp | 11 +++-------- libraries/APM_RC/APM_RC_APM2.cpp | 11 +++-------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/libraries/APM_RC/APM_RC_APM1.cpp b/libraries/APM_RC/APM_RC_APM1.cpp index 7f648e50f..1915efa1f 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 aa6847fa9..d78105227 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; -- GitLab