aggiunta cod
This commit is contained in:
148
codice/Core/Inc/bassofono.h
Normal file
148
codice/Core/Inc/bassofono.h
Normal file
@@ -0,0 +1,148 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <arm_math.h>
|
||||
#include "main.h"
|
||||
#include "rx.h"
|
||||
#include "tx.h"
|
||||
|
||||
#define CLOCK (168000000UL)
|
||||
|
||||
// RX ADC
|
||||
#define ADC_CLOCK (700000L) // (168000000/((47,5+12,5)*4)
|
||||
#define OVERSAMPLING (2)
|
||||
#define ADC_SAMPLE_RATE (ADC_CLOCK/OVERSAMPLING)
|
||||
#define ADC_BUFFER_SIZE (1024)
|
||||
#define SAMPLES_BUFFER_RATE (ADC_SAMPLE_RATE/ADC_BUFFER_SIZE)
|
||||
|
||||
// TX DAC
|
||||
#define TX_DAC_SAMPLE_RATE (CLOCK/480)
|
||||
#define TX_DAC_BUFFER_SIZE (1024)
|
||||
#define TX_DAC_BUFFER_RATE (TX_DAC_SAMPLE_RATE/TX_DAC_BUFFER_SIZE)
|
||||
|
||||
// =========== HBF ==========
|
||||
// #define MS_HBF_TAP_NUM (15)
|
||||
|
||||
|
||||
// #define DECIMATION_FACTOR (ADC_BUFFER_SIZE/ST2_BUFFER_SIZE)
|
||||
// #define DECIMATION_FACTOR_MASK (DECIMATION_FACTOR - 1)
|
||||
|
||||
/*
|
||||
// 1° stadio
|
||||
// decimazione del singolo stadio
|
||||
#define MS_DECIMATION_FACTOR (2)
|
||||
#define MS_DECIMATION_FACTOR_MASK (MS_DECIMATION_FACTOR - 1)
|
||||
// ringbuf
|
||||
#define MIXED_SAMPLES_RINGBUFFER_SIZE (64) // l'ultimo deve essere grande almeno come MS_HBF_TAP_NUM
|
||||
#define MIXED_SAMPLES_RINGBUFFER_SIZE_MASK (MIXED_SAMPLES_RINGBUFFER_SIZE - 1)
|
||||
#define MIXED_SAMPLES_2M_RINGBUFFER_SIZE (MIXED_SAMPLES_RINGBUFFER_SIZE / 2)
|
||||
#define MIXED_SAMPLES_2M_RINGBUFFER_SIZE_MASK (MIXED_SAMPLES_2M_RINGBUFFER_SIZE - 1)
|
||||
|
||||
#define ST1_OUT_SAMPLE_RATE (ADC_SAMPLE_RATE/(MS_DECIMATION_FACTOR*2))
|
||||
|
||||
// 2° stadio
|
||||
#define ST2_BUFFER_SIZE (256)
|
||||
#define ST2_DECIMATION_FACTOR (4)
|
||||
#define ST2_OUT_SAMPLE_RATE (ST1_OUT_SAMPLE_RATE/ST2_DECIMATION_FACTOR)
|
||||
#define ST2_FILTER_BLOCK_SIZE (ST2_BUFFER_SIZE)
|
||||
#define ST2_FILTER_TAP_NUM (128)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
// =========== DEMOD ==========
|
||||
|
||||
// DAC_SAMPLE_RATE/((2^32)/(incremento)) = freq
|
||||
// (2^32)/(DAC_SAMPLE_RATE/freq) = incremento
|
||||
#define NCO2_INCREMENT (343597383L)
|
||||
#define NCO2_FREQUENCY (DAC_SAMPLE_RATE/((0xFFFFFFFF)/NCO2_INCREMENT))
|
||||
#define LF_BUFFER_SIZE (ST2_BUFFER_SIZE/ST2_DECIMATION_FACTOR)
|
||||
|
||||
// audio filter
|
||||
#define AUDIO_FILTER_TAP_NUM 128
|
||||
#define AUDIO_FILTER_FREQ_DEF (1350)
|
||||
#define AUDIO_FILTER_FREQ_MAX (DAC_SAMPLE_RATE/2)
|
||||
#define AUDIO_FILTER_BW_DEF (2000)
|
||||
#define AUDIO_FILTER_BW_MAX (DAC_SAMPLE_RATE/2)
|
||||
#define AUDIO_FILTER_BETA_DEF (16)
|
||||
#define AUDIO_FILTER_BLOCK_SIZE LF_BUFFER_SIZE
|
||||
*/
|
||||
// statemask
|
||||
/*
|
||||
#define FREQUENCY_OFFSET 0
|
||||
#define GAIN_OFFSET 1
|
||||
#define VOLUME_OFFSET 2
|
||||
#define FILTER_OFFSET 3
|
||||
#define MODULATION_OFFSET 4
|
||||
*/
|
||||
|
||||
#define MOD_DC 0
|
||||
#define MOD_LSB 1
|
||||
#define MOD_USB 2
|
||||
#define MOD_AM 3
|
||||
|
||||
// === DAC ===
|
||||
#define DAC_DIVISOR 7680
|
||||
#define DAC_SAMPLE_RATE (CLOCK/DAC_DIVISOR)
|
||||
|
||||
// === UART ===
|
||||
#define RX_CMD_RB_SIZE (32)
|
||||
#define RX_CMD_RB_SIZE_MASK (RX_CMD_RB_SIZE - 1)
|
||||
|
||||
#define UART_TX_BUFFER_SIZE (512)
|
||||
|
||||
// ====== VARS ====================
|
||||
|
||||
// state
|
||||
extern uint8_t receive, transmit;
|
||||
extern q31_t nco1_increment;
|
||||
extern uint32_t frequency;
|
||||
extern int32_t modulation;
|
||||
extern int32_t gain;
|
||||
extern int32_t volume;
|
||||
extern int32_t squelch;
|
||||
extern int32_t mic_gain;
|
||||
extern int32_t scan;
|
||||
extern uint32_t audio_filter_freq, audio_filter_bw, audio_filter_beta;
|
||||
extern uint16_t state_changed;
|
||||
|
||||
extern CORDIC_HandleTypeDef hcordic;
|
||||
|
||||
// uartz
|
||||
extern char uart_rx_buf[2], rx_cmd_rb[RX_CMD_RB_SIZE];
|
||||
extern uint8_t rx_cmd_rb_in_idx, rx_cmd_rb_out_idx;
|
||||
|
||||
// uart tx
|
||||
extern char uart_tx_buf[UART_TX_BUFFER_SIZE];
|
||||
extern uint16_t uart_tx_buf_in_idx;
|
||||
|
||||
// rx adc
|
||||
extern uint16_t adc_buffer[ADC_BUFFER_SIZE];
|
||||
|
||||
// tx dac
|
||||
extern q31_t tx_dac_buffer[2][TX_DAC_BUFFER_SIZE];
|
||||
extern volatile uint8_t half_tx_dac_buffer_empty, tx_dac_buffer_toggle;
|
||||
|
||||
extern q31_t if_I[LF_BUFFER_SIZE];
|
||||
extern q31_t if_Q[LF_BUFFER_SIZE];
|
||||
|
||||
// RX DAC
|
||||
extern uint8_t lf_buffer_toggle;
|
||||
extern q31_t prefilter_lf_buffer[LF_BUFFER_SIZE];
|
||||
extern q31_t lf_buffer[2][LF_BUFFER_SIZE];
|
||||
|
||||
// ======== FUNZIONI ========
|
||||
|
||||
int32_t set_nco1_freq(int32_t freq);
|
||||
|
||||
void set_filter(void);
|
||||
void set_frequency(void);
|
||||
void set_modulation(void);
|
||||
void set_dummy (void);
|
||||
uint8_t get_changed(uint8_t state);
|
||||
|
||||
// varie
|
||||
uint16_t ringbuf_increment(uint8_t *index, uint8_t buff_size_mask);
|
||||
q31_t sat_mult_q31(q31_t a, q31_t b);
|
||||
|
||||
// diag
|
||||
void diag(void);
|
||||
Reference in New Issue
Block a user