aggiunto oscillatore

This commit is contained in:
nzasch
2021-12-31 04:22:22 +01:00
parent 36ef31c453
commit 9306bc9852
16 changed files with 743 additions and 240 deletions

View File

@@ -13,6 +13,7 @@
#include "tx.h"
#include "rx.h"
#include "interface.h"
#include "si5351.h"
#include "main.h"
#include "FIRFilterCode.h"
#include <arm_math.h>
@@ -33,6 +34,8 @@
// state
uint8_t receive, transmit;
uint32_t frequency;
int32_t rit;
uint16_t pwm_tx_period;
int32_t modulation;
int32_t gain;
int32_t peak, oldpeak, peakset;
@@ -42,6 +45,8 @@ int32_t mic_gain;
int32_t scan;
q31_t nco1_increment;
uint32_t audio_filter_freq, audio_filter_bw, audio_filter_beta;
char tabstring[15];
uint8_t s_meter;
// maschera, ogni bit uno stato
uint16_t state_changed;
@@ -64,9 +69,10 @@ q31_t if_Q[LF_BUFFER_SIZE];
uint8_t lf_buffer_toggle;
q31_t prefilter_lf_buffer[LF_BUFFER_SIZE];
q31_t lf_buffer[2][LF_BUFFER_SIZE];
// q31_t lf_buffer_test[2][LF_BUFFER_SIZE];
// TX
volatile uint8_t half_tx_dac_buffer_empty, tx_dac_buffer_toggle;
// volatile uint8_t half_tx_dac_buffer_empty, tx_dac_buffer_toggle;
q31_t tx_dac_buffer[2][TX_DAC_BUFFER_SIZE];
// ============
@@ -104,6 +110,7 @@ void dequeue_cmd(void){
ringbuf_increment(&rx_cmd_rb_out_idx, RX_CMD_RB_SIZE_MASK);
}
/*
void enqueue_tx(char * data, uint16_t len){
for( uint8_t index = 0; index < len; index++){
uart_tx_buf[uart_tx_buf_in_idx] = data[index];
@@ -111,10 +118,20 @@ void enqueue_tx(char * data, uint16_t len){
if(uart_tx_buf_in_idx == UART_TX_BUFFER_SIZE) break;
}
}
*/
// state changes
void set_frequency(void){
nco1_increment = set_nco1_freq(frequency);
rx_nco1_increment = set_nco1_freq(frequency+rit);
if(TX_TYPE == TX_TYPE_DAC){
tx_nco1_increment = set_nco1_freq(frequency);
}
else if(TX_TYPE == TX_TYPE_PWM){
pwm_tx_period = get_pwm_period(frequency);
}
else if(TX_TYPE == TX_TYPE_SI5351){
si53531_set_frequency(frequency);
}
}
void set_filter(void){
@@ -124,14 +141,15 @@ void set_filter(void){
void set_modulation(void){
st2_filter_init();
// cambia offset
nco1_increment = set_nco1_freq(frequency);
set_frequency();
// nco1_increment = set_nco1_freq(frequency);
}
void set_dummy(void){
// non fare NULLAH
}
// cambiato stato
void set_changed(uint8_t state){
state_changed |= (1U<<state);
}
@@ -146,15 +164,17 @@ uint8_t get_changed(uint8_t state){
void state_set_default(void){
modulation = MOD_USB;
frequency = 98600;
nco1_increment = set_nco1_freq(frequency);
gain = 3;
volume = 16;
frequency = 128000;
rit = 0;
set_frequency();
gain = 2;
volume = 8;
audio_filter_freq = AUDIO_FILTER_FREQ_DEF;
audio_filter_bw = AUDIO_FILTER_BW_DEF;
audio_filter_beta = AUDIO_FILTER_BETA_DEF;
audio_filter_generate_coeffs(audio_filter_coeffs, audio_filter_freq, audio_filter_bw, audio_filter_beta);
state_changed = 0xFFFF;
// strcpy(tabstring, "TX AUD MEM NO");
}
// diag
@@ -167,8 +187,34 @@ void diag(void){
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"2st out sample rate: %d\n", ST2_OUT_SAMPLE_RATE);
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"in gain %d\n", gain);
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"af gain %d\n", volume);
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"nco1 inc %d\n", nco1_increment);
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"rx nco1 inc %d\n", rx_nco1_increment);
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"nco2 inc %d\n", NCO2_INCREMENT);
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"audio filter f %d bw %d\n", audio_filter_freq, audio_filter_bw);
}
uint32_t get_pwm_freq(uint16_t pwm_period){
return CLOCK/pwm_period;
}
uint16_t get_pwm_period(uint32_t pwm_frequency){
return CLOCK/pwm_frequency;
}
uint8_t measure_log_abs_mean(q31_t *samples, uint16_t size){
int32_t measured_signal = 0;
// , old_rx_signal;
uint16_t index = 0;
uint8_t log_sig = 31;
q31_t abs, accu;
while(index < size){
abs = (samples[index] > 0) ? samples[index] : (q31_t)__QSUB(0, samples[index]);
measured_signal += (abs >> 6);
index++;
}
while (log_sig) {
if((measured_signal >> log_sig) & 1) break;
log_sig--;
}
return log_sig;
}