Fix interrupt handler not handling multiprotocol (Pulses fix) (#3570)

* Fix interrupt handler not handling multiprotocol

* Use proper Macros in driver, remove wrong comment about ppm
This commit is contained in:
Arne Schwabe
2016-06-07 07:31:35 +02:00
committed by Bertrand Songis
parent 36423db252
commit b6d4442ba1
4 changed files with 9 additions and 12 deletions
+1 -1
View File
@@ -65,7 +65,7 @@ void setupPulses(uint8_t port)
required_protocol = PROTO_PXX;
break;
#if defined(MULTIMODULE)
case MODULE_TYPE_MULTIMODULE:
case MODULE_TYPE_MULTIMODULE:
required_protocol = PROTO_MULTIMODULE;
break;
#endif
+6 -9
View File
@@ -74,14 +74,8 @@ PACK(struct PxxUartPulsesData {
/* 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 */
#if defined(MULTIMODULE)
#define NUM_TIMER_PULSES 300
#else
#define NUM_TIMER_PULSES 200
#endif
PACK(struct PxxTimerPulsesData {
pulse_duration_t pulses[NUM_TIMER_PULSES];
pulse_duration_t pulses[200];
pulse_duration_t * ptr;
uint16_t rest;
uint16_t pcmCrc;
@@ -89,12 +83,15 @@ PACK(struct PxxTimerPulsesData {
});
PACK(struct Dsm2TimerPulsesData {
pulse_duration_t pulses[NUM_TIMER_PULSES];
#if defined(MULTIMODULE)
pulse_duration_t pulses[300];
#else
pulse_duration_t pulses[200];
#endif
pulse_duration_t * ptr;
uint16_t rest;
uint8_t index;
});
#undef NUM_TIMER_PULSES
#endif
#define CROSSFIRE_BAUDRATE 400000
+1 -1
View File
@@ -235,7 +235,7 @@ void extmoduleSendNextFrame()
EXTMODULE_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].pxx.ptr - modulePulsesData[EXTERNAL_MODULE].pxx.pulses;
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
}
else if (s_current_protocol[EXTERNAL_MODULE] >= PROTO_DSM2_LP45 && s_current_protocol[EXTERNAL_MODULE] <= PROTO_DSM2_DSMX) {
else if (IS_DSM2_PROTOCOL(s_current_protocol[EXTERNAL_MODULE]) || IS_MULTIMODULE_PROTOCOL(s_current_protocol[EXTERNAL_MODULE])) {
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
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;
EXTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);
@@ -224,7 +224,7 @@ void extmoduleSendNextFrame()
EXTMODULE_DMA_STREAM->NDTR = modulePulsesData[EXTERNAL_MODULE].pxx.ptr - modulePulsesData[EXTERNAL_MODULE].pxx.pulses;
EXTMODULE_DMA_STREAM->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA
}
else if (s_current_protocol[EXTERNAL_MODULE] >= PROTO_DSM2_LP45 && s_current_protocol[EXTERNAL_MODULE] <= PROTO_DSM2_DSMX) {
else if (IS_DSM2_PROTOCOL(s_current_protocol[EXTERNAL_MODULE]) || IS_MULTIMODULE_PROTOCOL(s_current_protocol[EXTERNAL_MODULE])) {
EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA
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;
EXTMODULE_DMA_STREAM->PAR = CONVERT_PTR_UINT(&EXTMODULE_TIMER->ARR);