295 lines
11 KiB
C
295 lines
11 KiB
C
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
|
/************************************************************************************
|
|
** **
|
|
** UHSDR **
|
|
** a powerful firmware for STM32 based SDR transceivers **
|
|
** **
|
|
**--------------------------------------------------------------------------------**
|
|
** **
|
|
** Description: Please provide one **
|
|
** Licence: GNU GPLv3 **
|
|
************************************************************************************/
|
|
|
|
#ifndef __UHSDR_BOARD_CONFIG_H
|
|
#define __UHSDR_BOARD_CONFIG_H
|
|
|
|
#if defined(UI_BRD_MCHF) && defined(UI_BRD_OVI40)
|
|
#error Only one ui board can be selected: UI_BRD_MCHF, UI_BRD_OVI40
|
|
#elif defined(UI_BRD_OVI40)
|
|
#include "UHSDR_UI_ovi40_config.h"
|
|
#elif defined(UI_BRD_MCHF)
|
|
#include "UHSDR_UI_mchf_config.h"
|
|
#else
|
|
#error One ui board has to be selected: UI_BRD_MCHF, UI_BRD_OVI40
|
|
#endif
|
|
|
|
#if !defined(BOOTLOADER_BUILD)
|
|
// The rf boards we want to support, but the bootloader should compile for all if possible.
|
|
// so we don't tell the bootloader which one we have
|
|
#if !defined(RF_BRD_OVI40) && !defined(RF_BRD_MCHF) && !defined(RF_BRD_LAPWING)
|
|
#error At least one rf board must be selected: RF_BRD_MCHF, RF_BRD_OVI40, RF_BRD_LAPWING
|
|
#else
|
|
#if defined(RF_BRD_OVI40)
|
|
#include "UHSDR_RF_ovi40_config.h"
|
|
#endif
|
|
#if defined(RF_BRD_MCHF)
|
|
#include "UHSDR_RF_mchf_config.h"
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#include "uhsdr_types.h"
|
|
|
|
//************DEFAULT_VALUES_IF_NOT_SET_IN_BOARD_CONFIG_FILES**********//
|
|
|
|
#if !defined(TRX_NAME)
|
|
#define TRX_NAME "mcHF QRP"
|
|
#endif //TRX_NAME
|
|
|
|
#if !defined(TRX_ID)
|
|
#define TRX_ID "mchf"
|
|
#endif // TRX_ID
|
|
|
|
#if !defined(TRX_HW_LIC)
|
|
#define TRX_HW_LIC "CC BY-NC-SA 3.0"
|
|
#define TRX_HW_CREATOR "K. Atanassov, M0NKA, www.m0nka.co.uk"
|
|
#endif // TRX_HW_LIC
|
|
|
|
#if !defined(__MCHF_SPECIALMEM)
|
|
#define __MCHF_SPECIALMEM
|
|
#endif
|
|
|
|
#if !defined(__UHSDR_DMAMEM)
|
|
#define __UHSDR_DMAMEM
|
|
#endif
|
|
|
|
#if !defined(DEVICE_STRING)
|
|
#define DEVICE_STRING TRX_NAME " Transceiver"
|
|
#endif
|
|
|
|
/***
|
|
* Please document all switches/parameters with what they are supposed to do and what values they can have.
|
|
* Please use proper naming:
|
|
* For capabilities of the software which can be enabled and disabled
|
|
* use USE_<CAPABILITY/FEATURENAME>
|
|
*
|
|
* These should be defined using #define USE_CAPABILITY
|
|
* or left undefined if not enabled so that these can be checked using #ifdef
|
|
*
|
|
* For related parameters DON'T USE USE_...
|
|
*
|
|
* In an ideal world please use PAR_<CAPABILITY/FEATURE>_<PARAMETERNAME> (we haven't done that yet)
|
|
* Please don't define constant or local parameters here, only those a user (!) is supposed to change as part of
|
|
* configuring a specific build variant.
|
|
*
|
|
*/
|
|
|
|
// Fast convolution filtering
|
|
// experimental at the moment DD4WH, 2018_08_18
|
|
//#define USE_CONVOLUTION
|
|
|
|
// old LMS noise reduction
|
|
// will probably never used any more
|
|
//#define OBSOLETE_NR
|
|
|
|
// this switches on the autonotch filter based on LMS algorithm
|
|
// leave this switched on, until we have a new autonotch filter approach
|
|
#define USE_LMS_AUTONOTCH
|
|
|
|
// save processor time for the STM32F4
|
|
// changes lowpass decimation filters to 89 taps instead of 199 taps
|
|
// because they run at 48ksps, this is a considerable decrease in processing power
|
|
#ifdef STM32F4
|
|
//#define USE_SMALL_HILBERT_DECIMATION_FILTERS
|
|
#endif
|
|
|
|
// save processor time for the STM32F4
|
|
// changes lowpass decimation filters to 89 taps instead of 199 taps
|
|
// because they run at 48ksps, this is a considerable decrease in processing power
|
|
// this is ONLY relevant for STM32F4 which has SPI !
|
|
// in those machines when enabling NR and other features, ui slows down . . .
|
|
// thus we should enable the small decimation filter in those machines
|
|
|
|
/**
|
|
* This parameter disables certain features / capabilites in order to achieve a minimum build size for
|
|
* the 192k ram / 512k flash STM32F4 machines. Unless you have such a machine, leave this disabled.
|
|
*/
|
|
//#define IS_SMALL_BUILD // ********************************** Small build (512k) Var. 1 (not good)
|
|
#define R928_PLUS // ********************************** For R928 ets with Si5351a alone synthesizer
|
|
//#define OPEN_TX_OUTBAND // Open TX out of band (by Menu option) - not in use now
|
|
//#define GREY_STYLE // ********************************** Monochrome display style
|
|
//#define SEPIA_STYLE // ********************************** Monochrome display style
|
|
//#define SDR_AMBER // ********************************** Russian replica from UB8JDC (SDR)
|
|
//#define SDR_AMBER_480_320 // ********************************** Display 480x320 (3.5")
|
|
//#define SDR_AMBER_4INCH // ********************************** Display 480x320 (4.0")
|
|
//#define SDR_AMBER_PTT_ALT // ********************************** Work CW with pedal is ON - Amber only for F7 and H7!!!
|
|
//#define DDC_AXIS // ********************************** Russian replica from UB8JDC (DDC/DUC)
|
|
//#define OVI40_DISP_320_240 // ********************************** UHSDR don't love displays 320*240 now. Why?
|
|
//#define OVI40_MOD_480_320 // ********************************** Interface like Amber 480x320
|
|
#define FAST_FREQ_ENC // ********************************** The freq encoder is polled more often than 10ms.
|
|
//#define HELP_MENU // ********************************** Show help for system menu - need a lot of RAM
|
|
|
|
#if !defined(IS_SMALL_BUILD)
|
|
#define USE_8bit_FONT
|
|
#define USE_PREDEFINED_WINDOW_DATA
|
|
// OPTION with IS_SMALL_BUILD we are not automatically including USE_FREEDV as it uses lot of memory, both RAM and flash
|
|
#define USE_FREEDV // ********************************** Small build (512k) Var. 2
|
|
#endif // IS_SMALL_BUILD
|
|
|
|
#ifdef SDR_AMBER
|
|
#define DAC_5MW 0
|
|
#define DAC_05W 208
|
|
#define DAC_1W 298
|
|
#define DAC_2W 438
|
|
#define DAC_4W 758
|
|
#define DAC_5W 2048
|
|
#endif
|
|
|
|
// some special switches
|
|
//#define DEBUG_BUILD
|
|
//#define DEBUG_FREEDV
|
|
|
|
// if enabled the alternate (read new and better) noise reduction is active
|
|
// this is the standard NR now (Febr 2018)
|
|
#define USE_ALTERNATE_NR
|
|
#define USE_LEAKY_LMS // Named in interface as ANR
|
|
|
|
// you may optionally define the list of supported GFX drivers externally
|
|
// if you just define EXTERNAL_USE_GFX_CONFIG and no USE_GFX_...
|
|
// you will get a headless system using a dummy display driver
|
|
#ifndef EXTERNAL_USE_GFX_CONFIG
|
|
#define USE_GFX_ILI932x
|
|
#define USE_GFX_ILI9486
|
|
#define USE_GFX_ST7796
|
|
// #define USE_GFX_ILI9341
|
|
// SSD1289 support is not yet working, also requires USE_GFX_ILI932x to be enabled for now.
|
|
// #define USE_GFX_SSD1289
|
|
#define USE_DISP_480_320
|
|
#if defined(STM32F7) || defined(STM32H7)
|
|
#define USE_GFX_RA8875
|
|
#endif
|
|
#endif
|
|
|
|
#define USE_FFT_1024
|
|
|
|
// OPTION
|
|
#define USE_RTTY_PROCESSOR
|
|
|
|
// OPTION
|
|
#define USE_USBHOST
|
|
#ifdef USE_USBHOST
|
|
// define additional USBHOST related "switches" only here!
|
|
// #define USE_USBDRIVE
|
|
#define USE_USBKEYBOARD
|
|
#endif
|
|
|
|
|
|
// use the STM32 internal RTC with an external quartz and
|
|
// M1 and F3 connected to PD14 and PD15 (D0 and D1 of LCD) instead of PC14 and PC15 (to which the 32768 Hz quartz has to be connected)
|
|
#define USE_RTC_LSE
|
|
|
|
// multiple oscillators may be enabled, but only the first detected oscillator is issued
|
|
// i.e. there is currently only support for a single oscillator in a TRX.
|
|
// Support for LO based on SI570
|
|
#define USE_OSC_SI570
|
|
// Support for LO based on SI5351
|
|
#define USE_OSC_SI5351A
|
|
// Support for DUC/DDC board
|
|
#define USE_OSC_DUCDDC
|
|
|
|
// OPTION TO USE FLASH BASED CONFIGURATION STORAGE
|
|
#define USE_CONFIGSTORAGE_FLASH
|
|
|
|
// Option: If defined, high priority tasks are executed in the context of an PendSV interrupt
|
|
// which gives finishing these tasks a priority over "normal", less real-time critical longer running user control tasks
|
|
// such as display redraw.
|
|
// In general this should be defined but in case of issues one may want to execute High Prio tasks not concurrently
|
|
// to normal tasks, comment this in this case and see if the issue goes away. But this may cause other problems
|
|
// of course.
|
|
#define USE_PENDSV_FOR_HIGHPRIO_TASKS
|
|
|
|
// OPTION: Enable handling of TX/RX switching in an interrupt. Provides very low latency switching
|
|
// EXPERIMENTAL !!!
|
|
#define USE_HIGH_PRIO_PTT
|
|
|
|
// OPTION: IQ signal path now use 24bit samples from/to the codecs instead of the default 16bit. Slightly increases RAM usage (+0.5 - 1k).
|
|
// will finally work both on single and dual codec configurations.
|
|
#define USE_32_IQ_BITS
|
|
#define USE_32_AUDIO_BITS
|
|
|
|
// OPTION: Instead of band names for memories and enabling only band memories which are supported
|
|
// by the current RF board, use all available memories
|
|
// this changes the displayed memory name to Mem<Num> instead of Bnd<Wavelength>
|
|
#ifdef RF_BRD_LAPWING
|
|
#define USE_MEMORY_MODE
|
|
#define DEFAULT_MEMORY_FREQ (1240000000)
|
|
#endif
|
|
|
|
// for now: These are fixed.
|
|
#define IQ_SAMPLE_RATE (48000)
|
|
#define AUDIO_SAMPLE_RATE (48000)
|
|
|
|
// a lot of code pieces assume that this frequency
|
|
// is 1500 Hz, so don't change
|
|
#define IQ_INTERRUPT_FREQ (1500)
|
|
|
|
// we process one dma block of samples at once
|
|
// block sizes should be a power of two
|
|
// a lot of code process information in these blocks
|
|
#define IQ_BLOCK_SIZE (IQ_SAMPLE_RATE/IQ_INTERRUPT_FREQ)
|
|
#define AUDIO_BLOCK_SIZE (AUDIO_SAMPLE_RATE/IQ_INTERRUPT_FREQ)
|
|
|
|
// use for clocking based on DMA IRQ
|
|
#define SAMPLES_PER_DMA_CYCLE (IQ_BLOCK_SIZE)
|
|
#define SAMPLES_PER_CENTISECOND (IQ_SAMPLE_RATE/100)
|
|
|
|
|
|
#ifdef STM32F4
|
|
#define USE_SIMPLE_FREEDV_FILTERS
|
|
#define USE_FREEDV_1600
|
|
#else
|
|
#define USE_FREEDV_700D
|
|
#endif
|
|
|
|
|
|
#if (IQ_SAMPLE_RATE) != 48000
|
|
#error Only 48k sample frequency supported (yet).
|
|
#endif
|
|
#if (IQ_BLOCK_SIZE * 1500) != IQ_SAMPLE_RATE
|
|
#error Audio Interrupt Frequency must be 1500.
|
|
#endif
|
|
#if (IQ_SAMPLE_RATE/IQ_BLOCK_SIZE) != (AUDIO_SAMPLE_RATE/AUDIO_BLOCK_SIZE)
|
|
#error IQ Interrupt frequency must be idential to Audio Interrupt Frequency
|
|
#endif
|
|
|
|
|
|
//******************************CONFIGURATION_LOGIC_CHECKS************************************//
|
|
|
|
//#if !defined(USE_OSC_SI570) && !defined(USE_OSC_SI5351A)
|
|
#if !defined(USE_OSC_SI570) && !defined(USE_OSC_SI5351A) && !defined(USE_OSC_DUCDDC)
|
|
#error At least one of supported oscillators should be enabled.
|
|
#endif
|
|
|
|
#if !defined(USE_PENDSV_FOR_HIGHPRIO_TASKS) && defined(USE_HIGH_PRIO_PTT)
|
|
#error USE_HIGH_PRIO_PTT requires USE_PENDSV_FOR_HIGHPRIO_TASKS
|
|
#endif
|
|
|
|
#if defined(USE_32_IQ_BITS) && CODEC_NUM == 1
|
|
#define USE_32_AUDIO_BITS
|
|
#endif
|
|
|
|
#if !defined(USE_GFX_ILI932x) && !defined(USE_GFX_ILI9486)
|
|
#warning Both USE_GFX_ILI932x and USE_GFX_ILI9486 are disabled, no display driver will be available!
|
|
#endif
|
|
|
|
#if defined(UI_BRD_MCHF) && defined(USE_TWO_CHANNEL_AUDIO)
|
|
#error UI_BRD_MCHF does not permit USE_TWO_CHANNEL_AUDIO
|
|
#endif
|
|
|
|
#if CODEC_NUM == 1 && (defined(USE_32_IQ_BITS) && !defined(USE_32_AUDIO_BITS)) || (!defined(USE_32_IQ_BITS) && defined(USE_32_AUDIO_BITS))
|
|
#error With only one codec bit width of iq and audio must match, either define both USE_32_IQ_BITS and USE_32_AUDIO_BITS or none
|
|
#endif
|
|
|
|
#endif
|
|
|