mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-18 08:54:15 +01:00
OP-22 Flight/PiOS: Spektrum improvements, removed my zero throttle glitch
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2306 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
7ccdb296ac
commit
0b2a0884ae
@ -114,7 +114,8 @@ static void guidanceTask(void *parameters)
|
||||
if ((manualControl.FlightMode == MANUALCONTROLCOMMAND_FLIGHTMODE_AUTO) &&
|
||||
((systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_VTOL) ||
|
||||
(systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_QUADP) ||
|
||||
(systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_QUADX)))
|
||||
(systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_QUADX) ||
|
||||
(systemSettings.AirframeType == SYSTEMSETTINGS_AIRFRAMETYPE_HEXA) ))
|
||||
{
|
||||
if(positionHoldLast == 0) {
|
||||
/* When enter position hold mode save current position */
|
||||
|
@ -266,7 +266,7 @@ TIM8 | Servo 5 | Servo 6 | Servo 7 | Servo 8
|
||||
#define PIOS_SPEKTRUM_SUPV_ENABLED 1
|
||||
#define PIOS_SPEKTRUM_SUPV_TIMER TIM6
|
||||
#define PIOS_SPEKTRUM_SUPV_TIMER_RCC_FUNC RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE)
|
||||
#define PIOS_SPEKTRUM_SUPV_HZ 50 // 1/22ms
|
||||
#define PIOS_SPEKTRUM_SUPV_HZ 60 // 1/22ms
|
||||
#define PIOS_SPEKTRUM_SUPV_IRQ_CHANNEL TIM6_IRQn
|
||||
#define PIOS_SPEKTRUM_SUPV_IRQ_FUNC void TIM6_IRQHandler(void)
|
||||
|
||||
|
@ -43,8 +43,8 @@
|
||||
/* Global Variables */
|
||||
|
||||
/* Local Variables, use pios_usart */
|
||||
static uint16_t CaptureValue[12];
|
||||
static uint8_t prev_byte = 0xFF, sync = 0, bytecount = 0, byte_array[20] = { 0 };
|
||||
static uint16_t CaptureValue[12],CaptureValueTemp[12];
|
||||
static uint8_t prev_byte = 0xFF, sync = 0, bytecount = 0, frame_error=0, byte_array[20] = { 0 };
|
||||
|
||||
uint8_t sync_of = 0;
|
||||
|
||||
@ -77,7 +77,7 @@ void PIOS_SPEKTRUM_Init(void)
|
||||
TIM_TimeBaseStructure.TIM_Prescaler = (PIOS_MASTER_CLOCK / 1000000) - 1; /* For 1 uS accuracy */
|
||||
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||||
TIM_TimeBaseInit(PIOS_PPM_SUPV_TIMER, &TIM_TimeBaseStructure);
|
||||
TIM_TimeBaseInit(PIOS_SPEKTRUM_SUPV_TIMER, &TIM_TimeBaseStructure);
|
||||
|
||||
/* Enable the Update Interrupt Request */
|
||||
TIM_ITConfig(PIOS_SPEKTRUM_SUPV_TIMER, TIM_IT_Update, ENABLE);
|
||||
@ -188,8 +188,12 @@ int32_t PIOS_SPEKTRUM_Decode(uint8_t b)
|
||||
frame = channel >> 15;
|
||||
channeln = (channel >> 10) & 0x0F;
|
||||
data = channel & 0x03FF;
|
||||
if (channeln < 12)
|
||||
CaptureValue[channeln] = data;
|
||||
if(channeln==0 && data<10) // discard frame if throttle misbehaves
|
||||
{
|
||||
frame_error=1;
|
||||
}
|
||||
if (channeln < 12 && !frame_error)
|
||||
CaptureValueTemp[channeln] = data;
|
||||
}
|
||||
}
|
||||
if (bytecount == 16) {
|
||||
@ -197,6 +201,14 @@ int32_t PIOS_SPEKTRUM_Decode(uint8_t b)
|
||||
bytecount = 0;
|
||||
sync = 0;
|
||||
sync_of = 0;
|
||||
if (!frame_error)
|
||||
{
|
||||
for(int i=0;i<12;i++)
|
||||
{
|
||||
CaptureValue[i] = CaptureValueTemp[i];
|
||||
}
|
||||
}
|
||||
frame_error=0;
|
||||
}
|
||||
prev_byte = b;
|
||||
return 0;
|
||||
@ -232,13 +244,17 @@ PIOS_SPEKTRUM_SUPV_IRQ_FUNC {
|
||||
sync = 0;
|
||||
bytecount = 0;
|
||||
prev_byte = 0xFF;
|
||||
frame_error=0;
|
||||
sync_of++;
|
||||
/* watchdog activated */
|
||||
if (sync_of > 1) {
|
||||
if (sync_of > 3) {
|
||||
/* signal lost */
|
||||
sync_of = 0;
|
||||
for (int i = 0; i < 12; i++)
|
||||
{
|
||||
CaptureValue[i] = 0;
|
||||
CaptureValueTemp[i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user