[Horus] S.PORT to Lua passthrough (#3810)

* [Horus] S.PORT to Lua passthrough

* Fixes. Still not tested

* Do not speak when we have nothing to say

* Move outputTelemetryBufferSize check earlier
This commit is contained in:
Bertrand Songis
2016-10-08 09:40:31 +02:00
committed by GitHub
parent 7509146a8f
commit 8c1231869e
3 changed files with 34 additions and 22 deletions
+5
View File
@@ -43,6 +43,11 @@ class DMAFifo
return N;
}
uint8_t last(int index)
{
return fifo[(2*N - stream->NDTR - index) & (N-1)];
}
bool isEmpty()
{
#if defined(SIMU)
+24 -17
View File
@@ -51,33 +51,31 @@ void init2MhzTimer()
// Starts TIMER at 1000Hz
void init1msTimer()
{
INTERRUPT_5MS_TIMER->ARR = 999; // 1mS
INTERRUPT_5MS_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 1000000 - 1; // 1uS from 30MHz
INTERRUPT_5MS_TIMER->CCER = 0;
INTERRUPT_5MS_TIMER->CCMR1 = 0;
INTERRUPT_5MS_TIMER->EGR = 0;
INTERRUPT_5MS_TIMER->CR1 = 5;
INTERRUPT_5MS_TIMER->DIER |= 1;
NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn);
NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 7);
INTERRUPT_1MS_TIMER->ARR = 999; // 1mS
INTERRUPT_1MS_TIMER->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 1000000 - 1; // 1uS from 30MHz
INTERRUPT_1MS_TIMER->CCER = 0;
INTERRUPT_1MS_TIMER->CCMR1 = 0;
INTERRUPT_1MS_TIMER->EGR = 0;
INTERRUPT_1MS_TIMER->CR1 = 5;
INTERRUPT_1MS_TIMER->DIER |= 1;
NVIC_EnableIRQ(INTERRUPT_1MS_IRQn);
NVIC_SetPriority(INTERRUPT_1MS_IRQn, 7);
}
// TODO use the same than board_sky9x.cpp
void interrupt1ms()
{
static uint32_t pre_scale; // Used to get 10 Hz counter
static uint8_t pre_scale; // Used to get 10 Hz counter
++pre_scale;
if (pre_scale == 5 || pre_scale == 10) {
#if defined(HAPTIC)
if (pre_scale == 5 || pre_scale == 10) {
DEBUG_TIMER_START(debugTimerHaptic);
HAPTIC_HEARTBEAT();
DEBUG_TIMER_STOP(debugTimerHaptic);
#endif
}
#endif
if (pre_scale == 10) {
pre_scale = 0;
@@ -89,11 +87,20 @@ void interrupt1ms()
DEBUG_TIMER_START(debugTimerRotEnc);
checkRotaryEncoder();
DEBUG_TIMER_STOP(debugTimerRotEnc);
#if defined(LUA)
if (telemetryProtocol == PROTOCOL_FRSKY_SPORT && outputTelemetryBufferTrigger && outputTelemetryBufferSize > 0) {
if (telemetryFifo.last(-2) == 0x7E && telemetryFifo.last(-1) == outputTelemetryBufferTrigger) {
outputTelemetryBufferTrigger = 0;
sportSendBuffer(outputTelemetryBuffer, outputTelemetryBufferSize);
}
}
#endif
}
extern "C" void TIM8_TRG_COM_TIM14_IRQHandler()
extern "C" void INTERRUPT_1MS_IRQHandler()
{
TIM14->SR &= ~TIM_SR_UIF;
INTERRUPT_1MS_TIMER->SR &= ~TIM_SR_UIF;
interrupt1ms();
DEBUG_INTERRUPT(INT_1MS);
}
@@ -120,7 +127,7 @@ void boardInit()
GPS_RCC_AHB1Periph,
ENABLE);
RCC_APB1PeriphClockCmd(INTERRUPT_5MS_RCC_APB1Periph |
RCC_APB1PeriphClockCmd(INTERRUPT_1MS_RCC_APB1Periph |
TIMER_2MHz_RCC_APB1Periph |
AUDIO_RCC_APB1Periph |
SERIAL_RCC_APB1Periph |
+5 -5
View File
@@ -399,11 +399,11 @@
#define TRAINER_DMA_FLAG_TC DMA_IT_TCIF2
#define TRAINER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1)
// 5ms Interrupt
#define INTERRUPT_5MS_RCC_APB1Periph RCC_APB1Periph_TIM14
#define INTERRUPT_5MS_TIMER TIM14
#define INTERRUPT_5MS_IRQn TIM8_TRG_COM_TIM14_IRQn
#define INTERRUPT_5MS_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler
// 1ms Interrupt
#define INTERRUPT_1MS_RCC_APB1Periph RCC_APB1Periph_TIM14
#define INTERRUPT_1MS_TIMER TIM14
#define INTERRUPT_1MS_IRQn TIM8_TRG_COM_TIM14_IRQn
#define INTERRUPT_1MS_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler
// 2MHz Timer
#define TIMER_2MHz_RCC_APB1Periph RCC_APB1Periph_TIM7