Configurable baudrate on external module for tests

This commit is contained in:
Bertrand Songis
2019-03-25 09:31:09 +01:00
parent 1016f042f9
commit 5d8ed05f29
2 changed files with 32 additions and 1 deletions
+11
View File
@@ -122,6 +122,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_EXTERNAL_MODULE_STATUS,
ITEM_MODEL_EXTERNAL_MODULE_SYNCSTATUS,
#endif
ITEM_MODEL_EXTERNAL_MODULE_BAUDRATE, // TODO remove this when we have adaptative speed
ITEM_MODEL_EXTERNAL_MODULE_CHANNELS,
ITEM_MODEL_EXTERNAL_MODULE_NPXX2_BIND,
ITEM_MODEL_EXTERNAL_MODULE_PXX2_MODEL_NUM,
@@ -482,6 +483,7 @@ void menuModelSetup(event_t event)
EXTERNAL_MODULE_MODE_ROWS,
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE)
MULTIMODULE_STATUS_ROWS
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // TODO remove this when we have adaptative speed
EXTERNAL_MODULE_CHANNELS_ROWS,
IF_NOT_PXX2_MODULE(EXTERNAL_MODULE, EXTERNAL_MODULE_BIND_ROWS()), // line reused for PPM: PPM settings
IF_PXX2_MODULE(EXTERNAL_MODULE, 0), // RxNum
@@ -1164,6 +1166,15 @@ void menuModelSetup(event_t event)
break;
#endif
case ITEM_MODEL_EXTERNAL_MODULE_BAUDRATE:
extern uint32_t externalModuleBaudrate;
lcdDrawTextAlignedLeft(y, INDENT "Baudrate");
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, externalModuleBaudrate, attr | LEFT);
if (attr) {
externalModuleBaudrate = checkIncDec(event, externalModuleBaudrate / 200, 576, 2100) * 200;
}
break;
#if defined(PCBTARANIS)
case ITEM_MODEL_INTERNAL_MODULE_CHANNELS:
#endif
+21 -1
View File
@@ -154,8 +154,17 @@ void extmoduleInvertedSerialStart(uint32_t baudrate)
NVIC_EnableIRQ(EXTMODULE_USART_IRQn);
}
// TODO remove this when we have adaptative speed
uint32_t externalModuleBaudrate = 230400;
uint32_t currentExternalModuleBaudrate = 230400;
void extmoduleSendBuffer(const uint8_t * data, uint8_t size)
{
// TODO remove this when we have adaptative speed
if (externalModuleBaudrate != currentExternalModuleBaudrate) {
extmodulePxx2Start();
}
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(EXTMODULE_USART_DMA_STREAM);
DMA_InitStructure.DMA_Channel = EXTMODULE_USART_DMA_CHANNEL;
@@ -178,6 +187,10 @@ void extmoduleSendBuffer(const uint8_t * data, uint8_t size)
USART_DMACmd(EXTMODULE_USART, USART_DMAReq_Tx, ENABLE);
}
// TODO remove this when we have adaptative speed
uint8_t counter = 0;
#include <stdio.h>
#define USART_FLAG_ERRORS (USART_FLAG_ORE | USART_FLAG_NE | USART_FLAG_FE | USART_FLAG_PE)
extern "C" void EXTMODULE_USART_IRQHandler(void)
{
@@ -187,6 +200,9 @@ extern "C" void EXTMODULE_USART_IRQHandler(void)
uint8_t data = EXTMODULE_USART->DR;
if (status & USART_FLAG_ERRORS) {
extmoduleFifo.errors++;
if (!counter++) {
TRACE_NOCRLF("%02X ", (uint8_t)status);
}
}
else {
extmoduleFifo.push(data);
@@ -197,7 +213,11 @@ extern "C" void EXTMODULE_USART_IRQHandler(void)
void extmodulePxx2Start()
{
extmoduleInvertedSerialStart(EXTMODULE_USART_PXX2_BAUDRATE);
// TODO remove this when we have adaptative speed
currentExternalModuleBaudrate = externalModuleBaudrate;
extmoduleInvertedSerialStart(externalModuleBaudrate);
// extmoduleInvertedSerialStart(EXTMODULE_USART_PXX2_BAUDRATE);
}
#else
void extmodulePxx2Start()