From 0a44682fd9ee538b0657be6460ed257f5be90adc Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 27 Jul 2021 12:04:16 +0200 Subject: [PATCH] [nv14] Fix mixer scheduler timer (clock missing) --- radio/src/targets/nv14/CMakeLists.txt | 1 - radio/src/targets/nv14/board.cpp | 10 +- radio/src/targets/nv14/extmodule_driver.cpp | 281 -------------------- radio/src/targets/nv14/hal.h | 10 +- 4 files changed, 13 insertions(+), 289 deletions(-) delete mode 100644 radio/src/targets/nv14/extmodule_driver.cpp diff --git a/radio/src/targets/nv14/CMakeLists.txt b/radio/src/targets/nv14/CMakeLists.txt index a605170b6..530e3e7b7 100644 --- a/radio/src/targets/nv14/CMakeLists.txt +++ b/radio/src/targets/nv14/CMakeLists.txt @@ -125,7 +125,6 @@ set(GVAR_SCREEN model_gvars.cpp) set(TARGET_SRC ${TARGET_SRC} -# extmodule_driver.cpp extmodule_helper.cpp ../horus/extmodule_driver.cpp trainer_driver.cpp diff --git a/radio/src/targets/nv14/board.cpp b/radio/src/targets/nv14/board.cpp index 627b175a2..63dd52b07 100644 --- a/radio/src/targets/nv14/board.cpp +++ b/radio/src/targets/nv14/board.cpp @@ -86,7 +86,8 @@ void delay_self(int count) FLYSKY_HALL_RCC_APB1Periph |\ EXTMODULE_RCC_APB1Periph |\ INTMODULE_RCC_APB1Periph |\ - AUX_SERIAL_RCC_APB1Periph \ + AUX_SERIAL_RCC_APB1Periph |\ + MIXER_SCHEDULER_TIMER_RCC_APB1Periph \ ) #define RCC_APB2PeriphMinimum (LCD_RCC_APB2Periph) @@ -113,8 +114,11 @@ void boardInit() __enable_irq(); #endif -#if defined(DEBUG) - auxSerialInit(0, 0); // default serial mode (None if DEBUG not defined) +#if defined(DEBUG) && defined(AUX_SERIAL) + auxSerialInit(UART_MODE_DEBUG, 0); // default serial mode (None if DEBUG not defined) +#endif +#if defined(DEBUG) && defined(AUX2_SERIAL) + aux2SerialInit(UART_MODE_DEBUG, 0); // default serial mode (None if DEBUG not defined) #endif TRACE("\nNV14 board started :)"); diff --git a/radio/src/targets/nv14/extmodule_driver.cpp b/radio/src/targets/nv14/extmodule_driver.cpp deleted file mode 100644 index 489f105f4..000000000 --- a/radio/src/targets/nv14/extmodule_driver.cpp +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright (C) OpenTX - * - * Based on code named - * th9x - http://code.google.com/p/th9x - * er9x - http://code.google.com/p/er9x - * gruvin9x - http://code.google.com/p/gruvin9x - * - * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include "opentx.h" -//fix it -#if defined(EXTMODULE_USART) -ModuleFifo extmoduleFifo; -#endif -bool stopOnTxDone = false; - -void extmoduleSendNextFrame(); - -void EXTERNAL_MODULE_ON() -{ - GPIO_SetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN); - GPIO_ResetBits(EXTMODULE_PWR_FIX_GPIO, EXTMODULE_PWR_FIX_GPIO_PIN); -} -void EXTERNAL_MODULE_OFF() -{ - GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN); - GPIO_SetBits(EXTMODULE_PWR_FIX_GPIO, EXTMODULE_PWR_FIX_GPIO_PIN); -} -void extModuleInit() -{ - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PWR_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; - GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN); - GPIO_Init(EXTMODULE_PWR_GPIO, &GPIO_InitStructure); - - //for additional transistor to ensuring module is completely disabled - GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; - //pin must be pulled to V+ (voltage of board - VCC is not enough to fully close transistor) - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_PWR_FIX_GPIO_PIN; - GPIO_SetBits(EXTMODULE_PWR_FIX_GPIO, EXTMODULE_PWR_FIX_GPIO_PIN); - GPIO_Init(EXTMODULE_PWR_FIX_GPIO, &GPIO_InitStructure); - - GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_INVERT_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_Init(EXTMODULE_TX_INVERT_GPIO, &GPIO_InitStructure); - - GPIO_SetBits(EXTMODULE_TX_INVERT_GPIO, EXTMODULE_TX_INVERT_GPIO_PIN); -} - -void extmoduleStop() -{ - EXTERNAL_MODULE_OFF(); - - NVIC_DisableIRQ(EXTMODULE_DMA_IRQn); - NVIC_DisableIRQ(EXTMODULE_TIMER_IRQn); - - EXTMODULE_DMA_STREAM->CR &= ~DMA_SxCR_EN; // Disable DMA - EXTMODULE_TIMER->DIER &= ~(TIM_DIER_CC2IE | TIM_DIER_UDE); - EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; -} - -void extmoduleNoneStart() -{ - EXTERNAL_MODULE_OFF(); - - GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, 0); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); - GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high - - EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; - EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) - EXTMODULE_TIMER->ARR = 36000; // 18mS - EXTMODULE_TIMER->CCR2 = 32000; // Update time - EXTMODULE_TIMER->EGR = 1; // Restart - EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; - EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt - EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN; - - NVIC_EnableIRQ(EXTMODULE_TIMER_IRQn); - NVIC_SetPriority(EXTMODULE_TIMER_IRQn, 7); -} - -void extmodulePpmStart() -{ - EXTERNAL_MODULE_ON(); - - GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_TX_GPIO_AF); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); - - // PPM generation principle: - // - // Hardware timer in PWM mode is used for PPM generation - // Output is OFF if CNTCR1 &= ~TIM_CR1_CEN; // Stop timer - EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) - EXTMODULE_TIMER->ARR = 45000; - - EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // PWM mode 1 - EXTMODULE_TIMER->BDTR = TIM_BDTR_MOE; - EXTMODULE_TIMER->EGR = 1; // Reloads register values now - EXTMODULE_TIMER->DIER = TIM_DIER_UDE; // Update DMA request - EXTMODULE_TIMER->CR1 = TIM_CR1_CEN; // Start timer - - - extmoduleSendNextFrame(); - - NVIC_EnableIRQ(EXTMODULE_DMA_IRQn); - NVIC_SetPriority(EXTMODULE_DMA_IRQn, 7); - NVIC_EnableIRQ(EXTMODULE_TIMER_IRQn); - NVIC_SetPriority(EXTMODULE_TIMER_IRQn, 7); -} - -void extmoduleSerialStart() -{ - -} - -void extmodulePxxStart() -{ - - EXTERNAL_MODULE_ON(); - - GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_TX_GPIO_AF); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); - - EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; - EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) - EXTMODULE_TIMER->ARR = 18000; - - - EXTMODULE_TIMER->CCER = TIM_CCER_CC1E | TIM_CCER_CC1NE; - EXTMODULE_TIMER->BDTR = TIM_BDTR_MOE; // Enable outputs - EXTMODULE_TIMER->CCR1 = 18; - EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0; // Force O/P high - EXTMODULE_TIMER->EGR = 1; // Restart - EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update - EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; - EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN; - - extmoduleSendNextFrame(); - - NVIC_EnableIRQ(EXTMODULE_DMA_IRQn); - NVIC_SetPriority(EXTMODULE_DMA_IRQn, 7); - NVIC_EnableIRQ(EXTMODULE_TIMER_IRQn); - NVIC_SetPriority(EXTMODULE_TIMER_IRQn, 7); -} - -#if defined(DSM2) -void extmoduleDsm2Start() -{ - EXTERNAL_MODULE_ON(); - - GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, EXTMODULE_TX_GPIO_AF); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); - - EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; - EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) - EXTMODULE_TIMER->ARR = 44000; // 22mS - - EXTMODULE_TIMER->CCER = TIM_CCER_CC1E | TIM_CCER_CC1P; - EXTMODULE_TIMER->BDTR = TIM_BDTR_MOE; // Enable outputs - EXTMODULE_TIMER->CCR1 = 0; - EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0; // Force O/P high - EXTMODULE_TIMER->EGR = 1; // Restart - EXTMODULE_TIMER->DIER |= TIM_DIER_UDE; // Enable DMA on update - EXTMODULE_TIMER->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0; - EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN; - - extmoduleSendNextFrame(); - - NVIC_EnableIRQ(EXTMODULE_DMA_IRQn); - NVIC_SetPriority(EXTMODULE_DMA_IRQn, 7); - NVIC_EnableIRQ(EXTMODULE_TIMER_IRQn); - NVIC_SetPriority(EXTMODULE_TIMER_IRQn, 7); -} -#endif - -void extmoduleCrossfireStart() -{ - EXTERNAL_MODULE_ON(); - - GPIO_PinAFConfig(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PinSource, 0); - - GPIO_InitTypeDef GPIO_InitStructure; - GPIO_InitStructure.GPIO_Pin = EXTMODULE_TX_GPIO_PIN; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(EXTMODULE_TX_GPIO, &GPIO_InitStructure); - GPIO_SetBits(EXTMODULE_TX_GPIO, EXTMODULE_TX_GPIO_PIN); // Set high - - EXTMODULE_TIMER->CR1 &= ~TIM_CR1_CEN; - EXTMODULE_TIMER->PSC = EXTMODULE_TIMER_FREQ / 2000000 - 1; // 0.5uS (2Mhz) - EXTMODULE_TIMER->ARR = (2000 * CROSSFIRE_PERIOD); - EXTMODULE_TIMER->CCR2 = (2000 * CROSSFIRE_PERIOD) - 1000; - EXTMODULE_TIMER->EGR = 1; // Restart - EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; - EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt - EXTMODULE_TIMER->CR1 |= TIM_CR1_CEN; - - NVIC_EnableIRQ(EXTMODULE_TIMER_IRQn); - NVIC_SetPriority(EXTMODULE_TIMER_IRQn, 7); -} - -void extmoduleSendNextFrame() -{ - // TODO -} - - -extern "C" void EXTMODULE_DMA_IRQHandler() -{ - if (!DMA_GetITStatus(EXTMODULE_DMA_STREAM, EXTMODULE_DMA_FLAG_TC)) - return; - - DMA_ClearITPendingBit(EXTMODULE_DMA_STREAM, EXTMODULE_DMA_FLAG_TC); - - EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; // Clear flag - EXTMODULE_TIMER->DIER |= TIM_DIER_CC2IE; // Enable this interrupt -} - -extern "C" void EXTMODULE_TIMER_IRQHandler() -{ - EXTMODULE_TIMER->DIER &= ~TIM_DIER_CC2IE; // Stop this interrupt - EXTMODULE_TIMER->SR &= ~TIM_SR_CC2IF; - setupPulsesExternalModule(); - extmoduleSendNextFrame(); -} diff --git a/radio/src/targets/nv14/hal.h b/radio/src/targets/nv14/hal.h index 4d8f6f1b6..aefa2b476 100644 --- a/radio/src/targets/nv14/hal.h +++ b/radio/src/targets/nv14/hal.h @@ -445,18 +445,19 @@ #define EXTERNAL_MODULE_PWR_OFF() GPIO_ResetBits(EXTMODULE_PWR_GPIO, EXTMODULE_PWR_GPIO_PIN) #define EXTMODULE_PWR_FIX_GPIO GPIOA #define EXTMODULE_PWR_FIX_GPIO_PIN GPIO_Pin_2 // PA.02 -#define EXTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOI | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_DMA2) -#define EXTMODULE_RCC_APB1Periph 0 +#define EXTMODULE_RCC_AHB1Periph \ + (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOC | \ + RCC_AHB1Periph_GPIOI | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_DMA2) +#define EXTMODULE_RCC_APB1Periph 0 #define EXTMODULE_RCC_APB2Periph (RCC_APB2Periph_TIM8 | RCC_APB2Periph_USART6) #define EXTMODULE_TX_GPIO GPIOC #define EXTMODULE_TX_GPIO_PIN GPIO_Pin_6 // PC.06 #define EXTMODULE_TX_GPIO_PinSource GPIO_PinSource6 -#define EXTMODULE_TX_GPIO_AF GPIO_AF_TIM8 +#define EXTMODULE_TX_GPIO_AF GPIO_AF_TIM8 // TIM8_CH1 #define EXTMODULE_TX_GPIO_AF_USART GPIO_AF_USART6 #define EXTMODULE_RX_GPIO GPIOC #define EXTMODULE_RX_GPIO_PIN GPIO_Pin_7 // PC.07 #define EXTMODULE_RX_GPIO_PinSource GPIO_PinSource7 -#define EXTMODULE_USART USART6 #define EXTMODULE_RX_GPIO_AF_USART GPIO_AF_USART6 #define EXTMODULE_TIMER TIM8 #define EXTMODULE_TIMER_IRQn TIM8_CC_IRQn @@ -465,6 +466,7 @@ #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) #define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF_TIM8 //USART +#define EXTMODULE_USART USART6 #define EXTMODULE_USART_GPIO GPIOC #define EXTMODULE_USART_GPIO_AF GPIO_AF_USART6