1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-21 15:25:36 +03:00

Cherry-pick CF/fbb3f92

This commit is contained in:
Dominic Clifton 2017-05-08 19:19:59 +01:00 committed by jflyper
parent d373857e59
commit fac694ce4b
7 changed files with 157 additions and 11 deletions

View file

@ -28,6 +28,8 @@
#define TRANSPONDER_DMA_BUFFER_SIZE_ARCITIMER 155 * TRANSPONDER_TOGGLES_PER_BIT_ARCITIMER // 620
#define TRANSPONDER_TIMER_MHZ_ARCITIMER 24
#define TRANSPONDER_CARRIER_HZ_ARCITIMER 41886
#define TRANSPONDER_TRANSMIT_DELAY_ARCITIMER 4500
#define TRANSPONDER_TRANSMIT_JITTER_ARCITIMER 10000
/*** ******** ***/
@ -36,12 +38,29 @@
#define TRANSPONDER_DATA_LENGTH_ILAP 6
#define TRANSPONDER_TOGGLES_PER_BIT_ILAP 11
#define TRANSPONDER_GAP_TOGGLES_ILAP 1
#define TRANSPONDER_TOGGLES (TRANSPONDER_TOGGLES_PER_BIT_ILAP + TRANSPONDER_GAP_TOGGLES_ILAP)
#define TRANSPONDER_TOGGLES_ILAP (TRANSPONDER_TOGGLES_PER_BIT_ILAP + TRANSPONDER_GAP_TOGGLES_ILAP)
#define TRANSPONDER_DMA_BUFFER_SIZE_ILAP ((TRANSPONDER_TOGGLES_PER_BIT_ILAP + 1) * TRANSPONDER_BITS_PER_BYTE_ILAP * TRANSPONDER_DATA_LENGTH_ILAP) //720
#define TRANSPONDER_TIMER_MHZ_ILAP 24
#define TRANSPONDER_CARRIER_HZ_ILAP 460750
#define TRANSPONDER_TRANSMIT_DELAY_ILAP 4500
#define TRANSPONDER_TRANSMIT_JITTER_ILAP 10000
/*** ******** ***/
/*** ERLT ***/
#define TRANSPONDER_DATA_LENGTH_ERLT 1
#define ERLTBitQuiet 0
#define ERLTCyclesForOneBit 25
#define ERLTCyclesForZeroBit 10
#define TRANSPONDER_DMA_BUFFER_SIZE_ERLT 200 // actually ERLT is variable length 91-196 depending on the ERLT id
#define TRANSPONDER_TIMER_MHZ_ERLT 18
#define TRANSPONDER_CARRIER_HZ_ERLT 38000
#define TRANSPONDER_TRANSMIT_DELAY_ERLT 22500
#define TRANSPONDER_TRANSMIT_JITTER_ERLT 5000
/*** ******** ***/
/*
* Implementation note:
* Using around over 700 bytes for a transponder DMA buffer is a little excessive, likely an alternative implementation that uses a fast
@ -55,6 +74,7 @@
typedef union transponderIrDMABuffer_s {
uint8_t arcitimer[TRANSPONDER_DMA_BUFFER_SIZE_ARCITIMER]; // 620
uint8_t ilap[TRANSPONDER_DMA_BUFFER_SIZE_ILAP]; // 720
uint8_t erlt[TRANSPONDER_DMA_BUFFER_SIZE_ERLT]; // 91-200
} transponderIrDMABuffer_t;
#elif defined(STM32F4)
@ -62,6 +82,7 @@
typedef union transponderIrDMABuffer_s {
uint32_t arcitimer[TRANSPONDER_DMA_BUFFER_SIZE_ARCITIMER]; // 620
uint32_t ilap[TRANSPONDER_DMA_BUFFER_SIZE_ILAP]; // 720
uint32_t erlt[TRANSPONDER_DMA_BUFFER_SIZE_ERLT]; // 91-200
} transponderIrDMABuffer_t;
#endif
@ -80,11 +101,14 @@ typedef struct transponder_s {
} transponder_t;
typedef enum {
NONE,
ARCITIMER,
ILAP
TRANSPONDER_NONE = 0,
TRANSPONDER_ILAP,
TRANSPONDER_ARCITIMER,
TRANSPONDER_ERLT
} transponderProvider_e;
#define TRANSPONDER_PROVIDER_COUNT 3
struct transponderVTable {
void (*updateTransponderDMABuffer)(transponder_t *transponder, const uint8_t* transponderData);
};