diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 27807b7d9..3fff37af0 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -337,10 +337,15 @@ void AudioQueue::pushBuffer(AudioBuffer *buffer) { buffer->state = AUDIO_BUFFER_FILLED; - if (dacQueue(buffer)) - buffer->state = AUDIO_BUFFER_PLAYING; + __disable_irq(); bufferWIdx = nextBufferIdx(bufferWIdx); + + if (dacQueue(buffer)) { + buffer->state = AUDIO_BUFFER_PLAYING; + } + + __enable_irq(); } void mix(uint16_t * result, int sample, unsigned int fade) diff --git a/radio/src/protocols/pulses_avr.cpp b/radio/src/protocols/pulses_avr.cpp index 1ed8d05fb..707eac8c9 100644 --- a/radio/src/protocols/pulses_avr.cpp +++ b/radio/src/protocols/pulses_avr.cpp @@ -108,7 +108,9 @@ ISR(TIMER1_COMPA_vect) //2MHz pulse generation (BLOCKING ISR) // Call setupPulses only after REST pulse had been sent. // Must do this before toggle PORTB to keep timing accurate if (IS_DSM2_SERIAL_PROTOCOL(s_current_protocol[0]) || *((uint16_t*)pulses2MHzRPtr) == 0) { - OCR1A = SETUP_PULSES_DURATION; + if (!IS_DSM2_SERIAL_PROTOCOL(s_current_protocol[0])) { + OCR1A = SETUP_PULSES_DURATION; + } setupPulses(); // does not sei() for setupPulsesPPM heartbeat |= HEART_TIMER_PULSES; return; diff --git a/radio/src/simpgmspace.h b/radio/src/simpgmspace.h index 1b2e8b0c2..cda058487 100644 --- a/radio/src/simpgmspace.h +++ b/radio/src/simpgmspace.h @@ -326,6 +326,7 @@ extern volatile uint32_t Tenms; extern uint32_t Master_frequency; #define NVIC_EnableIRQ(x) #define NVIC_DisableIRQ(x) +#define NVIC_SetPriority(...) #define __disable_irq() #define __enable_irq() #endif diff --git a/radio/src/targets/taranis/audio_driver.cpp b/radio/src/targets/taranis/audio_driver.cpp index f5cfd5eb5..d0b0508aa 100644 --- a/radio/src/targets/taranis/audio_driver.cpp +++ b/radio/src/targets/taranis/audio_driver.cpp @@ -88,7 +88,9 @@ void dacInit() DAC->CR = DAC_CR_TEN1 | DAC_CR_EN1 ; // Enable DAC NVIC_SetPriority(DMA1_Stream5_IRQn, 2) ; // High priority interrupt NVIC_EnableIRQ(TIM6_DAC_IRQn) ; // TODO needed? + NVIC_SetPriority(TIM6_DAC_IRQn, 7); NVIC_EnableIRQ(DMA1_Stream5_IRQn) ; + NVIC_SetPriority(DMA1_Stream5_IRQn, 7); } bool dacQueue(AudioBuffer *buffer) diff --git a/radio/src/targets/taranis/board_taranis.cpp b/radio/src/targets/taranis/board_taranis.cpp index 0777d8502..36987fab9 100644 --- a/radio/src/targets/taranis/board_taranis.cpp +++ b/radio/src/targets/taranis/board_taranis.cpp @@ -155,6 +155,7 @@ void init5msTimer() TIM14->CR1 = 5 ; TIM14->DIER |= 1 ; NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn) ; + NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 7); } void stop5msTimer( void ) diff --git a/radio/src/targets/taranis/pulses_driver.cpp b/radio/src/targets/taranis/pulses_driver.cpp index 50f5c2fcb..03dba6085 100644 --- a/radio/src/targets/taranis/pulses_driver.cpp +++ b/radio/src/targets/taranis/pulses_driver.cpp @@ -160,6 +160,7 @@ static void init_pa10_none() TIM1->DIER |= TIM_DIER_CC2IE ; // Enable this interrupt TIM1->CR1 |= TIM_CR1_CEN ; NVIC_EnableIRQ(TIM1_CC_IRQn) ; + NVIC_SetPriority(TIM1_CC_IRQn, 7); } static void disable_pa10_none() @@ -202,6 +203,7 @@ static void init_pa7_none() TIM8->DIER |= TIM_DIER_CC2IE ; // Enable this interrupt TIM8->CR1 |= TIM_CR1_CEN ; NVIC_EnableIRQ(TIM8_CC_IRQn) ; + NVIC_SetPriority(TIM8_CC_IRQn, 7); } static void disable_pa7_none() @@ -267,7 +269,8 @@ static void init_pa10_pxx() TIM1->SR &= ~TIM_SR_CC2IF ; // Clear flag TIM1->DIER |= TIM_DIER_CC2IE ; // Enable this interrupt TIM1->CR1 |= TIM_CR1_CEN ; - NVIC_EnableIRQ(TIM1_CC_IRQn) ; + NVIC_EnableIRQ(TIM1_CC_IRQn); + NVIC_SetPriority(TIM1_CC_IRQn, 7); } static void disable_pa10_pxx() @@ -316,7 +319,9 @@ static void init_pa10_ppm() TIM1->CR1 = TIM_CR1_CEN ; NVIC_EnableIRQ(TIM1_CC_IRQn) ; + NVIC_SetPriority(TIM1_CC_IRQn, 7); NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn) ; + NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 7); } static void disable_pa10_ppm() @@ -428,6 +433,7 @@ static void init_pa7_pxx() TIM8->DIER |= TIM_DIER_CC2IE ; // Enable this interrupt TIM8->CR1 |= TIM_CR1_CEN ; NVIC_EnableIRQ(TIM8_CC_IRQn) ; + NVIC_SetPriority(TIM8_CC_IRQn, 7); } static void disable_pa7_pxx() @@ -501,6 +507,7 @@ static void init_pa7_dsm2() TIM8->DIER |= TIM_DIER_CC2IE ; // Enable this interrupt TIM8->CR1 |= TIM_CR1_CEN ; NVIC_EnableIRQ(TIM8_CC_IRQn) ; + NVIC_SetPriority(TIM8_CC_IRQn, 7); } static void disable_pa7_dsm2() @@ -555,7 +562,9 @@ static void init_pa7_ppm() TIM8->CR1 = TIM_CR1_CEN ; NVIC_EnableIRQ(TIM8_CC_IRQn) ; + NVIC_SetPriority(TIM8_CC_IRQn, 7); NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn) ; + NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 7); } static void disable_pa7_ppm() diff --git a/radio/src/targets/taranis/sport_driver.cpp b/radio/src/targets/taranis/sport_driver.cpp index ed16f5641..414a01ed8 100644 --- a/radio/src/targets/taranis/sport_driver.cpp +++ b/radio/src/targets/taranis/sport_driver.cpp @@ -78,6 +78,7 @@ void sportInit(void) USART_ITConfig(SPORT, USART_IT_RXNE, ENABLE); NVIC_EnableIRQ(USART2_IRQn); + NVIC_SetPriority(USART2_IRQn, 6); } void sportPutc(const char c) diff --git a/radio/src/targets/taranis/trainer_driver.cpp b/radio/src/targets/taranis/trainer_driver.cpp index 1b8787540..9319cc18b 100644 --- a/radio/src/targets/taranis/trainer_driver.cpp +++ b/radio/src/targets/taranis/trainer_driver.cpp @@ -71,6 +71,7 @@ void init_trainer_ppm() TIM3->CR1 = TIM_CR1_CEN ; NVIC_EnableIRQ(TIM3_IRQn) ; + NVIC_SetPriority(TIM3_IRQn, 7); } // TODO - testing @@ -99,6 +100,7 @@ void init_trainer_capture() TIM3->DIER |= TIM_DIER_CC3IE ; TIM3->CR1 = TIM_CR1_CEN ; NVIC_EnableIRQ(TIM3_IRQn) ; + NVIC_SetPriority(TIM3_IRQn, 7); } void stop_trainer_capture() diff --git a/radio/src/targets/taranis/uart_driver.cpp b/radio/src/targets/taranis/uart_driver.cpp index b68042bb7..f084ae8fb 100644 --- a/radio/src/targets/taranis/uart_driver.cpp +++ b/radio/src/targets/taranis/uart_driver.cpp @@ -69,6 +69,7 @@ void uartInit(uint32_t baudrate) USART_ITConfig(UART3, USART_IT_TXE, DISABLE); NVIC_EnableIRQ(USART3_IRQn); + NVIC_SetPriority(USART3_IRQn, 8); } #if defined(DEBUG)