Paparazzi UAS  v5.12_stable-4-g9b43e9b
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces 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 "mcu_periph/sys_time.h"
#include "mcu_arch.h"
#include "std.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 ONE_MHZ   1000000
 
#define MASTER_RECEIVER_PULSES   5
 
#define SLAVE_RECEIVER_PULSES   6
 
#define TIM_TICS_FOR_100us   100
 
#define MIN_FRAME_SPACE   70
 
#define MAX_BYTE_SPACE   3
 
#define PASTER3(x, y, z)   x ## y ## z
 
#define EVALUATOR3(x, y, z)   PASTER3(x,y,z)
 
#define NVIC_TIMx_IRQ   EVALUATOR3(NVIC_TIM, SPEKTRUM_TIMER,_IRQ)
 
#define NVIC_TIMx_DAC_IRQ   EVALUATOR3(NVIC_TIM, SPEKTRUM_TIMER,_DAC_IRQ)
 
#define TIMx_ISR   EVALUATOR3(tim, SPEKTRUM_TIMER,_isr)
 
#define TIMx_DAC_ISR   EVALUATOR3(tim, SPEKTRUM_TIMER,_dac_isr)
 
#define PASTER2(x, y)   x ## y
 
#define EVALUATOR2(x, y)   PASTER2(x,y)
 
#define TIMx   EVALUATOR2(TIM, SPEKTRUM_TIMER)
 
#define RCC_TIMx   EVALUATOR2(RCC_TIM, SPEKTRUM_TIMER)
 
#define SPEKTRUM_TIMER   6
 
#define NVIC_TIM6_IRQ_PRIO   2
 
#define NVIC_TIMx_IRQ_PRIO   2
 
#define NVIC_TIM6_DAC_IRQ_PRIO   2
 
#define NVIC_TIMx_DAC_IRQ_PRIO   2
 
#define NVIC_PRIMARY_UART_PRIO   2
 
#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)
 
#define RC_SET_POLARITY   gpio_clear
 Set polarity using RC_POLARITY_GPIO. More...
 
#define SPEKTRUM_PRIMARY_BIND_CONF_PORT   PrimaryUart(_BANK)
 
#define SPEKTRUM_PRIMARY_BIND_CONF_PIN   PrimaryUart(_PIN)
 
#define SPEKTRUM_SECONDARY_BIND_CONF_PORT   SecondaryUart(_BANK)
 
#define SPEKTRUM_SECONDARY_BIND_CONF_PIN   SecondaryUart(_PIN)
 

Typedefs

typedef struct SpektrumStateStruct SpektrumStateType
 

Functions

void SpektrumTimerInit (void)
 
void radio_control_impl_init (void)
 
static void SpektrumParser (uint8_t _c, SpektrumStateType *spektrum_state, bool secondary_receiver)
 
void RadioControlEventImp (void(*frame_handler)(void))
 
 timer_clear_flag (TIMx, TIM_SR_UIF)
 
 if (PrimarySpektrumState.SpektrumTimer)
 
void SpektrumUartInit (void)
 
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
 

Data Structure Documentation

struct SpektrumStateStruct

Definition at line 135 of file spektrum_arch.c.

Data Fields
uint8_t ChannelCnt
uint8_t FrameCnt
uint8_t HighByte
uint16_t LostFrameCnt
uint8_t RcAvailable
uint8_t ReSync
uint8_t SecondFrame
uint8_t SpektrumTimer
uint8_t Sync
int16_t values[SPEKTRUM_CHANNELS_PER_FRAME *MAX_SPEKTRUM_FRAMES]

Macro Definition Documentation

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

Definition at line 127 of file spektrum_arch.c.

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

Definition at line 131 of file spektrum_arch.c.

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

Definition at line 128 of file spektrum_arch.c.

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

Definition at line 132 of file spektrum_arch.c.

#define EVALUATOR2 (   x,
 
)    PASTER2(x,y)

Definition at line 74 of file spektrum_arch.c.

#define EVALUATOR3 (   x,
  y,
 
)    PASTER3(x,y,z)

Definition at line 67 of file spektrum_arch.c.

#define MASTER_RECEIVER_PULSES   5

Definition at line 56 of file spektrum_arch.c.

Referenced by radio_control_spektrum_try_bind().

#define MAX_BYTE_SPACE   3

Definition at line 62 of file spektrum_arch.c.

Referenced by SpektrumParser().

#define MAX_SPEKTRUM_CHANNELS   16

Definition at line 47 of file spektrum_arch.c.

#define MAX_SPEKTRUM_FRAMES   2

Definition at line 46 of file spektrum_arch.c.

#define MIN_FRAME_SPACE   70

Definition at line 61 of file spektrum_arch.c.

Referenced by SpektrumParser().

#define NVIC_PRIMARY_UART_PRIO   2

Definition at line 117 of file spektrum_arch.c.

Referenced by SpektrumUartInit().

#define NVIC_TIM6_DAC_IRQ_PRIO   2

Definition at line 90 of file spektrum_arch.c.

