mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-03-22 14:19:42 +01:00
Fixed problem with board rebooting when changing mode from PPM Rx or PPM Tx to some other mode.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2996 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
3e67bf19dc
commit
bfcfb3e88e
@ -49,6 +49,8 @@
|
||||
|
||||
// *************************************************************
|
||||
|
||||
uint8_t ppm_mode;
|
||||
|
||||
volatile bool ppm_initialising = true;
|
||||
|
||||
volatile uint32_t ppm_In_PrevFrames = 0;
|
||||
@ -142,6 +144,9 @@ void ppm_In_Init(void)
|
||||
// Enable the Capture Compare Interrupt Request
|
||||
TIM_ITConfig(PIOS_PPM_TIM_PORT, PIOS_PPM_IN_TIM_CCR, ENABLE);
|
||||
|
||||
// Clear TIMER Capture compare interrupt pending bit
|
||||
TIM_ClearITPendingBit(PIOS_PPM_TIM_PORT, PIOS_PPM_IN_TIM_CCR);
|
||||
|
||||
// Enable timer
|
||||
TIM_Cmd(PIOS_PPM_TIM, ENABLE);
|
||||
|
||||
@ -375,6 +380,9 @@ void ppm_Out_Init(void)
|
||||
// TIM IT enable
|
||||
TIM_ITConfig(PIOS_PPM_TIM, PIOS_PPM_OUT_TIM_CCR, ENABLE);
|
||||
|
||||
// Clear TIMER Capture compare interrupt pending bit
|
||||
TIM_ClearITPendingBit(PIOS_PPM_TIM_PORT, PIOS_PPM_IN_TIM_CCR);
|
||||
|
||||
// Enable clock to timer module
|
||||
TIM_Cmd(PIOS_PPM_TIM, ENABLE);
|
||||
|
||||
@ -446,9 +454,9 @@ void ppm_Out_Supervisor(void)
|
||||
|
||||
void PIOS_PPM_CC_IRQ_FUNC(void)
|
||||
{
|
||||
if (saved_settings.mode == MODE_PPM_TX) PIOS_PPM_IN_CC_IRQ();
|
||||
if (ppm_mode == MODE_PPM_TX) PIOS_PPM_IN_CC_IRQ();
|
||||
else
|
||||
if (saved_settings.mode == MODE_PPM_RX) PIOS_PPM_OUT_CC_IRQ();
|
||||
if (ppm_mode == MODE_PPM_RX) PIOS_PPM_OUT_CC_IRQ();
|
||||
}
|
||||
|
||||
// *************************************************************
|
||||
@ -460,17 +468,9 @@ void ppm_1ms_tick(void)
|
||||
if (booting || ppm_initialising)
|
||||
return;
|
||||
|
||||
if (saved_settings.mode == MODE_PPM_TX)
|
||||
{
|
||||
ppm_In_Supervisor();
|
||||
return;
|
||||
}
|
||||
|
||||
if (saved_settings.mode == MODE_PPM_RX)
|
||||
{
|
||||
ppm_Out_Supervisor();
|
||||
return;
|
||||
}
|
||||
if (ppm_mode == MODE_PPM_TX) ppm_In_Supervisor();
|
||||
else
|
||||
if (ppm_mode == MODE_PPM_RX) ppm_Out_Supervisor();
|
||||
}
|
||||
|
||||
// *************************************************************
|
||||
@ -501,7 +501,7 @@ void ppm_process(void)
|
||||
if (booting || ppm_initialising)
|
||||
return;
|
||||
|
||||
if (saved_settings.mode == MODE_PPM_TX)
|
||||
if (ppm_mode == MODE_PPM_TX)
|
||||
{
|
||||
if (ppm_In_NewFrame() > 0)
|
||||
{ // we have a new PPM frame to send
|
||||
@ -518,14 +518,15 @@ void ppm_process(void)
|
||||
#ifdef PPM_DEBUG
|
||||
DEBUG_PRINTF("ppm_in: %u %u %4u\r\n", ppm_In_Frames, i, ppm_In_GetChannelPulseWidth(i));
|
||||
#endif
|
||||
|
||||
// TODO:
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
else
|
||||
if (saved_settings.mode == MODE_PPM_RX)
|
||||
{
|
||||
return;
|
||||
// TODO:
|
||||
}
|
||||
}
|
||||
|
||||
@ -568,13 +569,15 @@ void ppm_init(uint32_t our_sn)
|
||||
DEBUG_PRINTF("\r\nPPM init\r\n");
|
||||
#endif
|
||||
|
||||
if (saved_settings.mode == MODE_PPM_TX)
|
||||
ppm_mode = saved_settings.mode;
|
||||
|
||||
if (ppm_mode == MODE_PPM_TX)
|
||||
{
|
||||
ppm_In_Init();
|
||||
rfm22_init_tx_stream(saved_settings.min_frequency_Hz, saved_settings.max_frequency_Hz);
|
||||
}
|
||||
else
|
||||
if (saved_settings.mode == MODE_PPM_RX)
|
||||
if (ppm_mode == MODE_PPM_RX)
|
||||
{
|
||||
ppm_Out_Init();
|
||||
rfm22_init_rx_stream(saved_settings.min_frequency_Hz, saved_settings.max_frequency_Hz);
|
||||
@ -588,7 +591,7 @@ void ppm_init(uint32_t our_sn)
|
||||
rfm22_setDatarate(saved_settings.max_rf_bandwidth, FALSE);
|
||||
rfm22_setTxPower(saved_settings.max_tx_power);
|
||||
|
||||
if (saved_settings.mode == MODE_PPM_TX)
|
||||
if (ppm_mode == MODE_PPM_TX)
|
||||
rfm22_setTxStream();
|
||||
|
||||
ppm_initialising = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user