Paparazzi UAS  v5.0.5_stable-7-g4b8bbb7
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
spektrum_arch.c File Reference
#include <stdint.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/timer.h>
#include <libopencm3/stm32/usart.h>
#include <libopencm3/cm3/nvic.h>
#include "subsystems/radio_control.h"
#include "subsystems/radio_control/spektrum_arch.h"
#include "mcu_periph/uart.h"
#include "mcu_periph/gpio.h"
#include <BOARD_CONFIG>
+ Include dependency graph for spektrum_arch.c:

Go to the source code of this file.

Data Structures

struct  SpektrumStateStruct
 

Macros

#define SPEKTRUM_CHANNELS_PER_FRAME   7
 
#define MAX_SPEKTRUM_FRAMES   2
 
#define MAX_SPEKTRUM_CHANNELS   16
 
#define MAX_DELAY   INT16_MAX
 
#define DELAY_TIM_FREQUENCY   1000000
 
#define MASTER_RECEIVER_PULSES   5
 
#define SLAVE_RECEIVER_PULSES   6
 
#define TIM_FREQ_1000000   1000000
 
#define TIM_TICS_FOR_100us   100
 
#define MIN_FRAME_SPACE   70
 
#define MAX_BYTE_SPACE   3
 
#define __PrimaryUart(dev, _x)   dev##_x
 
#define _PrimaryUart(dev, _x)   __PrimaryUart(dev, _x)
 
#define PrimaryUart(_x)   _PrimaryUart(RADIO_CONTROL_SPEKTRUM_PRIMARY_PORT, _x)
 
#define __SecondaryUart(dev, _x)   dev##_x
 
#define _SecondaryUart(dev, _x)   __SecondaryUart(dev, _x)
 
#define SecondaryUart(_x)   _SecondaryUart(RADIO_CONTROL_SPEKTRUM_SECONDARY_PORT, _x)
 

Typedefs

typedef struct SpektrumStateStruct SpektrumStateType
 

Functions

void SpektrumUartInit (void)
 
void SpektrumTimerInit (void)
 
void tim6_irq_handler (void)
 
static void DelayUs (uint16_t uSecs)
 
static void DelayMs (uint16_t mSecs)
 
static void SpektrumDelayInit (void)
 
void radio_control_impl_init (void)
 
static void SpektrumParser (uint8_t _c, SpektrumStateType *spektrum_state, bool_t secondary_receiver)
 
void RadioControlEventImp (void(*frame_handler)(void))
 
 timer_clear_flag (TIM6, TIM_SR_UIF)
 
 if (PrimarySpektrumState.SpektrumTimer)--PrimarySpektrumState.SpektrumTimer
 
void PrimaryUart() _ISR (void)
 
void radio_control_spektrum_try_bind (void)
 

Variables

SpektrumStateType PrimarySpektrumState = {1,0,0,0,0,0,0,0,0,{0}}
 
int16_t SpektrumBuf [SPEKTRUM_CHANNELS_PER_FRAME *MAX_SPEKTRUM_FRAMES]
 
int8_t SpektrumSigns [] = RADIO_CONTROL_SPEKTRUM_SIGNS
 
static uint8_t EncodingType = 0
 
static uint8_t ExpectedFrames = 0
 

Macro Definition Documentation

#define __PrimaryUart (   dev,
  _x 
)    dev##_x

Definition at line 59 of file spektrum_arch.c.

#define __SecondaryUart (   dev,
  _x 
)    dev##_x

Definition at line 63 of file spektrum_arch.c.

#define _PrimaryUart (   dev,
  _x 
)    __PrimaryUart(dev, _x)

Definition at line 60 of file spektrum_arch.c.

#define _SecondaryUart (   dev,
  _x 
)    __SecondaryUart(dev, _x)

Definition at line 64 of file spektrum_arch.c.

#define DELAY_TIM_FREQUENCY   1000000

Definition at line 42 of file spektrum_arch.c.

Referenced by DelayMs(), and SpektrumDelayInit().

#define MASTER_RECEIVER_PULSES   5

Definition at line 44 of file spektrum_arch.c.

Referenced by radio_control_spektrum_try_bind().

#define MAX_BYTE_SPACE   3

Definition at line 50 of file spektrum_arch.c.

Referenced by SpektrumParser().

