#include #include #include #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);