#define NVIC_TIM6_IRQ_PRIO   2

Definition at line 84 of file spektrum_arch.c.

#define NVIC_TIMx_DAC_IRQ   EVALUATOR3(NVIC_TIM, SPEKTRUM_TIMER,_DAC_IRQ)

Definition at line 69 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

#define NVIC_TIMx_DAC_IRQ_PRIO   2

Definition at line 91 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

#define NVIC_TIMx_IRQ   EVALUATOR3(NVIC_TIM, SPEKTRUM_TIMER,_IRQ)

Definition at line 68 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

#define NVIC_TIMx_IRQ_PRIO   2

Definition at line 85 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

#define ONE_MHZ   1000000

Definition at line 49 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

#define PASTER2 (   x,
 
)    x ## y

Definition at line 73 of file spektrum_arch.c.

#define PASTER3 (   x,
  y,
 
)    x ## y ## z

Definition at line 66 of file spektrum_arch.c.

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

Definition at line 129 of file spektrum_arch.c.

Referenced by _ISR(), and SpektrumUartInit().

#define RC_SET_POLARITY   gpio_clear

Set polarity using RC_POLARITY_GPIO.

SBUS signal has a reversed polarity compared to normal UART this allows to using hardware UART peripheral by changing the input signal polarity. Setting this gpio ouput high inverts the signal, output low sets it to normal polarity. So for spektrum this is set to normal polarity.

Definition at line 198 of file spektrum_arch.c.

Referenced by radio_control_impl_init().

#define RCC_TIMx   EVALUATOR2(RCC_TIM, SPEKTRUM_TIMER)

Definition at line 76 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

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

Definition at line 133 of file spektrum_arch.c.

Referenced by SpektrumUartInit().

#define SLAVE_RECEIVER_PULSES   6

Definition at line 57 of file spektrum_arch.c.

Referenced by radio_control_spektrum_try_bind().

#define SPEKTRUM_CHANNELS_PER_FRAME   7

Definition at line 45 of file spektrum_arch.c.

Referenced by RadioControlEventImp(), and SpektrumParser().

#define SPEKTRUM_PRIMARY_BIND_CONF_PIN   PrimaryUart(_PIN)

Definition at line 735 of file spektrum_arch.c.

Referenced by radio_control_spektrum_try_bind().

#define SPEKTRUM_PRIMARY_BIND_CONF_PORT   PrimaryUart(_BANK)

Definition at line 732 of file spektrum_arch.c.

Referenced by radio_control_spektrum_try_bind().

#define SPEKTRUM_SECONDARY_BIND_CONF_PIN   SecondaryUart(_PIN)

Definition at line 741 of file spektrum_arch.c.

Referenced by radio_control_spektrum_try_bind().

#define SPEKTRUM_SECONDARY_BIND_CONF_PORT   SecondaryUart(_BANK)

Definition at line 738 of file spektrum_arch.c.

Referenced by radio_control_spektrum_try_bind().

#define SPEKTRUM_TIMER   6

Definition at line 79 of file spektrum_arch.c.

#define TIM_TICS_FOR_100us   100

Definition at line 60 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

#define TIMx   EVALUATOR2(TIM, SPEKTRUM_TIMER)

Definition at line 75 of file spektrum_arch.c.

Referenced by SpektrumTimerInit().

#define TIMx_DAC_ISR   EVALUATOR3(tim, SPEKTRUM_TIMER,_dac_isr)

Definition at line 71 of file spektrum_arch.c.

#define TIMx_ISR   EVALUATOR3(tim, SPEKTRUM_TIMER,_isr)

Definition at line 70 of file spektrum_arch.c.

Typedef Documentation

Definition at line 148 of file spektrum_arch.c.

Function Documentation

void PrimaryUart() _ISR ( void  )

Definition at line 683 of file spektrum_arch.c.

References FALSE, PrimaryUart, and SpektrumParser().

+ Here is the call graph for this function:

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

Definition at line 558 of file spektrum_arch.c.

References NVIC_TIMx_DAC_IRQ, NVIC_TIMx_DAC_IRQ_PRIO, NVIC_TIMx_IRQ, NVIC_TIMx_IRQ_PRIO, ONE_MHZ, RCC_TIMx, TIM_TICS_FOR_100us, timer_clear_flag(), timer_get_frequency(), and TIMx.

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 620 of file spektrum_arch.c.

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

Referenced by radio_control_impl_init(), received_spektrum_soft_bind(), and send_spektrum_bind().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

timer_clear_flag ( TIMx  ,
TIM_SR_UIF   
)

Referenced by clear_timer_flag(), and SpektrumTimerInit().

+ Here is the caller graph for this function:

Variable Documentation

uint8_t EncodingType = 0
static

Definition at line 183 of file spektrum_arch.c.

uint8_t ExpectedFrames = 0
static

Definition at line 184 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 150 of file spektrum_arch.c.

Definition at line 161 of file spektrum_arch.c.

Definition at line 180 of file spektrum_arch.c.