#define MAX_DELAY   INT16_MAX

Definition at line 40 of file spektrum_arch.c.

#define MAX_SPEKTRUM_CHANNELS   16

Definition at line 38 of file spektrum_arch.c.

#define MAX_SPEKTRUM_FRAMES   2

Definition at line 37 of file spektrum_arch.c.

#define MIN_FRAME_SPACE   70

Definition at line 49 of file spektrum_arch.c.

Referenced by SpektrumParser().

#define PrimaryUart (   _x)    _PrimaryUart(RADIO_CONTROL_SPEKTRUM_PRIMARY_PORT, _x)

Definition at line 61 of file spektrum_arch.c.

Referenced by _ISR(), radio_control_spektrum_try_bind(), and SpektrumUartInit().

#define SecondaryUart (   _x)    _SecondaryUart(RADIO_CONTROL_SPEKTRUM_SECONDARY_PORT, _x)

Definition at line 65 of file spektrum_arch.c.

Referenced by radio_control_spektrum_try_bind(), and SpektrumUartInit().

#define SLAVE_RECEIVER_PULSES   6

Definition at line 45 of file spektrum_arch.c.

Referenced by radio_control_spektrum_try_bind().

#define SPEKTRUM_CHANNELS_PER_FRAME   7

Definition at line 36 of file spektrum_arch.c.

Referenced by RadioControlEventImp(), and SpektrumParser().

#define TIM_FREQ_1000000   1000000

Definition at line 47 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

#define TIM_TICS_FOR_100us   100

Definition at line 48 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

Typedef Documentation

Definition at line 80 of file spektrum_arch.c.

Function Documentation

void PrimaryUart() _ISR ( void  )

Definition at line 589 of file spektrum_arch.c.

References FALSE, PrimaryUart, and SpektrumParser().

+ Here is the call graph for this function:

static void DelayMs ( uint16_t  mSecs)
static

Definition at line 741 of file spektrum_arch.c.

References DELAY_TIM_FREQUENCY, and DelayUs().

Referenced by radio_control_spektrum_try_bind().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void DelayUs ( uint16_t  uSecs)
static

Definition at line 733 of file spektrum_arch.c.

Referenced by DelayMs(), and radio_control_spektrum_try_bind().

+ Here is the caller graph for this function:

if ( PrimarySpektrumState.  SpektrumTimer)
void radio_control_impl_init ( void  )

Definition at line 136 of file spektrum_arch.c.

References SpektrumStateStruct::ReSync, SpektrumTimerInit(), and SpektrumUartInit().

+ Here is the call graph for this function:

void radio_control_spektrum_try_bind ( void  )
static void SpektrumDelayInit ( void  )
static

Definition at line 706 of file spektrum_arch.c.

References AHB_CLK, and DELAY_TIM_FREQUENCY.

Referenced by radio_control_spektrum_try_bind().

+ Here is the caller graph for this function:

static void SpektrumParser ( uint8_t  _c,
SpektrumStateType spektrum_state,
bool_t  secondary_receiver 
)
inlinestatic
void SpektrumTimerInit ( void  )

Definition at line 470 of file spektrum_arch.c.

References AHB_CLK, TIM_FREQ_1000000, TIM_TICS_FOR_100us, and timer_clear_flag().

Referenced by radio_control_impl_init().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void SpektrumUartInit ( void  )

Definition at line 526 of file spektrum_arch.c.

References FALSE, gpio_enable_clock(), gpio_setup_pin_af(), PrimaryUart, and SecondaryUart.

Referenced by radio_control_impl_init().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void tim6_irq_handler ( void  )
timer_clear_flag ( TIM6  ,
TIM_SR_UIF   
)

Referenced by SpektrumTimerInit().

+ Here is the caller graph for this function:

Variable Documentation

uint8_t EncodingType = 0
static

Definition at line 115 of file spektrum_arch.c.

uint8_t ExpectedFrames = 0
static

Definition at line 116 of file spektrum_arch.c.

Referenced by RadioControlEventImp(), and SpektrumParser().

SpektrumStateType PrimarySpektrumState = {1,0,0,0,0,0,0,0,0,{0}}

Definition at line 82 of file spektrum_arch.c.

Definition at line 93 of file spektrum_arch.c.

Definition at line 112 of file spektrum_arch.c.