Compilation fixes
This commit is contained in:
@@ -122,6 +122,20 @@ uint8_t getRequiredProtocol(uint8_t port)
|
||||
return required_protocol;
|
||||
}
|
||||
|
||||
void setupPulsesPXX(uint8_t port)
|
||||
{
|
||||
#if defined(INTMODULE_USART) && defined(EXTMODULE_USART)
|
||||
modulePulsesData[port].pxx_uart.setupFrame(port);
|
||||
#elif !defined(INTMODULE_USART) && !defined(EXTMODULE_USART)
|
||||
modulePulsesData[port].pxx.setupFrame(port);
|
||||
#else
|
||||
if (IS_UART_MODULE(port))
|
||||
modulePulsesData[port].pxx_uart.setupFrame(port);
|
||||
else
|
||||
modulePulsesData[port].pxx.setupFrame(port);
|
||||
#endif
|
||||
}
|
||||
|
||||
void setupPulses(uint8_t port)
|
||||
{
|
||||
bool init_needed = false;
|
||||
@@ -177,7 +191,7 @@ void setupPulses(uint8_t port)
|
||||
// Set up output data here
|
||||
switch (required_protocol) {
|
||||
case PROTO_PXX:
|
||||
modulePulsesData[port].pxx.setupFrame(port);
|
||||
setupPulsesPXX(port);
|
||||
scheduleNextMixerCalculation(port, PXX_PERIOD);
|
||||
break;
|
||||
|
||||
|
||||
@@ -21,20 +21,15 @@
|
||||
#ifndef _PULSES_ARM_H_
|
||||
#define _PULSES_ARM_H_
|
||||
|
||||
#include "pulses/pxx2.h"
|
||||
#include "pulses/pxx1.h"
|
||||
|
||||
#if NUM_MODULES == 2
|
||||
#define MODULES_INIT(...) __VA_ARGS__, __VA_ARGS__
|
||||
#else
|
||||
#define MODULES_INIT(...) __VA_ARGS__
|
||||
#endif
|
||||
|
||||
#if defined(PCBX12S) && PCBREV < 13
|
||||
#define pulse_duration_t uint32_t
|
||||
#define trainer_pulse_duration_t uint16_t
|
||||
#else
|
||||
#define pulse_duration_t uint16_t
|
||||
#define trainer_pulse_duration_t uint16_t
|
||||
#endif
|
||||
|
||||
extern uint8_t s_current_protocol[NUM_MODULES];
|
||||
extern uint8_t s_pulses_paused;
|
||||
extern uint16_t failsafeCounter[NUM_MODULES];
|
||||
@@ -44,18 +39,6 @@ template<class T> struct PpmPulsesData {
|
||||
T * ptr;
|
||||
};
|
||||
|
||||
#if defined(PPM_PIN_SERIAL)
|
||||
PACK(struct PxxSerialPulsesData {
|
||||
uint8_t pulses[64];
|
||||
uint8_t * ptr;
|
||||
uint16_t pcmValue;
|
||||
uint16_t pcmCrc;
|
||||
uint32_t pcmOnesCount;
|
||||
uint16_t serialByte;
|
||||
uint16_t serialBitCount;
|
||||
});
|
||||
#endif
|
||||
|
||||
#if defined(PPM_PIN_SERIAL)
|
||||
PACK(struct Dsm2SerialPulsesData {
|
||||
uint8_t pulses[64];
|
||||
@@ -74,15 +57,6 @@ PACK(struct Dsm2TimerPulsesData {
|
||||
});
|
||||
#endif
|
||||
|
||||
#if defined(INTMODULE_USART) || defined(EXTMODULE_USART) || defined(PXX2)
|
||||
PACK(struct PxxUartPulsesData {
|
||||
uint8_t pulses[64];
|
||||
uint8_t * ptr;
|
||||
uint16_t pcmCrc;
|
||||
uint16_t _alignment;
|
||||
});
|
||||
#endif
|
||||
|
||||
#define PPM_PERIOD_HALF_US(module) ((g_model.moduleData[module].ppm.frameLength * 5 + 225) * 200) /*half us*/
|
||||
#define PPM_PERIOD(module) (PPM_PERIOD_HALF_US(module) / 2000) /*ms*/
|
||||
#define DSM2_BAUDRATE 125000
|
||||
@@ -93,48 +67,22 @@ PACK(struct PxxUartPulsesData {
|
||||
#define MULTIMODULE_BAUDRATE 100000
|
||||
#define MULTIMODULE_PERIOD 7 /*ms*/
|
||||
|
||||
#if !defined(INTMODULE_USART) || !defined(EXTMODULE_USART)
|
||||
/* PXX uses 20 bytes (as of Rev 1.1 document) with 8 changes per byte + stop bit ~= 162 max pulses */
|
||||
/* DSM2 uses 2 header + 12 channel bytes, with max 10 changes (8n2) per byte + 16 bits trailer ~= 156 max pulses */
|
||||
/* Multimodule uses 3 bytes header + 22 channel bytes with max 11 changes per byte (8e2) + 16 bits trailer ~= 291 max pulses */
|
||||
/* Multimodule reuses some of the DSM2 function and structs since the protocols are similar enough */
|
||||
/* sbus is 1 byte header, 22 channel bytes (11bit * 16ch) + 1 byte flags */
|
||||
|
||||
#if defined(PXX_FREQUENCY_HIGH)
|
||||
#error "Pulses array needs to be increased (PXX_FREQUENCY=HIGH)"
|
||||
#endif
|
||||
|
||||
PACK(struct PxxTimerPulsesData {
|
||||
pulse_duration_t pulses[200];
|
||||
pulse_duration_t * ptr;
|
||||
uint16_t rest;
|
||||
uint16_t pcmCrc;
|
||||
uint32_t pcmOnesCount;
|
||||
});
|
||||
#endif
|
||||
|
||||
#if !defined(BOOT)
|
||||
#include "pulses/pxx2.h"
|
||||
#include "pulses/pxx1.h"
|
||||
#endif
|
||||
|
||||
#define CROSSFIRE_FRAME_MAXLEN 64
|
||||
PACK(struct CrossfirePulsesData {
|
||||
uint8_t pulses[CROSSFIRE_FRAME_MAXLEN];
|
||||
});
|
||||
|
||||
union ModulePulsesData {
|
||||
#if defined(INTMODULE_USART) || defined(EXTMODULE_USART) && !defined(BOOT)
|
||||
#if defined(INTMODULE_USART) || defined(EXTMODULE_USART)
|
||||
UartPxxPulses pxx_uart;
|
||||
#endif
|
||||
#if defined(BOOT)
|
||||
#elif defined(PPM_PIN_SERIAL)
|
||||
#if defined(PPM_PIN_SERIAL)
|
||||
SerialPxxPulses pxx;
|
||||
#elif !defined(INTMODULE_USART) || !defined(EXTMODULE_USART)
|
||||
PwmPxxPulses pxx;
|
||||
#endif
|
||||
|
||||
#if defined(PXX2) && !defined(BOOT)
|
||||
#if defined(PXX2)
|
||||
Pxx2Pulses pxx2;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -178,4 +178,6 @@ void PxxPulses<PxxTransport>::addExtraFlags(uint8_t port)
|
||||
}
|
||||
|
||||
template class PxxPulses<StandardPxxTransport<PwmPxxBitTransport> >;
|
||||
template class PxxPulses<StandardPxxTransport<SerialPxxBitTransport> >;
|
||||
template class PxxPulses<Pxx2Transport>;
|
||||
template class PxxPulses<UartPxxTransport>;
|
||||
|
||||
+17
-4
@@ -37,6 +37,17 @@
|
||||
#define PXX_PERIOD 9/*ms*/
|
||||
#endif
|
||||
|
||||
#if defined(PXX_FREQUENCY_HIGH) && (!defined(INTMODULE_USART) || !defined(EXTMODULE_USART))
|
||||
/* PXX uses 20 bytes (as of Rev 1.1 document) with 8 changes per byte + stop bit ~= 162 max pulses */
|
||||
/* DSM2 uses 2 header + 12 channel bytes, with max 10 changes (8n2) per byte + 16 bits trailer ~= 156 max pulses */
|
||||
/* Multimodule uses 3 bytes header + 22 channel bytes with max 11 changes per byte (8e2) + 16 bits trailer ~= 291 max pulses */
|
||||
/* Multimodule reuses some of the DSM2 function and structs since the protocols are similar enough */
|
||||
/* sbus is 1 byte header, 22 channel bytes (11bit * 16ch) + 1 byte flags */
|
||||
|
||||
#error "Pulses array needs to be increased (PXX_FREQUENCY=HIGH)"
|
||||
#endif
|
||||
|
||||
|
||||
#define PXX_PERIOD_HALF_US (PXX_PERIOD * 2000)
|
||||
|
||||
class PxxCrcMixin {
|
||||
@@ -60,7 +71,6 @@ class SerialPxxBitTransport: public DataBuffer<uint8_t, 64> {
|
||||
protected:
|
||||
uint8_t byte;
|
||||
uint8_t bits_count;
|
||||
uint8_t padding[2];
|
||||
|
||||
void initFrame()
|
||||
{
|
||||
@@ -102,7 +112,6 @@ class SerialPxxBitTransport: public DataBuffer<uint8_t, 64> {
|
||||
class PwmPxxBitTransport: public PulsesBuffer<pulse_duration_t, 200> {
|
||||
protected:
|
||||
uint16_t rest;
|
||||
uint8_t padding[2];
|
||||
|
||||
void initFrame()
|
||||
{
|
||||
@@ -125,10 +134,9 @@ class PwmPxxBitTransport: public PulsesBuffer<pulse_duration_t, 200> {
|
||||
};
|
||||
|
||||
template <class BitTransport>
|
||||
class StandardPxxTransport: public PxxCrcMixin, public BitTransport {
|
||||
class StandardPxxTransport: public BitTransport, public PxxCrcMixin {
|
||||
protected:
|
||||
uint8_t ones_count;
|
||||
uint8_t padding[3];
|
||||
|
||||
void initFrame()
|
||||
{
|
||||
@@ -174,6 +182,11 @@ class UartPxxTransport: public DataBuffer<uint8_t, 64>, public PxxCrcMixin {
|
||||
addWithByteStuffing(byte);
|
||||
}
|
||||
|
||||
void addByteWithoutCrc(uint8_t byte)
|
||||
{
|
||||
*ptr++ = byte;
|
||||
}
|
||||
|
||||
void addWithByteStuffing(uint8_t byte)
|
||||
{
|
||||
if (0x7E == byte) {
|
||||
|
||||
@@ -57,7 +57,7 @@ void Pxx1Pulses<PxxTransport>::add8ChannelsFrame(uint8_t port, uint8_t sendUpper
|
||||
template <class PxxTransport>
|
||||
void Pxx1Pulses<PxxTransport>::setupFrame(uint8_t port)
|
||||
{
|
||||
PxxPulses<PxxTransport>::initFrame();
|
||||
PxxTransport::initBuffer();
|
||||
|
||||
#if defined(PXX_FREQUENCY_HIGH)
|
||||
add8ChannelsFrame(port, 0);
|
||||
@@ -75,3 +75,5 @@ void Pxx1Pulses<PxxTransport>::setupFrame(uint8_t port)
|
||||
}
|
||||
|
||||
template class Pxx1Pulses<StandardPxxTransport<PwmPxxBitTransport> >;
|
||||
template class Pxx1Pulses<StandardPxxTransport<SerialPxxBitTransport> >;
|
||||
template class Pxx1Pulses<UartPxxTransport>;
|
||||
|
||||
@@ -47,7 +47,7 @@ class Pxx2Pulses: public PxxPulses<Pxx2Transport> {
|
||||
|
||||
void initFrame()
|
||||
{
|
||||
ptr = data;
|
||||
Pxx2Transport::initBuffer();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -125,11 +125,20 @@ set(FIRMWARE_SRC
|
||||
${COOS_DIR}/portable/GCC/port.c
|
||||
${COOS_DIR}/portable/arch.c
|
||||
)
|
||||
|
||||
set(PULSES_SRC
|
||||
${PULSES_SRC}
|
||||
pulses_arm.cpp
|
||||
ppm_arm.cpp
|
||||
pxx.cpp
|
||||
pxx1.cpp
|
||||
dsm2_arm.cpp
|
||||
sbus_arm.cpp
|
||||
)
|
||||
)
|
||||
|
||||
if(PXX2)
|
||||
set(PULSES_SRC
|
||||
${PULSES_SRC}
|
||||
pxx2.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -102,16 +102,3 @@ set(PULSES_SRC
|
||||
${PULSES_SRC}
|
||||
crossfire.cpp
|
||||
)
|
||||
|
||||
set(PULSES_SRC
|
||||
${PULSES_SRC}
|
||||
pxx1.cpp
|
||||
)
|
||||
|
||||
|
||||
if(PXX2)
|
||||
set(PULSES_SRC
|
||||
${PULSES_SRC}
|
||||
pxx2.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -130,8 +130,8 @@ void intmoduleSendNextFrame()
|
||||
DMA_InitStructure.DMA_Channel = INTMODULE_DMA_CHANNEL;
|
||||
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&INTMODULE_USART->DR);
|
||||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||||
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].pxx_uart.pulses);
|
||||
DMA_InitStructure.DMA_BufferSize = modulePulsesData[INTERNAL_MODULE].pxx_uart.ptr - modulePulsesData[INTERNAL_MODULE].pxx_uart.pulses;
|
||||
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(modulePulsesData[INTERNAL_MODULE].pxx_uart.getData());
|
||||
DMA_InitStructure.DMA_BufferSize = modulePulsesData[INTERNAL_MODULE].pxx_uart.getSize();
|
||||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||||
|
||||
@@ -197,6 +197,7 @@ void init_serial(uint32_t module_index, uint32_t baudrate, uint32_t period_half_
|
||||
void disable_serial(uint32_t module_index);
|
||||
void init_crossfire(uint32_t module_index);
|
||||
void disable_crossfire(uint32_t module_index);
|
||||
void disable_pxx2(uint32_t module_index);
|
||||
|
||||
// Trainer driver
|
||||
void init_trainer_ppm(void);
|
||||
|
||||
@@ -259,7 +259,7 @@ void extmoduleSendNextFrame()
|
||||
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||
}
|
||||
else if (s_current_protocol[EXTERNAL_MODULE] == PROTO_PXX) {
|
||||
EXTMODULE_TIMER->CCR2 = *(modulePulsesData[EXTERNAL_MODULE].pxx.ptr - 1) - 4000; // 2mS in advance
|
||||
EXTMODULE_TIMER->CCR2 = modulePulsesData[EXTERNAL_MODULE].pxx.getLast() - 4000; // 2mS in advance
|
||||
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
#if defined(PCBX10) || PCBREV >= 13
|
||||
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||
@@ -267,8 +267,8 @@ void extmoduleSendNextFrame()
|
||||
EXTMODULE_DMA_STREAM->CR |= EXTMODULE_DMA_CHANNEL | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PSIZE_1 | DMA_SxCR_MSIZE_1 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1;
|
||||
#endif
|
||||
EXTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
|
||||
EXTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx.pulses);
|
||||
EXTMODULE_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].pxx.ptr - modulePulsesData[EXTERNAL_MODULE].pxx.pulses;
|
||||
EXTMODULE_DMA_STREAM->M0AR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx.getData());
|
||||
EXTMODULE_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].pxx.getSize();
|
||||
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
|
||||
}
|
||||
else if (IS_DSM2_PROTOCOL(s_current_protocol[EXTERNAL_MODULE]) || IS_MULTIMODULE_PROTOCOL(s_current_protocol[EXTERNAL_MODULE]) || IS_SBUS_PROTOCOL(s_current_protocol[EXTERNAL_MODULE])) {
|
||||
|
||||
@@ -107,3 +107,11 @@ void disable_crossfire(uint32_t port)
|
||||
extmoduleStop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void disable_pxx2(uint32_t port)
|
||||
{
|
||||
if (port == EXTERNAL_MODULE) {
|
||||
extmoduleStop();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,8 +278,8 @@ extern "C" void PWM_IRQHandler(void)
|
||||
else {
|
||||
// Kick off serial output here
|
||||
Ssc * sscptr = SSC;
|
||||
sscptr->SSC_TPR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx.pulses);
|
||||
sscptr->SSC_TCR = (uint8_t *)modulePulsesData[EXTERNAL_MODULE].pxx.ptr - (uint8_t *)modulePulsesData[EXTERNAL_MODULE].pxx.pulses;
|
||||
sscptr->SSC_TPR = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx.getData());
|
||||
sscptr->SSC_TCR = modulePulsesData[EXTERNAL_MODULE].pxx.getSize();
|
||||
sscptr->SSC_PTCR = SSC_PTCR_TXTEN; // Start transfers
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -283,8 +283,8 @@ void extmoduleSendNextFrame()
|
||||
DMA_InitStructure.DMA_Channel = EXTMODULE_USART_DMA_CHANNEL;
|
||||
DMA_InitStructure.DMA_PeripheralBaseAddr = CONVERT_PTR_UINT(&EXTMODULE_USART->DR);
|
||||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||||
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx_uart.pulses);
|
||||
DMA_InitStructure.DMA_BufferSize = modulePulsesData[EXTERNAL_MODULE].pxx_uart.ptr - modulePulsesData[EXTERNAL_MODULE].pxx_uart.pulses;
|
||||
DMA_InitStructure.DMA_Memory0BaseAddr = CONVERT_PTR_UINT(modulePulsesData[EXTERNAL_MODULE].pxx_uart.getData());
|
||||
DMA_InitStructure.DMA_BufferSize = modulePulsesData[EXTERNAL_MODULE].pxx_uart.getSize();
|
||||
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
||||
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
||||
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
||||
|
||||
Reference in New Issue
Block a user