feat: support for HelloRadioSky V16 (#5317)
Co-authored-by: Peter Feerick <pfeerick@users.noreply.github.com>
This commit is contained in:
co-authored by
Peter Feerick
parent
4426f56cb9
commit
17bf9dc813
+1
-1
@@ -368,7 +368,7 @@ void audioTask(void * pdata)
|
||||
|
||||
setSampleRate(AUDIO_SAMPLE_RATE);
|
||||
|
||||
#if defined(PCBX12S) || defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#if defined(PCBX12S) || defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
|
||||
// The audio amp needs ~2s to start
|
||||
RTOS_WAIT_MS(1000); // 1s
|
||||
#endif
|
||||
|
||||
@@ -43,7 +43,11 @@ static StaticTimer_t rgbLedTimerBuffer;
|
||||
|
||||
void rgbSetLedColor(uint8_t led, uint8_t r, uint8_t g, uint8_t b)
|
||||
{
|
||||
#if defined(SIXPOS_SWITCH_INDEX)
|
||||
ws2812_set_color(led + 6, r, g, b);
|
||||
#else
|
||||
ws2812_set_color(led, r, g, b);
|
||||
#endif
|
||||
}
|
||||
|
||||
void rgbLedColorApply()
|
||||
|
||||
@@ -65,6 +65,10 @@
|
||||
#include "telemetry/crossfire.h"
|
||||
#endif
|
||||
|
||||
#if defined(CSD203_SENSOR)
|
||||
#include "csd203_sensor.h"
|
||||
#endif
|
||||
|
||||
#if !defined(SIMU)
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
@@ -209,6 +213,10 @@ void timer_10ms()
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CSD203_SENSOR) && !defined(SIMU)
|
||||
readCSD203();
|
||||
#endif
|
||||
|
||||
telemetryInterrupt10ms();
|
||||
|
||||
// These moved here from evalFlightModeMixes() to improve beep trigger reliability.
|
||||
|
||||
@@ -29,6 +29,10 @@ const etx_hal_adc_inputs_t* _hal_adc_inputs = nullptr;
|
||||
|
||||
static uint16_t adcValues[MAX_ANALOG_INPUTS] __DMA;
|
||||
|
||||
#if defined(CSD203_SENSOR)
|
||||
extern uint16_t getCSD203BatteryVoltage(void);
|
||||
#endif
|
||||
|
||||
bool adcInit(const etx_hal_adc_driver_t* driver)
|
||||
{
|
||||
// If there is an init function, it MUST succeed
|
||||
@@ -243,6 +247,11 @@ uint16_t getRTCBatteryVoltage()
|
||||
uint16_t getAnalogValue(uint8_t index)
|
||||
{
|
||||
if (index >= MAX_ANALOG_INPUTS) return 0;
|
||||
#if defined(SIXPOS_SWITCH_INDEX) && !defined(SIMU)
|
||||
if (index == SIXPOS_SWITCH_INDEX)
|
||||
return getSixPosAnalogValue(adcValues[index]);
|
||||
else
|
||||
#endif
|
||||
return adcValues[index];
|
||||
}
|
||||
|
||||
@@ -297,6 +306,9 @@ tmr10ms_t jitterResetTime = 0;
|
||||
|
||||
uint16_t getBatteryVoltage()
|
||||
{
|
||||
#if defined(CSD203_SENSOR) && !defined(SIMU)
|
||||
return getCSD203BatteryVoltage() / 10;
|
||||
#else
|
||||
// using filtered ADC value on purpose
|
||||
if (adcGetMaxInputs(ADC_INPUT_VBAT) < 1) return 0;
|
||||
int32_t instant_vbat = anaIn(adcGetInputOffset(ADC_INPUT_VBAT));
|
||||
@@ -321,6 +333,7 @@ uint16_t getBatteryVoltage()
|
||||
return (uint16_t)((instant_vbat * (1000 + g_eeGeneral.txVoltageCalibration)) /
|
||||
BATTERY_DIVIDER);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint32_t apply_low_pass_filter(uint32_t v, uint32_t v_prev,
|
||||
|
||||
@@ -3213,7 +3213,11 @@ LROT_BEGIN(etxcst, NULL, 0)
|
||||
LROT_NUMENTRY( PLAY_BACKGROUND, PLAY_BACKGROUND )
|
||||
LROT_NUMENTRY( TIMEHOUR, TIMEHOUR )
|
||||
#if defined(LED_STRIP_GPIO)
|
||||
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH )
|
||||
#if defined(RADIO_V16)
|
||||
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH - 6)
|
||||
#else
|
||||
LROT_NUMENTRY( LED_STRIP_LENGTH, LED_STRIP_LENGTH )
|
||||
#endif
|
||||
#endif
|
||||
LROT_NUMENTRY( UNIT_RAW, UNIT_RAW )
|
||||
LROT_NUMENTRY( UNIT_VOLTS, UNIT_VOLTS )
|
||||
|
||||
@@ -82,22 +82,23 @@ static void _led_dbg_init() {
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(STM32_SUPPORT_32BIT_TIMERS)
|
||||
typedef uint32_t led_timer_value_t;
|
||||
#else
|
||||
typedef uint16_t led_timer_value_t;
|
||||
#endif
|
||||
uint8_t pulse_inc = 1;
|
||||
|
||||
// DMA buffer contains pulses for 2 LED at a time
|
||||
// (allows for refill at HT and TC)
|
||||
#if defined(STM32_SUPPORT_32BIT_TIMERS)
|
||||
static led_timer_value_t _led_dma_buffer[WS2821_DMA_BUFFER_LEN * 2] __DMA;
|
||||
#else
|
||||
static led_timer_value_t _led_dma_buffer[WS2821_DMA_BUFFER_LEN] __DMA;
|
||||
#endif
|
||||
|
||||
static uint8_t _led_seq_cnt;
|
||||
|
||||
static void _fill_byte(uint8_t c, led_timer_value_t* dma_buffer)
|
||||
{
|
||||
for (int i = 0; i < 8; i++) {
|
||||
dma_buffer[i] = c & 0x80 ? WS2812_ONE : WS2812_ZERO;
|
||||
dma_buffer[i*pulse_inc] = c & 0x80 ? WS2812_ONE : WS2812_ZERO;
|
||||
c <<= 1;
|
||||
}
|
||||
}
|
||||
@@ -106,14 +107,14 @@ static void _fill_pulses(const uint8_t* colors, led_timer_value_t* dma_buffer, u
|
||||
{
|
||||
for (uint32_t i = 0; i < len; i++) {
|
||||
_fill_byte(*colors, dma_buffer);
|
||||
dma_buffer += 8;
|
||||
dma_buffer += 8 * pulse_inc;
|
||||
colors++;
|
||||
}
|
||||
}
|
||||
|
||||
static inline uint32_t _calc_offset(uint8_t tc)
|
||||
{
|
||||
return tc * WS2821_DMA_BUFFER_HALF_LEN;
|
||||
return tc * WS2821_DMA_BUFFER_HALF_LEN * pulse_inc;
|
||||
}
|
||||
|
||||
static void _update_dma_buffer(const stm32_pulse_timer_t* tim, uint8_t tc)
|
||||
@@ -131,7 +132,7 @@ static void _update_dma_buffer(const stm32_pulse_timer_t* tim, uint8_t tc)
|
||||
// no need to reset the buffer after 2 cycles
|
||||
if (_led_seq_cnt < _led_strip_len + 2) {
|
||||
auto offset = _calc_offset(tc);
|
||||
auto size = WS2821_DMA_BUFFER_HALF_LEN * sizeof(led_timer_value_t);
|
||||
auto size = WS2821_DMA_BUFFER_HALF_LEN * sizeof(led_timer_value_t) * pulse_inc;
|
||||
memset(&_led_dma_buffer[offset], 0, size);
|
||||
}
|
||||
_led_seq_cnt++;
|
||||
@@ -191,7 +192,7 @@ static void _init_timer(const stm32_pulse_timer_t* tim)
|
||||
_led_set_dma_periph_addr(tim);
|
||||
|
||||
LL_DMA_SetMode(tim->DMAx, tim->DMA_Stream, LL_DMA_MODE_CIRCULAR);
|
||||
LL_DMA_SetDataLength(tim->DMAx, tim->DMA_Stream, WS2821_DMA_BUFFER_LEN);
|
||||
LL_DMA_SetDataLength(tim->DMAx, tim->DMA_Stream, WS2821_DMA_BUFFER_LEN * pulse_inc);
|
||||
LL_DMA_SetMemoryAddress(tim->DMAx, tim->DMA_Stream, (uint32_t)_led_dma_buffer);
|
||||
|
||||
// we need to use a higher prio to avoid having
|
||||
@@ -202,6 +203,7 @@ static void _init_timer(const stm32_pulse_timer_t* tim)
|
||||
void ws2812_init(const stm32_pulse_timer_t* timer, uint8_t strip_len, uint8_t type)
|
||||
{
|
||||
WS2812_DBG_INIT;
|
||||
pulse_inc = IS_TIM_32B_COUNTER_INSTANCE(timer->TIMx) ? 2 : 1;
|
||||
|
||||
memset(_led_colors, 0, sizeof(_led_colors));
|
||||
memset(_led_dma_buffer, 0, sizeof(_led_dma_buffer));
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
// Maximum number of supported LEDs
|
||||
#if !defined(WS2812_MAX_LEDS)
|
||||
# define WS2812_MAX_LEDS 8
|
||||
# define WS2812_MAX_LEDS 48
|
||||
#endif
|
||||
|
||||
// Number of LED periods used for trailing reset
|
||||
|
||||
@@ -117,11 +117,25 @@ if (PCB STREQUAL X10)
|
||||
set(DEFAULT_INTERNAL_MODULE MULTIMODULE CACHE STRING "Default internal module")
|
||||
option(BLUETOOTH "Support for bluetooth module" OFF)
|
||||
option(INTERNAL_GPS "Support for internal NMEA GPS" OFF)
|
||||
set(DEFAULT_THEME "DARKBLUE")
|
||||
add_definitions(-DMANUFACTURER_FATFISH)
|
||||
set(INTERNAL_GPS_BAUDRATE "9600" CACHE STRING "Baud rate for internal GPS")
|
||||
set(FLEXSW "2" CACHE STRING "Max flex inputs usable as switches")
|
||||
set(VIDEO_SWITCH ON)
|
||||
elseif (PCBREV STREQUAL V16)
|
||||
set(FLAVOUR v16)
|
||||
add_definitions(-DRADIO_V16)
|
||||
add_definitions(-DRADIO_FAMILY_T16)
|
||||
set(DEFAULT_INTERNAL_MODULE CROSSFIRE CACHE STRING "Default internal module")
|
||||
option(BLUETOOTH "Support for bluetooth module" OFF)
|
||||
option(INTERNAL_GPS "Support for internal NMEA GPS" OFF)
|
||||
add_definitions(-DMANUFACTURER_HELLORADIOSKY)
|
||||
set(INTERNAL_GPS_BAUDRATE "9600" CACHE STRING "Baud rate for internal GPS")
|
||||
set(FLEXSW "2" CACHE STRING "Max flex inputs usable as switches")
|
||||
set(AUX2_SERIAL OFF)
|
||||
set(HAS_CSD203_SENSOR ON)
|
||||
if (BLUETOOTH)
|
||||
set(AUX_SERIAL OFF)
|
||||
endif()
|
||||
elseif (PCBREV STREQUAL T18)
|
||||
set(FLAVOUR t18)
|
||||
add_definitions(-DRADIO_T18)
|
||||
@@ -331,6 +345,10 @@ if(USB_CHARGER)
|
||||
target_sources(board PRIVATE ${TARGET_SRC_DIR}/usb_charger_driver.cpp)
|
||||
endif()
|
||||
|
||||
if(HAS_CSD203_SENSOR)
|
||||
set(FIRMWARE_TARGET_SRC ${FIRMWARE_TARGET_SRC} csd203_sensor.cpp)
|
||||
add_definitions(-DCSD203_SENSOR)
|
||||
endif()
|
||||
set(FIRMWARE_SRC
|
||||
${FIRMWARE_SRC}
|
||||
targets/common/arm/loadboot.cpp
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "stm32_hal.h"
|
||||
#include "stm32_hal_ll.h"
|
||||
#include "stm32_gpio.h"
|
||||
#include "stm32_ws2812.h"
|
||||
|
||||
#include "hal/adc_driver.h"
|
||||
#include "hal/trainer_driver.h"
|
||||
@@ -34,6 +35,7 @@
|
||||
#include "boards/generic_stm32/module_ports.h"
|
||||
#include "boards/generic_stm32/intmodule_heartbeat.h"
|
||||
#include "boards/generic_stm32/analog_inputs.h"
|
||||
#include "boards/generic_stm32/rgb_leds.h"
|
||||
|
||||
#include "timers_driver.h"
|
||||
#include "dataconstants.h"
|
||||
@@ -48,6 +50,23 @@
|
||||
#include "flysky_gimbal_driver.h"
|
||||
#endif
|
||||
|
||||
#if defined(CSD203_SENSOR)
|
||||
#include "csd203_sensor.h"
|
||||
#endif
|
||||
|
||||
#if defined(LED_STRIP_GPIO)
|
||||
// Common LED driver
|
||||
extern const stm32_pulse_timer_t _led_timer;
|
||||
|
||||
void ledStripOff()
|
||||
{
|
||||
for (uint8_t i = 0; i < LED_STRIP_LENGTH; i++) {
|
||||
ws2812_set_color(i, 0, 0, 0);
|
||||
}
|
||||
ws2812_update(&_led_timer);
|
||||
}
|
||||
#endif
|
||||
|
||||
HardwareOptions hardwareOptions;
|
||||
bool boardBacklightOn = false;
|
||||
|
||||
@@ -63,6 +82,44 @@ void boardBLInit()
|
||||
#if !defined(BOOT)
|
||||
#include "edgetx.h"
|
||||
|
||||
#if defined(SIXPOS_SWITCH_INDEX)
|
||||
uint8_t lastADCState = 0;
|
||||
uint8_t sixPosState = 0;
|
||||
bool dirty = true;
|
||||
uint16_t getSixPosAnalogValue(uint16_t adcValue)
|
||||
{
|
||||
uint8_t currentADCState = 0;
|
||||
if (adcValue > 3800)
|
||||
currentADCState = 6;
|
||||
else if (adcValue > 3100)
|
||||
currentADCState = 5;
|
||||
else if (adcValue > 2300)
|
||||
currentADCState = 4;
|
||||
else if (adcValue > 1500)
|
||||
currentADCState = 3;
|
||||
else if (adcValue > 1000)
|
||||
currentADCState = 2;
|
||||
else if (adcValue > 400)
|
||||
currentADCState = 1;
|
||||
if (lastADCState != currentADCState) {
|
||||
lastADCState = currentADCState;
|
||||
} else if (lastADCState != 0 && lastADCState - 1 != sixPosState) {
|
||||
sixPosState = lastADCState - 1;
|
||||
dirty = true;
|
||||
}
|
||||
if (dirty) {
|
||||
for (uint8_t i = 0; i < 6; i++) {
|
||||
if (i == sixPosState)
|
||||
ws2812_set_color(i, SIXPOS_LED_RED, SIXPOS_LED_GREEN, SIXPOS_LED_BLUE);
|
||||
else
|
||||
ws2812_set_color(i, 0, 0, 0);
|
||||
}
|
||||
ws2812_update(&_led_timer);
|
||||
}
|
||||
return (4096/5)*(sixPosState);
|
||||
}
|
||||
#endif
|
||||
|
||||
void boardInit()
|
||||
{
|
||||
#if defined(RADIO_FAMILY_T16)
|
||||
@@ -163,9 +220,22 @@ void boardInit()
|
||||
|
||||
timersInit();
|
||||
|
||||
#if defined(HARDWARE_TOUCH) && !defined(SIMU)
|
||||
touchPanelInit();
|
||||
#endif
|
||||
|
||||
#if defined(CSD203_SENSOR)
|
||||
initCSD203();
|
||||
#endif
|
||||
|
||||
usbInit();
|
||||
hapticInit();
|
||||
|
||||
#if defined(LED_STRIP_GPIO)
|
||||
ws2812_init(&_led_timer, LED_STRIP_LENGTH, WS2812_GRB);
|
||||
ledStripOff();
|
||||
#endif
|
||||
|
||||
#if defined(BLUETOOTH)
|
||||
bluetoothInit(BLUETOOTH_DEFAULT_BAUDRATE, true);
|
||||
#endif
|
||||
|
||||
@@ -145,7 +145,7 @@ enum {
|
||||
#endif
|
||||
|
||||
// POTS and SLIDERS default configuration
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
|
||||
#define XPOS_CALIB_DEFAULT {0x3, 0xc, 0x15, 0x1e, 0x26}
|
||||
#endif
|
||||
|
||||
@@ -197,6 +197,10 @@ uint32_t pwrPressedDuration();
|
||||
void usbChargerInit();
|
||||
bool usbChargerLed();
|
||||
|
||||
#if defined(RADIO_V16)
|
||||
uint16_t getSixPosAnalogValue(uint16_t adcValue);
|
||||
#endif
|
||||
|
||||
// Led driver
|
||||
void ledInit();
|
||||
void ledOff();
|
||||
@@ -288,7 +292,7 @@ void telemetryPortInvertedInit(uint32_t baudrate);
|
||||
|
||||
|
||||
// Aux serial port driver
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
|
||||
#define DEBUG_BAUDRATE 400000
|
||||
#define LUA_DEFAULT_BAUDRATE 115200
|
||||
#else
|
||||
@@ -315,7 +319,7 @@ void bluetoothWriteWakeup();
|
||||
uint8_t bluetoothIsWriting();
|
||||
void bluetoothDisable();
|
||||
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
|
||||
#define BATTERY_DIVIDER 1495
|
||||
#else
|
||||
#define BATTERY_DIVIDER 1629
|
||||
|
||||
@@ -0,0 +1,410 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* 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 "csd203_sensor.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "debug.h"
|
||||
#include "delays_driver.h"
|
||||
#include "edgetx_types.h"
|
||||
#include "hal.h"
|
||||
#include "rtos.h"
|
||||
#include "stm32_exti_driver.h"
|
||||
#include "stm32_gpio_driver.h"
|
||||
#include "stm32_hal.h"
|
||||
#include "stm32_hal_ll.h"
|
||||
#include "stm32_i2c_driver.h"
|
||||
|
||||
// clang-format off
|
||||
/* CSD203 Regsistor map */
|
||||
#define CONFIGURATION 0X00
|
||||
/*Read Only*/
|
||||
#define SHUNT_VOLTAGE 0X01
|
||||
#define BUS_VOLTAGE 0X02
|
||||
#define POWER 0X03
|
||||
#define CURRENT 0x04
|
||||
/*Read Only*/
|
||||
#define CALIBRATION 0x05
|
||||
#define MASKENABLE 0x06
|
||||
#define ALERTLIMIT 0x07
|
||||
|
||||
#define ManufacturerID 0xFE //Manufacturer ID Register
|
||||
#define DieID 0xFF //Die ID Register
|
||||
|
||||
#define ManIDCode 0x4153 //CHIP ID
|
||||
|
||||
/*Calibration Calculation parameter*/
|
||||
/* This Parameter Gain*10000K*/
|
||||
#define CalParam 51200
|
||||
/* ↓ add your shunt here ↓ */
|
||||
#define CSD_CONFIG_Rs_1mR 1
|
||||
#define CSD_CONFIG_Rs_2mR 2
|
||||
#define CSD_CONFIG_Rs_5mR 5
|
||||
#define CSD_CONFIG_Rs_10mR 10
|
||||
#define CSD_CONFIG_Rs_20mR 20
|
||||
#define CSD_CONFIG_Rs_50mR 50
|
||||
#define CSD_CONFIG_CurrentLsb1mA 10
|
||||
#define CSD_CONFIG_CurrentLsb2mA 20
|
||||
#define CSD_CONFIG_CurrentLsb5mA 50
|
||||
#define CSD_CONFIG_CurrentLsb10mA 100
|
||||
#define CSD_CONFIG_CurrentLsb20mA 200
|
||||
/*Calibration Calculation parameter*/
|
||||
|
||||
/* CSD203 Regsistor Config*/
|
||||
#define CSD_CONFIG_RST 1
|
||||
#define CSD_CONFIG_UnRST 0
|
||||
|
||||
#define CSD_CONFIG_Avg1 0
|
||||
#define CSD_CONFIG_Avg4 1
|
||||
#define CSD_CONFIG_Avg16 2
|
||||
#define CSD_CONFIG_Avg64 3
|
||||
#define CSD_CONFIG_Avg128 4
|
||||
#define CSD_CONFIG_Avg256 5
|
||||
#define CSD_CONFIG_Avg512 6
|
||||
#define CSD_CONFIG_Avg1024 7
|
||||
|
||||
#define CSD_CONFIG_VBUS_CT1_1mS 4
|
||||
#define CSD_CONFIG_VShunt_CT1_1mS 4
|
||||
|
||||
#define CSD_CONFIG_ShuntBus_CON 7
|
||||
|
||||
#define CSD_CONFIG_ADDR_A1_GND_A0_GND 64
|
||||
#define CSD_CONFIG_ADDR_A1_GND_VS_GND 65
|
||||
#define CSD_CONFIG_ADDR_A1_GND_SDA_GND 66
|
||||
#define CSD_CONFIG_ADDR_A1_GND_SCL_GND 67
|
||||
#define CSD_CONFIG_ADDR_A1_VS_A0_GND 68
|
||||
#define CSD_CONFIG_ADDR_A1_VS_A0_VS 69
|
||||
#define CSD_CONFIG_ADDR_A1_VS_A0_SDA 70
|
||||
#define CSD_CONFIG_ADDR_A1_VS_A0_SCL 71
|
||||
#define CSD_CONFIG_ADDR_A1_SDA_A0_GND 72
|
||||
#define CSD_CONFIG_ADDR_A1_SDA_A0_VS 73
|
||||
#define CSD_CONFIG_ADDR_A1_SDA_A0_SDA 74
|
||||
#define CSD_CONFIG_ADDR_A1_SDA_A0_SCL 75
|
||||
#define CSD_CONFIG_ADDR_A1_SCL_A0_GND 76
|
||||
#define CSD_CONFIG_ADDR_A1_SCL_A0_VS 77
|
||||
#define CSD_CONFIG_ADDR_A1_SCL_A0_SDA 78
|
||||
#define CSD_CONFIG_ADDR_A1_SCL_A0_SCL 79
|
||||
|
||||
/******************/
|
||||
/*CSD Alert Option*/
|
||||
/******************/
|
||||
/*Vshunt Voltage Over Voltage*/
|
||||
#define CSD_ALERT_VShunt_OVA_ON 1
|
||||
#define CSD_ALERT_VShunt_OVA_OFF 0
|
||||
/*Vshunt Voltage Under Voltage*/
|
||||
#define CSD_ALERT_VShunt_UVA_ON 1
|
||||
#define CSD_ALERT_VShunt_UVA_OFF 0
|
||||
/*VBus Voltage Over Voltage*/
|
||||
#define CSD_ALERT_VBUS_OVA_ON 1
|
||||
#define CSD_ALERT_VBUS_OVA_OFF 0
|
||||
/*VBus Voltage Under Voltage*/
|
||||
#define CSD_ALERT_VBUS_UVA_ON 1
|
||||
#define CSD_ALERT_VBUS_UVA_OFF 0
|
||||
/* Power Over Limit */
|
||||
#define CSD_ALERT_Power_Over_ON 1
|
||||
#define CSD_ALERT_Power_Over_OFF 0
|
||||
/* ADC Coversion Ready */
|
||||
#define CSD_ALERT_CoversionReady_ON 1
|
||||
#define CSD_ALERT_CoversionReady_OFF 0
|
||||
#define CSD_ALERT_CNVR_FLAG_ON 1
|
||||
#define CSD_ALERT_CNVR_FLAG_OFF 0
|
||||
/* ALERT Function Flag and Alert latch Work Together */
|
||||
#define CSD_ALERT_ALERT_FLAG_ON 1
|
||||
#define CSD_ALERT_ALERT_FLAG_OFF 0
|
||||
#define CSD_ALERT_ALERT_Latch_ON 1
|
||||
#define CSD_ALERT_ALERT_Latch_OFF 0
|
||||
/*Power over flow */
|
||||
#define CSD_ALERT_OVF_ON 1
|
||||
#define CSD_ALERT_OVF_OFF 0
|
||||
/*Alert Pin */
|
||||
#define CSD_ALERT_APOL_ActiveLow 1
|
||||
#define CSD_ALERT_APOL_ActiveHigh 0
|
||||
// clang-format on
|
||||
|
||||
/*CSD Basic Configuration struct*/
|
||||
typedef struct {
|
||||
uint8_t DeviceADDR;
|
||||
uint8_t RST;
|
||||
uint8_t Average;
|
||||
uint8_t VBUS_Conv_Time;
|
||||
uint8_t VShunt_Conv_Time;
|
||||
uint8_t Mode;
|
||||
uint16_t CurrentLSB;
|
||||
uint16_t Rshunt;
|
||||
} CSD_CONFIG;
|
||||
/*CSD Basic Configuration struct*/
|
||||
|
||||
/*CSD ALERT Configuration struct*/
|
||||
typedef struct {
|
||||
uint8_t VShunt_OVA;
|
||||
uint8_t VShuntUVA;
|
||||
uint8_t VBUS_OVA;
|
||||
uint8_t VBUS_UVA;
|
||||
uint8_t Power_OVER_Limit;
|
||||
uint8_t CNVR;
|
||||
uint8_t ALERT_FLAG;
|
||||
uint8_t CNVR_FLAG;
|
||||
uint8_t OVF;
|
||||
uint8_t APOL;
|
||||
uint8_t ALERT_Latch;
|
||||
} CSD_ALERT;
|
||||
/*CSD ALERT Configuration struct*/
|
||||
|
||||
void CSD203_Init(CSD_CONFIG *CSD203_CFG); // Initialise CSD203 config
|
||||
uint16_t CSD203_ReadVbus(CSD_CONFIG *CSD203_CFG); // Read Vbus Voltage
|
||||
uint16_t CSD203_ReadRshunt(CSD_CONFIG *CSD203_CFG); // Read Rshunt
|
||||
uint16_t CSD203_ReadPower(CSD_CONFIG *CSD203_CFG); // Read Power
|
||||
uint16_t CSD203_ReadCurrent(CSD_CONFIG *CSD203_CFG); // Read Current
|
||||
|
||||
void IIC_DUT_W(uint8_t addr, uint8_t reg, uint16_t data);
|
||||
uint16_t IIC_DUT_R(uint8_t addr, uint8_t reg);
|
||||
|
||||
bool CSD203MainInitFlag = false;
|
||||
bool CSD203InInitFlag = false;
|
||||
bool CSD203ExtInitFlag = false;
|
||||
|
||||
bool IICReadStatusFlag = false;
|
||||
|
||||
static uint16_t csd203extvbus = 0;
|
||||
|
||||
static CSD_CONFIG CSD203_MainSensorCFG;
|
||||
static CSD_CONFIG CSD203_InSensorCFG;
|
||||
static CSD_CONFIG CSD203_ExtSensorCFG;
|
||||
|
||||
bool I2C_CSD203_WriteRegister(uint8_t I2C_ADDR, uint8_t reg, uint8_t *buf,
|
||||
uint8_t len)
|
||||
{
|
||||
uint8_t uAddrAndBuf[6];
|
||||
uAddrAndBuf[0] = (uint8_t)(reg & 0x00FF);
|
||||
|
||||
if (len > 0) {
|
||||
for (int i = 0; i < len; i++) {
|
||||
uAddrAndBuf[i + 1] = buf[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (stm32_i2c_master_tx(TOUCH_I2C_BUS, I2C_ADDR, uAddrAndBuf, len + 1, 100) <
|
||||
0) {
|
||||
TRACE("I2C B1 ERROR: WriteRegister failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool I2C_CSD203_ReadRegister(uint8_t I2C_ADDR, uint8_t reg, uint8_t *buf,
|
||||
uint8_t len)
|
||||
{
|
||||
uint8_t uRegAddr[2];
|
||||
// uRegAddr[0] = (uint8_t)((reg & 0xFF00) >> 8);
|
||||
uRegAddr[0] = (uint8_t)(reg & 0x00FF);
|
||||
|
||||
if (stm32_i2c_master_tx(TOUCH_I2C_BUS, I2C_ADDR, uRegAddr, 1, 100) < 0) {
|
||||
TRACE("I2C B1 ERROR: ReadRegister write reg address failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (stm32_i2c_master_rx(TOUCH_I2C_BUS, I2C_ADDR, buf, len, 100) < 0) {
|
||||
TRACE("I2C B1 ERROR: ReadRegister read reg address failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void IIC_DUT_W(uint8_t addr, uint8_t reg, uint16_t data)
|
||||
{
|
||||
uint8_t buf[2];
|
||||
|
||||
buf[0] = data >> 8;
|
||||
buf[1] = data & 0xff;
|
||||
|
||||
I2C_CSD203_WriteRegister(addr, reg, buf, 2);
|
||||
}
|
||||
|
||||
uint16_t IIC_DUT_R(uint8_t addr, uint8_t reg)
|
||||
{
|
||||
uint8_t buf[2];
|
||||
|
||||
I2C_CSD203_ReadRegister(addr, reg, buf, 2);
|
||||
|
||||
return buf[0] << 8 | buf[1];
|
||||
}
|
||||
|
||||
void CSD203_Init(CSD_CONFIG *CSD203_CFG)
|
||||
{
|
||||
uint16_t Data = 0, ADDR = 0;
|
||||
Data |= (CSD203_CFG->RST) << 15;
|
||||
Data |= (CSD203_CFG->Average) << 9;
|
||||
Data |= (CSD203_CFG->VBUS_Conv_Time) << 5;
|
||||
Data |= (CSD203_CFG->VShunt_Conv_Time) << 2;
|
||||
Data |= CSD203_CFG->Mode;
|
||||
|
||||
ADDR = (CSD203_CFG->DeviceADDR);
|
||||
|
||||
IIC_DUT_W(ADDR, CONFIGURATION, Data);
|
||||
|
||||
Data = CalParam / ((CSD203_CFG->CurrentLSB) * (CSD203_CFG->Rshunt));
|
||||
IIC_DUT_W(ADDR, CALIBRATION, Data);
|
||||
}
|
||||
|
||||
/*Read Vbus*/
|
||||
uint16_t CSD203_ReadVbus(CSD_CONFIG *CSD203_CFG)
|
||||
{
|
||||
uint16_t Data = 0, ADDR = 0;
|
||||
ADDR = (CSD203_CFG->DeviceADDR);
|
||||
Data = IIC_DUT_R(ADDR, BUS_VOLTAGE);
|
||||
return Data;
|
||||
}
|
||||
|
||||
/*Read Rshunt*/
|
||||
uint16_t CSD203_ReadRshunt(CSD_CONFIG *CSD203_CFG)
|
||||
{
|
||||
uint16_t Data = 0, ADDR = 0;
|
||||
ADDR = (CSD203_CFG->DeviceADDR);
|
||||
Data = IIC_DUT_R(ADDR, SHUNT_VOLTAGE);
|
||||
return Data;
|
||||
}
|
||||
|
||||
/*Read Power*/
|
||||
uint16_t CSD203_ReadPower(CSD_CONFIG *CSD203_CFG)
|
||||
{
|
||||
uint16_t Data = 0, ADDR = 0;
|
||||
ADDR = (CSD203_CFG->DeviceADDR);
|
||||
Data = IIC_DUT_R(ADDR, POWER);
|
||||
return Data;
|
||||
}
|
||||
|
||||
uint16_t CSD203_ReadCurrent(CSD_CONFIG *CSD203_CFG)
|
||||
{
|
||||
uint16_t Data = 0, ADDR = 0;
|
||||
ADDR = (CSD203_CFG->DeviceADDR);
|
||||
Data = IIC_DUT_R(ADDR, CURRENT);
|
||||
return Data;
|
||||
}
|
||||
|
||||
uint16_t CSD203_ReadCONFIGURATION(CSD_CONFIG *CSD203_CFG)
|
||||
{
|
||||
uint16_t Data = 0, ADDR = 0;
|
||||
ADDR = (CSD203_CFG->DeviceADDR);
|
||||
Data = IIC_DUT_R(ADDR, CONFIGURATION);
|
||||
return Data;
|
||||
}
|
||||
|
||||
uint16_t CSD203_ReadManufacturerID(CSD_CONFIG *CSD203_CFG)
|
||||
{
|
||||
uint16_t Data = 0, ADDR = 0;
|
||||
ADDR = (CSD203_CFG->DeviceADDR);
|
||||
Data = IIC_DUT_R(ADDR, ManufacturerID);
|
||||
return Data;
|
||||
}
|
||||
|
||||
void initCSD203(void)
|
||||
{
|
||||
CSD203MainInitFlag = false;
|
||||
CSD203InInitFlag = false;
|
||||
CSD203ExtInitFlag = false;
|
||||
|
||||
// TRACE("202 test ..."); //A0=CLK A1=SDA RadioSky
|
||||
|
||||
CSD203_MainSensorCFG.RST = CSD_CONFIG_RST;
|
||||
CSD203_MainSensorCFG.Average = CSD_CONFIG_Avg16;
|
||||
CSD203_MainSensorCFG.VBUS_Conv_Time = CSD_CONFIG_VBUS_CT1_1mS;
|
||||
CSD203_MainSensorCFG.VShunt_Conv_Time = CSD_CONFIG_VShunt_CT1_1mS;
|
||||
CSD203_MainSensorCFG.Rshunt = CSD_CONFIG_Rs_10mR;
|
||||
CSD203_MainSensorCFG.CurrentLSB = CSD_CONFIG_CurrentLsb1mA;
|
||||
CSD203_MainSensorCFG.Mode = 7;
|
||||
CSD203_MainSensorCFG.DeviceADDR = CSD_CONFIG_ADDR_A1_VS_A0_GND; // 100 0100
|
||||
// CSD203_MainSensorCFG.DeviceADDR=CSD_CONFIG_ADDR_A1_GND_A0_GND;
|
||||
|
||||
CSD203_InSensorCFG.RST = CSD_CONFIG_RST;
|
||||
CSD203_InSensorCFG.Average = CSD_CONFIG_Avg16;
|
||||
CSD203_InSensorCFG.VBUS_Conv_Time = CSD_CONFIG_VBUS_CT1_1mS;
|
||||
CSD203_InSensorCFG.VShunt_Conv_Time = CSD_CONFIG_VShunt_CT1_1mS;
|
||||
CSD203_InSensorCFG.Rshunt = CSD_CONFIG_Rs_10mR;
|
||||
CSD203_InSensorCFG.CurrentLSB = CSD_CONFIG_CurrentLsb1mA;
|
||||
CSD203_InSensorCFG.Mode = 7;
|
||||
CSD203_InSensorCFG.DeviceADDR = CSD_CONFIG_ADDR_A1_VS_A0_VS; // 100 0101
|
||||
// CSD203_InSensorCFG.DeviceADDR=CSD_CONFIG_ADDR_A1_GND_A0_GND;
|
||||
|
||||
CSD203_ExtSensorCFG.RST = CSD_CONFIG_RST;
|
||||
CSD203_ExtSensorCFG.Average = CSD_CONFIG_Avg16;
|
||||
CSD203_ExtSensorCFG.VBUS_Conv_Time = CSD_CONFIG_VBUS_CT1_1mS;
|
||||
CSD203_ExtSensorCFG.VShunt_Conv_Time = CSD_CONFIG_VShunt_CT1_1mS;
|
||||
CSD203_ExtSensorCFG.Rshunt = CSD_CONFIG_Rs_10mR;
|
||||
CSD203_ExtSensorCFG.CurrentLSB = CSD_CONFIG_CurrentLsb1mA;
|
||||
CSD203_ExtSensorCFG.Mode = 7;
|
||||
CSD203_ExtSensorCFG.DeviceADDR = CSD_CONFIG_ADDR_A1_GND_VS_GND; // 100 0001
|
||||
// CSD203_ExtSensorCFG.DeviceADDR=CSD_CONFIG_ADDR_A1_GND_A0_GND;
|
||||
|
||||
CSD203_Init(&CSD203_MainSensorCFG);
|
||||
delay_ms(1);
|
||||
uint16_t cfg = CSD203_ReadManufacturerID(&CSD203_MainSensorCFG);
|
||||
if (cfg == ManIDCode) {
|
||||
CSD203_ReadCurrent(&CSD203_MainSensorCFG);
|
||||
CSD203MainInitFlag = true;
|
||||
}
|
||||
|
||||
delay_ms(5);
|
||||
CSD203_Init(&CSD203_InSensorCFG);
|
||||
delay_ms(1);
|
||||
cfg = CSD203_ReadManufacturerID(&CSD203_InSensorCFG);
|
||||
if (cfg == ManIDCode) {
|
||||
CSD203_ReadCurrent(&CSD203_InSensorCFG);
|
||||
CSD203InInitFlag = true;
|
||||
}
|
||||
|
||||
delay_ms(5);
|
||||
CSD203_Init(&CSD203_ExtSensorCFG);
|
||||
delay_ms(1);
|
||||
cfg = CSD203_ReadManufacturerID(&CSD203_ExtSensorCFG);
|
||||
if (cfg == ManIDCode) {
|
||||
CSD203_ReadCurrent(&CSD203_ExtSensorCFG);
|
||||
CSD203ExtInitFlag = true;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t getCSD203BatteryVoltage(void)
|
||||
{ // 1000=1000mV
|
||||
return csd203extvbus;
|
||||
}
|
||||
|
||||
void readCSD203(void)
|
||||
{ // 5ms
|
||||
static uint16_t GetSenSorStep = 0;
|
||||
|
||||
if (IICReadStatusFlag == true) return;
|
||||
|
||||
IICReadStatusFlag = true;
|
||||
if (GetSenSorStep == 0 && CSD203MainInitFlag == true) {
|
||||
CSD203_ReadCurrent(&CSD203_MainSensorCFG);
|
||||
CSD203_ReadVbus(&CSD203_MainSensorCFG);
|
||||
} else if (GetSenSorStep == 1 && CSD203InInitFlag == true) {
|
||||
CSD203_ReadCurrent(&CSD203_InSensorCFG);
|
||||
CSD203_ReadVbus(&CSD203_InSensorCFG);
|
||||
} else if (GetSenSorStep == 2 && CSD203ExtInitFlag == true) {
|
||||
CSD203_ReadCurrent(&CSD203_ExtSensorCFG);
|
||||
csd203extvbus = (CSD203_ReadVbus(&CSD203_ExtSensorCFG) * 1.25);
|
||||
// TRACE("Vbat=%d\r",csd203extvbus);
|
||||
}
|
||||
IICReadStatusFlag = false;
|
||||
if (++GetSenSorStep >= 3) GetSenSorStep = 0;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
void initCSD203(void);
|
||||
void readCSD203(void);
|
||||
+166
-27
@@ -45,7 +45,7 @@
|
||||
#define KEYS_GPIO_PIN_EXIT LL_GPIO_PIN_6 // PI.06
|
||||
#define KEYS_GPIO_REG_TELE GPIOC
|
||||
#define KEYS_GPIO_PIN_TELE LL_GPIO_PIN_4 // PC.04
|
||||
#elif defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#elif defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
|
||||
#define KEYS_GPIO_REG_ENTER GPIOI
|
||||
#define KEYS_GPIO_PIN_ENTER LL_GPIO_PIN_8 // PI.08
|
||||
#define KEYS_GPIO_REG_PAGEUP GPIOC
|
||||
@@ -265,6 +265,14 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// 6POS SW
|
||||
#if defined(RADIO_V16)
|
||||
#define SIXPOS_SWITCH_INDEX 5
|
||||
#define SIXPOS_LED_RED 255
|
||||
#define SIXPOS_LED_GREEN 255
|
||||
#define SIXPOS_LED_BLUE 255
|
||||
#endif
|
||||
|
||||
// Trims
|
||||
#if defined(RADIO_T15)
|
||||
#define TRIMS_GPIO_REG_LHL GPIOD
|
||||
@@ -309,7 +317,7 @@
|
||||
#define TRIMS_GPIO_REG_LSU GPIOB
|
||||
#define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_13 // PB.13
|
||||
#elif defined(PCBX10)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
|
||||
#define TRIMS_GPIO_REG_LHL GPIOA
|
||||
#define TRIMS_GPIO_PIN_LHL LL_GPIO_PIN_6 // PA.06
|
||||
#define TRIMS_GPIO_REG_LHR GPIOC
|
||||
@@ -392,6 +400,55 @@
|
||||
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler
|
||||
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
|
||||
#define ADC_VREF_PREC2 600
|
||||
#elif defined(RADIO_V16)
|
||||
#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00
|
||||
#define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_1 // PA.01
|
||||
#define ADC_GPIO_PIN_STICK_RV LL_GPIO_PIN_3 // PA.03
|
||||
#define ADC_GPIO_PIN_STICK_RH LL_GPIO_PIN_2 // PA.02
|
||||
#define ADC_GPIO_PIN_POT1 LL_GPIO_PIN_2 // PC.00 // ADC123_IN10 -> ADC3_IN10
|
||||
#define ADC_GPIO_PIN_POT2 LL_GPIO_PIN_1 // PC.02 // ADC123_IN12 -> ADC3_IN12
|
||||
#define ADC_GPIO_PIN_POT3 LL_GPIO_PIN_0 // PC.01 // ADC123_IN11 -> ADC3_IN11
|
||||
#define ADC_GPIO_PIN_SLIDER1 LL_GPIO_PIN_5 // PA.05
|
||||
#define ADC_GPIO_PIN_SLIDER2 LL_GPIO_PIN_3 // PC.03
|
||||
#define ADC_GPIO_PIN_BATT LL_GPIO_PIN_7 // PF.07
|
||||
#define ADC_GPIO_PIN_EXT1 LL_GPIO_PIN_8 // PF.08
|
||||
#define ADC_GPIO_PIN_EXT2 LL_GPIO_PIN_9 // PF.09
|
||||
#define ADC_GPIO_PIN_EXT3 ADC_GPIO_PIN_STICK_RH
|
||||
#define ADC_GPIO_PIN_EXT4 ADC_GPIO_PIN_STICK_RV
|
||||
#define ADC_GPIOA_PINS_FS (LL_GPIO_PIN_2 | LL_GPIO_PIN_3)
|
||||
#define ADC_GPIOA_PINS (ADC_GPIO_PIN_STICK_LH | ADC_GPIO_PIN_STICK_LV | ADC_GPIO_PIN_STICK_RH | ADC_GPIO_PIN_STICK_RV | ADC_GPIO_PIN_SLIDER1)
|
||||
#define ADC_GPIOC_PINS (ADC_GPIO_PIN_POT1 | ADC_GPIO_PIN_POT2 | ADC_GPIO_PIN_POT3 | ADC_GPIO_PIN_SLIDER2)
|
||||
#define ADC_GPIOF_PINS (ADC_GPIO_PIN_EXT1 | ADC_GPIO_PIN_EXT2)
|
||||
#define ADC_CHANNEL_STICK_LH LL_ADC_CHANNEL_0 // ADC123_IN0 -> ADC3_IN0
|
||||
#define ADC_CHANNEL_STICK_LV LL_ADC_CHANNEL_1 // ADC123_IN1 -> ADC3_IN1
|
||||
#define ADC_CHANNEL_STICK_RH LL_ADC_CHANNEL_2 // ADC123_IN2 -> ADC3_IN2
|
||||
#define ADC_CHANNEL_STICK_RV LL_ADC_CHANNEL_3 // ADC123_IN3 -> ADC3_IN3
|
||||
#define ADC_CHANNEL_POT1 LL_ADC_CHANNEL_12 // ADC123_IN10 -> ADC3_IN10
|
||||
#define ADC_CHANNEL_POT2 LL_ADC_CHANNEL_11 // ADC123_IN12 -> ADC3_IN12
|
||||
#define ADC_CHANNEL_POT3 LL_ADC_CHANNEL_10 // ADC123_IN11 -> ADC3_IN11
|
||||
#define ADC_CHANNEL_SLIDER1 LL_ADC_CHANNEL_5 // ADC12_IN5 -> ADC1_IN5
|
||||
#define ADC_CHANNEL_SLIDER2 LL_ADC_CHANNEL_13 // ADC123_IN13 -> ADC1_IN13
|
||||
#define ADC_CHANNEL_EXT1 LL_ADC_CHANNEL_6 // ADC3_IN6 -> ADC3_IN6
|
||||
#define ADC_CHANNEL_EXT2 LL_ADC_CHANNEL_7 // ADC3_IN7 -> ADC3_IN7
|
||||
#define ADC_CHANNEL_EXT3 LL_ADC_CHANNEL_2 // ADC3_IN2: same as RH
|
||||
#define ADC_CHANNEL_EXT4 LL_ADC_CHANNEL_3 // ADC3_IN3: same as RV
|
||||
#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18
|
||||
#define ADC_MAIN ADC3
|
||||
#define ADC_EXT ADC1
|
||||
#define ADC_EXT_CHANNELS { ADC_CHANNEL_SLIDER1, ADC_CHANNEL_SLIDER2, ADC_CHANNEL_RTC_BAT }
|
||||
#define ADC_EXT_DMA DMA2
|
||||
#define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_0
|
||||
#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_4
|
||||
#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream4_IRQn
|
||||
#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler
|
||||
#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
|
||||
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
|
||||
#define ADC_DMA DMA2
|
||||
#define ADC_DMA_CHANNEL LL_DMA_CHANNEL_2
|
||||
#define ADC_DMA_STREAM LL_DMA_STREAM_0
|
||||
#define ADC_DMA_STREAM_IRQ DMA2_Stream0_IRQn
|
||||
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler
|
||||
#define ADC_VREF_PREC2 660
|
||||
#elif defined(PCBX10)
|
||||
#if defined(RADIO_T15)
|
||||
#define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_1 // PA.01
|
||||
@@ -422,7 +479,7 @@
|
||||
#define ADC_GPIO_PIN_EXT3 ADC_GPIO_PIN_STICK_RH
|
||||
#define ADC_GPIO_PIN_EXT4 ADC_GPIO_PIN_STICK_RV
|
||||
#endif
|
||||
#if !(defined(RADIO_TX16S) || defined(RADIO_F16)) && !defined(RADIO_T15)
|
||||
#if !(defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_T15) || defined(RADIO_V16))
|
||||
#define PWM_STICKS
|
||||
#define PWM_TIMER TIM5
|
||||
#define PWM_GPIO GPIOA
|
||||
@@ -470,7 +527,17 @@
|
||||
#define ADC_CHANNEL_RTC_BAT LL_ADC_CHANNEL_VBAT // ADC1_IN18
|
||||
#define ADC_MAIN ADC3
|
||||
#define ADC_EXT ADC1
|
||||
#define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BAT }
|
||||
#if defined(RADIO_V16)
|
||||
#define ADC_EXT_CHANNELS { ADC_CHANNEL_SLIDER1, ADC_CHANNEL_SLIDER2, ADC_CHANNEL_RTC_BAT }
|
||||
// Required DMA for more than one channel for EXT_ADC
|
||||
#define ADC_EXT_DMA DMA2
|
||||
#define ADC_EXT_DMA_CHANNEL LL_DMA_CHANNEL_0
|
||||
#define ADC_EXT_DMA_STREAM LL_DMA_STREAM_4
|
||||
#define ADC_EXT_DMA_STREAM_IRQ DMA2_Stream4_IRQn
|
||||
#define ADC_EXT_DMA_STREAM_IRQHandler DMA2_Stream4_IRQHandler
|
||||
#else
|
||||
#define ADC_EXT_CHANNELS { ADC_CHANNEL_RTC_BAT }
|
||||
#endif
|
||||
#define ADC_EXT_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
|
||||
#define ADC_SAMPTIME LL_ADC_SAMPLINGTIME_56CYCLES
|
||||
#define ADC_DMA DMA2
|
||||
@@ -480,7 +547,7 @@
|
||||
#define ADC_DMA_STREAM_IRQHandler DMA2_Stream0_IRQHandler
|
||||
|
||||
// VBat divider is /4 on F42x and F43x devices
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_T15) || defined(RADIO_F16)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_T15) || defined(RADIO_F16) || defined(RADIO_V16)
|
||||
#define ADC_VREF_PREC2 660
|
||||
#elif defined(RADIO_T16) || defined(RADIO_T18)
|
||||
#define ADC_VREF_PREC2 600
|
||||
@@ -497,6 +564,8 @@
|
||||
#define ADC_DIRECTION {1,-1,1,-1, -1,1,-1, -1,1,1,1, -1,1 }
|
||||
#elif defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#define ADC_DIRECTION {1,-1,1,-1, 1,1,1, -1,1,1,1, -1,1 }
|
||||
#elif defined(RADIO_V16)
|
||||
#define ADC_DIRECTION {1,-1,1,-1, 1,1,1, -1,1,1,1, -1,1 }
|
||||
#elif defined(PCBX10)
|
||||
#define ADC_DIRECTION {1,-1,1,-1, -1,1,-1, 1,-1,1,1, 1,-1 }
|
||||
#elif defined(PCBX12S)
|
||||
@@ -511,6 +580,9 @@
|
||||
#define PWR_ON_GPIO GPIO_PIN(GPIOJ, 1) // PJ.01
|
||||
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOJ, 0) // PJ.00
|
||||
#define PWR_EXTRA_SWITCH_GPIO GPIO_PIN(GPIOB, 0) // PB.00
|
||||
#elif defined(RADIO_V16)
|
||||
#define PWR_ON_GPIO GPIO_PIN(GPIOB, 2) // PB.02
|
||||
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOJ, 0) // PJ.00
|
||||
#else
|
||||
#define PWR_ON_GPIO GPIO_PIN(GPIOJ, 1) // PJ.01
|
||||
#define PWR_SWITCH_GPIO GPIO_PIN(GPIOJ, 0) // PJ.00
|
||||
@@ -574,19 +646,34 @@
|
||||
|
||||
// Serial Port (DEBUG)
|
||||
#if defined(AUX_SERIAL)
|
||||
#define AUX_SERIAL_TX_GPIO GPIO_PIN(GPIOB, 10) // PB.10
|
||||
#define AUX_SERIAL_RX_GPIO GPIO_PIN(GPIOB, 11) // PB.11
|
||||
#define AUX_SERIAL_USART USART3
|
||||
#define AUX_SERIAL_USART_IRQHandler USART3_IRQHandler
|
||||
#define AUX_SERIAL_USART_IRQn USART3_IRQn
|
||||
#define AUX_SERIAL_DMA_TX DMA1
|
||||
#define AUX_SERIAL_DMA_TX_STREAM LL_DMA_STREAM_3
|
||||
#define AUX_SERIAL_DMA_TX_CHANNEL LL_DMA_CHANNEL_4
|
||||
#define AUX_SERIAL_DMA_RX DMA1
|
||||
#define AUX_SERIAL_DMA_RX_STREAM LL_DMA_STREAM_1
|
||||
#define AUX_SERIAL_DMA_RX_CHANNEL LL_DMA_CHANNEL_4
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#if defined(RADIO_V16)
|
||||
#define AUX_SERIAL_TX_GPIO GPIO_PIN(GPIOG, 14) // PG.14
|
||||
#define AUX_SERIAL_RX_GPIO GPIO_PIN(GPIOG, 9) // PG.09
|
||||
#define AUX_SERIAL_USART USART6
|
||||
#define AUX_SERIAL_USART_IRQHandler USART6_IRQHandler
|
||||
#define AUX_SERIAL_USART_IRQn USART6_IRQn
|
||||
#define AUX_SERIAL_DMA_TX DMA2
|
||||
#define AUX_SERIAL_DMA_TX_STREAM LL_DMA_STREAM_7
|
||||
#define AUX_SERIAL_DMA_TX_CHANNEL LL_DMA_CHANNEL_5
|
||||
#define AUX_SERIAL_DMA_RX DMA2
|
||||
#define AUX_SERIAL_DMA_RX_STREAM LL_DMA_STREAM_2
|
||||
#define AUX_SERIAL_DMA_RX_CHANNEL LL_DMA_CHANNEL_5
|
||||
#define AUX_SERIAL_PWR_GPIO GPIO_PIN(GPIOA, 15) // PA.15
|
||||
#else
|
||||
#define AUX_SERIAL_TX_GPIO GPIO_PIN(GPIOB, 10) // PB.10
|
||||
#define AUX_SERIAL_RX_GPIO GPIO_PIN(GPIOB, 11) // PB.11
|
||||
#define AUX_SERIAL_USART USART3
|
||||
#define AUX_SERIAL_USART_IRQHandler USART3_IRQHandler
|
||||
#define AUX_SERIAL_USART_IRQn USART3_IRQn
|
||||
#define AUX_SERIAL_DMA_TX DMA1
|
||||
#define AUX_SERIAL_DMA_TX_STREAM LL_DMA_STREAM_3
|
||||
#define AUX_SERIAL_DMA_TX_CHANNEL LL_DMA_CHANNEL_4
|
||||
#define AUX_SERIAL_DMA_RX DMA1
|
||||
#define AUX_SERIAL_DMA_RX_STREAM LL_DMA_STREAM_1
|
||||
#define AUX_SERIAL_DMA_RX_CHANNEL LL_DMA_CHANNEL_4
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#define AUX_SERIAL_PWR_GPIO GPIO_PIN(GPIOA, 15) // PA.15
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -615,6 +702,24 @@
|
||||
#endif
|
||||
|
||||
// Telemetry
|
||||
#if defined(RADIO_V16)
|
||||
#define TELEMETRY_RX_REV_GPIO GPIO_PIN(GPIOH, 7) // PH.07
|
||||
#define TELEMETRY_TX_REV_GPIO GPIO_PIN(GPIOH, 7) // PH.07
|
||||
#define TELEMETRY_DIR_GPIO GPIO_PIN(GPIOD, 4) // PD.04
|
||||
#define TELEMETRY_SET_INPUT 0
|
||||
#define TELEMETRY_GPIO GPIOD
|
||||
#define TELEMETRY_TX_GPIO GPIO_PIN(GPIOD, 5) // PD.05
|
||||
#define TELEMETRY_RX_GPIO GPIO_PIN(GPIOD, 6) // PD.06
|
||||
#define TELEMETRY_USART USART2
|
||||
#define TELEMETRY_DMA DMA1
|
||||
#define TELEMETRY_DMA_Stream_TX LL_DMA_STREAM_6
|
||||
#define TELEMETRY_DMA_Channel_TX LL_DMA_CHANNEL_4
|
||||
#define TELEMETRY_DMA_TX_Stream_IRQ DMA1_Stream6_IRQn
|
||||
#define TELEMETRY_DMA_TX_IRQHandler DMA1_Stream6_IRQHandler
|
||||
#define TELEMETRY_DMA_TX_FLAG_TC DMA_IT_TCIF6
|
||||
#define TELEMETRY_USART_IRQHandler USART2_IRQHandler
|
||||
#define TELEMETRY_USART_IRQn USART2_IRQn
|
||||
#else
|
||||
#define TELEMETRY_DIR_GPIO GPIO_PIN(GPIOD, 4) // PD.04
|
||||
#define TELEMETRY_SET_INPUT 0
|
||||
#define TELEMETRY_GPIO GPIOD
|
||||
@@ -648,6 +753,7 @@
|
||||
#define TELEMETRY_TIMER TIM11
|
||||
#define TELEMETRY_TIMER_IRQn TIM1_TRG_COM_TIM11_IRQn
|
||||
#define TELEMETRY_TIMER_IRQHandler TIM1_TRG_COM_TIM11_IRQHandler
|
||||
#endif
|
||||
|
||||
// Software IRQ (Prio 5 -> FreeRTOS compatible)
|
||||
#define TELEMETRY_RX_FRAME_EXTI_LINE LL_EXTI_LINE_4
|
||||
@@ -677,7 +783,7 @@
|
||||
#elif defined(PCBX10)
|
||||
#define LCD_GPIO_NRST GPIO_PIN(GPIOI, 10) // PI.10
|
||||
#endif
|
||||
#if defined(PCBX10) && !defined(RADIO_T18)
|
||||
#if defined(PCBX10) && !defined(RADIO_T18) && !defined(RADIO_V16)
|
||||
#define LCD_VERTICAL_INVERT
|
||||
#endif
|
||||
#define LTDC_IRQ_PRIO 4
|
||||
@@ -810,7 +916,7 @@
|
||||
#endif
|
||||
|
||||
#if defined(RADIO_FAMILY_T16)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
|
||||
#define AUDIO_UNMUTE_DELAY 150 // ms
|
||||
#else
|
||||
#define AUDIO_UNMUTE_DELAY 120 // ms
|
||||
@@ -843,7 +949,7 @@
|
||||
#endif // HARDWARE_TOUCH
|
||||
|
||||
// First I2C Bus
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(PCBX12S) || defined(RADIO_T15)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(PCBX12S) || defined(RADIO_T15) || defined(RADIO_V16)
|
||||
#define I2C_B1 I2C1
|
||||
#define I2C_B1_SCL_GPIO GPIO_PIN(GPIOB, 8) // PB.08
|
||||
#define I2C_B1_SDA_GPIO GPIO_PIN(GPIOB, 9) // PB.09
|
||||
@@ -864,7 +970,7 @@
|
||||
#define I2C_B2_SDA_GPIO GPIO_PIN(GPIOB, 11) // PB.11
|
||||
#define I2C_B2_GPIO_AF LL_GPIO_AF_4 // I2C2
|
||||
#define I2C_B2_CLK_RATE 400000
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16)
|
||||
#if defined(RADIO_TX16S) || defined(RADIO_F16) || defined(RADIO_V16)
|
||||
#define I2C_B2_PWR_GPIO GPIO_PIN(GPIOA, 15) // PA.15
|
||||
#endif
|
||||
#endif
|
||||
@@ -913,6 +1019,22 @@
|
||||
// #define FLYSKY_HALL_DMA_Stream_TX LL_DMA_STREAM_4
|
||||
#endif
|
||||
|
||||
#if defined(RADIO_V16)
|
||||
// LED Strip
|
||||
#define LED_STRIP_LENGTH 40
|
||||
#define LED_STRIP_GPIO GPIO_PIN(GPIOA, 10) // PA.10 / TIM1_CH3
|
||||
#define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1/2
|
||||
#define LED_STRIP_TIMER TIM1
|
||||
#define LED_STRIP_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
|
||||
#define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH3
|
||||
#define LED_STRIP_TIMER_DMA DMA2
|
||||
#define LED_STRIP_TIMER_DMA_CHANNEL LL_DMA_CHANNEL_6
|
||||
#define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_5
|
||||
#define LED_STRIP_TIMER_DMA_IRQn DMA2_Stream5_IRQn
|
||||
#define LED_STRIP_TIMER_DMA_IRQHandler DMA2_Stream5_IRQHandler
|
||||
#define LED_STRIP_REFRESH_PERIOD 50 //ms
|
||||
#endif
|
||||
|
||||
// Internal PXX1 Module:
|
||||
// -> let's assume all internal XJT modules used are either X10 or X12S type
|
||||
#define EXTERNAL_ANTENNA
|
||||
@@ -932,15 +1054,21 @@
|
||||
#define INTMODULE_RX_DMA_CHANNEL LL_DMA_CHANNEL_4
|
||||
#if defined(PCBX12S)
|
||||
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOC, 2) // PC.02
|
||||
#elif defined(RADIO_V16)
|
||||
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOB, 0) // PB.00
|
||||
#elif defined(PCBX10)
|
||||
#define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOI, 9) // PI.09
|
||||
#endif
|
||||
#define INTMODULE_BOOTCMD_DEFAULT 0 // RESET
|
||||
#if defined(RADIO_V16)
|
||||
#define INTMODULE_BOOTCMD_DEFAULT 1 // RESET
|
||||
#else
|
||||
#define INTMODULE_BOOTCMD_DEFAULT 0 // RESET
|
||||
#endif
|
||||
|
||||
// External Module
|
||||
#define EXTMODULE_PWR_GPIO GPIO_PIN(GPIOB, 3) // PB.03
|
||||
#define EXTERNAL_MODULE_PWR_OFF() gpio_clear(EXTMODULE_PWR_GPIO)
|
||||
#if defined(PCBX10) && defined(PCBREV_EXPRESS)
|
||||
#if (defined(PCBX10) && defined(PCBREV_EXPRESS)) || defined(RADIO_V16)
|
||||
#define EXTMODULE_TX_GPIO GPIO_PIN(GPIOB, 10) // PB.10 (TIM2_CH3)
|
||||
#define EXTMODULE_RX_GPIO GPIO_PIN(GPIOB, 11) // PB.11
|
||||
#define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF1
|
||||
@@ -964,6 +1092,10 @@
|
||||
#define EXTMODULE_USART_TX_DMA_STREAM LL_DMA_STREAM_3
|
||||
#define EXTMODULE_USART_RX_DMA_CHANNEL LL_DMA_CHANNEL_4
|
||||
#define EXTMODULE_USART_RX_DMA_STREAM LL_DMA_STREAM_1
|
||||
#if defined(RADIO_V16)
|
||||
#define EXTMODULE_TX_INVERT_GPIO GPIO_PIN(GPIOI, 2) // PI.02
|
||||
#define EXTMODULE_RX_INVERT_GPIO GPIO_PIN(GPIOI, 9) // PI.09
|
||||
#endif
|
||||
#elif defined(PCBX10) || PCBREV >= 13
|
||||
#define EXTMODULE_TX_GPIO GPIO_PIN(GPIOA, 10) // PA.10 (TIM1_CH3)
|
||||
#define EXTMODULE_TIMER_TX_GPIO_AF GPIO_AF1
|
||||
@@ -995,10 +1127,17 @@
|
||||
|
||||
// Heartbeat
|
||||
#define INTMODULE_HEARTBEAT
|
||||
#define INTMODULE_HEARTBEAT_GPIO GPIO_PIN(GPIOD, 12) // PD.12 / TIM4_CH1
|
||||
#define INTMODULE_HEARTBEAT_EXTI_PORT LL_SYSCFG_EXTI_PORTH
|
||||
#define INTMODULE_HEARTBEAT_EXTI_SYS_LINE LL_SYSCFG_EXTI_LINE12
|
||||
#define INTMODULE_HEARTBEAT_EXTI_LINE LL_EXTI_LINE_12
|
||||
#if defined(RADIO_V16)
|
||||
#define INTMODULE_HEARTBEAT_GPIO GPIO_PIN(GPIOB, 11) // PB.11 / TIM2_CH4
|
||||
#define INTMODULE_HEARTBEAT_EXTI_PORT LL_SYSCFG_EXTI_PORTB
|
||||
#define INTMODULE_HEARTBEAT_EXTI_SYS_LINE LL_SYSCFG_EXTI_LINE11
|
||||
#define INTMODULE_HEARTBEAT_EXTI_LINE LL_EXTI_LINE_11
|
||||
#else
|
||||
#define INTMODULE_HEARTBEAT_GPIO GPIO_PIN(GPIOD, 12) // PD.12 / TIM4_CH1
|
||||
#define INTMODULE_HEARTBEAT_EXTI_PORT LL_SYSCFG_EXTI_PORTH
|
||||
#define INTMODULE_HEARTBEAT_EXTI_SYS_LINE LL_SYSCFG_EXTI_LINE12
|
||||
#define INTMODULE_HEARTBEAT_EXTI_LINE LL_EXTI_LINE_12
|
||||
#endif
|
||||
// INTMODULE_HEARTBEAT_EXTI IRQ
|
||||
#if !defined(USE_EXTI15_10_IRQ)
|
||||
#define USE_EXTI15_10_IRQ
|
||||
|
||||
@@ -49,4 +49,8 @@
|
||||
#define USB_NAME "FrSky X10"
|
||||
#define USB_MANUFACTURER 'F', 'r', 'S', 'k', 'y', ' ', ' ', ' ' /* 8 bytes */
|
||||
#define USB_PRODUCT 'X', '1', '0', ' ', ' ', ' ', ' ', ' ' /* 8 Bytes */
|
||||
#elif defined(RADIO_V16)
|
||||
#define USB_NAME "HelloRadioSky V16"
|
||||
#define USB_MANUFACTURER 'H', 'R', 'S', 'k', 'y', ' ', ' ', ' ' /* 8 bytes */
|
||||
#define USB_PRODUCT 'V', '1', '6', ' ', ' ', ' ', ' ', ' ' /* 8 Bytes */
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user