fix interfaccia
This commit is contained in:
@@ -45,7 +45,10 @@
|
||||
#define MOD_DC 0
|
||||
#define MOD_LSB 1
|
||||
#define MOD_USB 2
|
||||
#define MOD_AM 3
|
||||
#define MOD_CWL 3
|
||||
#define MOD_CWU 4
|
||||
#define MOD_AM 5
|
||||
#define MOD_FM 6
|
||||
|
||||
#define STATUS_RX 0
|
||||
#define STATUS_TX 1
|
||||
@@ -72,7 +75,7 @@ extern uint32_t frequency;
|
||||
extern int32_t rit;
|
||||
extern uint16_t pwm_tx_period;
|
||||
extern int32_t modulation;
|
||||
extern int32_t gain;
|
||||
extern int32_t rx_gain;
|
||||
extern int32_t peak, oldpeak, peakset;
|
||||
extern int32_t volume;
|
||||
extern int32_t squelch;
|
||||
@@ -111,9 +114,16 @@ extern q31_t lf_buffer[2][LF_BUFFER_SIZE];
|
||||
|
||||
// ======== FUNZIONI ========
|
||||
|
||||
void start_transmit(void);
|
||||
void stop_transmit(void);
|
||||
void start_receive(void);
|
||||
void stop_receive(void);
|
||||
|
||||
void set_rx_gain(void);
|
||||
|
||||
int32_t set_nco1_freq(int32_t freq);
|
||||
|
||||
void set_filter(void);
|
||||
// void set_filter(void);
|
||||
void set_frequency(void);
|
||||
void set_modulation(void);
|
||||
void set_dummy (void);
|
||||
|
||||
@@ -82,7 +82,7 @@ struct menu_item {
|
||||
extern uint8_t menu_item, menu_page;
|
||||
extern uint8_t menu_last_item[MENU_PAGE_EOM + 1];
|
||||
|
||||
extern char modulation_list[4][4];
|
||||
extern char modulation_list[][4];
|
||||
extern char status_list[3][3];
|
||||
|
||||
extern struct menu_item items[];
|
||||
|
||||
@@ -54,7 +54,7 @@ extern "C" {
|
||||
void Error_Handler(void);
|
||||
|
||||
/* USER CODE BEGIN EFP */
|
||||
void set_gain(void);
|
||||
// void set_rx_gain(void);
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
||||
|
||||
@@ -78,6 +78,7 @@ void am_demodulator(q31_t *in_I, q31_t *in_Q, uint16_t size, q31_t *out);
|
||||
|
||||
// filtri
|
||||
// void filter_init(void);
|
||||
void set_rx_audio_filter(void);
|
||||
void st2_filter_init(void);
|
||||
void audio_filter_init(void);
|
||||
void audio_filter_generate_coeffs(int32_t *Coeffs, uint32_t freq, uint32_t bw, uint8_t beta);
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#define SI5351_MIN_FREQ 3000
|
||||
#define SI5351_MAX_FREQ 200000000
|
||||
|
||||
// #### registri ####
|
||||
|
||||
#define SI5351_OUT_ENABLE 3
|
||||
#define SI5351_OUT_DIS_STATE 24
|
||||
|
||||
@@ -25,3 +27,8 @@
|
||||
#define SI5351_CRYSTAL_LOAD 183
|
||||
|
||||
extern I2C_HandleTypeDef hi2c1;
|
||||
|
||||
void si53531_initialize(void);
|
||||
void si53531_set_frequency(uint32_t freq, uint8_t synth);
|
||||
void si5351_off(void);
|
||||
void si5351_on(void);
|
||||
|
||||
@@ -4,12 +4,15 @@
|
||||
#include <stdint.h>
|
||||
#include <arm_math.h>
|
||||
|
||||
#define CW_TONE_INCREMENT 0.15
|
||||
#define CW_TONE_VOLUME 2
|
||||
|
||||
#define TX_TYPE_NONE 0
|
||||
#define TX_TYPE_DAC 1
|
||||
#define TX_TYPE_PWM 2
|
||||
#define TX_TYPE_SI5351 3
|
||||
// #define TX_TYPE TX_TYPE_SI5351
|
||||
#define TX_TYPE TX_TYPE_NONE
|
||||
#define TX_TYPE TX_TYPE_SI5351
|
||||
// #define TX_TYPE TX_TYPE_NONE
|
||||
|
||||
#define TX_AUDIO_FILTER_INTERPOLATION_FACTOR (16)
|
||||
#define TX_AUDIO_FILTER_BLOCK_SIZE (1024)
|
||||
@@ -43,4 +46,7 @@ void ssb_modulator(q31_t *in_I, q31_t *in_Q, uint16_t size, q31_t *out, q31_t nc
|
||||
void dc_modulator(q31_t *in, uint16_t size, q31_t *out);
|
||||
void am_modulator(q31_t *in_I, q31_t *in_Q, uint16_t size, q31_t *out);
|
||||
|
||||
uint16_t u12_sine(void);
|
||||
void generate_tone(q31_t *buffer, uint16_t buffer_size);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -37,7 +37,7 @@ uint32_t frequency;
|
||||
int32_t rit;
|
||||
uint16_t pwm_tx_period;
|
||||
int32_t modulation;
|
||||
int32_t gain;
|
||||
int32_t rx_gain;
|
||||
int32_t peak, oldpeak, peakset;
|
||||
int32_t volume;
|
||||
int32_t squelch;
|
||||
@@ -79,8 +79,8 @@ q31_t tx_dac_buffer[2][TX_DAC_BUFFER_SIZE];
|
||||
|
||||
int32_t set_nco1_freq(int32_t freq){
|
||||
int64_t tmp_increment;
|
||||
if(modulation == MOD_USB) freq += (NCO2_FREQUENCY);
|
||||
else if(modulation == MOD_LSB) freq -= (NCO2_FREQUENCY);
|
||||
if(modulation == MOD_USB || modulation == MOD_CWU) freq += (NCO2_FREQUENCY);
|
||||
else if(modulation == MOD_LSB || modulation == MOD_CWL) freq -= (NCO2_FREQUENCY);
|
||||
tmp_increment = ((int64_t)freq * 0x100000000LL)/RX_ADC_SAMPLE_RATE;
|
||||
return (int32_t)tmp_increment;
|
||||
}
|
||||
@@ -130,14 +130,15 @@ void set_frequency(void){
|
||||
pwm_tx_period = get_pwm_period(frequency);
|
||||
}
|
||||
else if(TX_TYPE == TX_TYPE_SI5351){
|
||||
si53531_set_frequency(frequency);
|
||||
si53531_set_frequency(frequency, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
void set_filter(void){
|
||||
audio_filter_generate_coeffs(audio_filter_coeffs, audio_filter_freq, audio_filter_bw, audio_filter_beta);
|
||||
}
|
||||
|
||||
*/
|
||||
void set_modulation(void){
|
||||
st2_filter_init();
|
||||
// cambia offset
|
||||
@@ -162,11 +163,11 @@ uint8_t get_changed(uint8_t state){
|
||||
}
|
||||
|
||||
void state_set_default(void){
|
||||
modulation = MOD_USB;
|
||||
modulation = MOD_CWU;
|
||||
frequency = 128000;
|
||||
rit = 0;
|
||||
set_frequency();
|
||||
gain = 2;
|
||||
rx_gain = 2;
|
||||
volume = 8;
|
||||
audio_filter_freq = RX_AUDIO_FILTER_FREQ_DEF;
|
||||
audio_filter_bw = RX_AUDIO_FILTER_BW_DEF;
|
||||
@@ -184,7 +185,7 @@ void diag(void){
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"1st out sample rate: %d\n", ST1_OUT_SAMPLE_RATE);
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"2st buffer size: %d\n2st decimation factor: %d\n", ST2_BUFFER_SIZE, ST2_DECIMATION_FACTOR * 2);
|
||||
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,"in rx_gain %d\n", rx_gain);
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"af gain %d\n", volume);
|
||||
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);
|
||||
@@ -216,3 +217,7 @@ uint8_t measure_log_abs_mean(q31_t *samples, uint16_t size){
|
||||
}
|
||||
return log_sig;
|
||||
}
|
||||
|
||||
void set_LO_freq(uint32_t freq){
|
||||
|
||||
}
|
||||
|
||||
@@ -32,18 +32,18 @@ struct menu_item {
|
||||
|
||||
// name, type, size,row,col,step, min, max, wrap suffix *varptr, set_function_ptr print_function_ptr
|
||||
struct menu_item items[] = {
|
||||
{MENU_PAGE_DEFAULT, " Frequency", TYP_INT, 9, 1, 0, 100, 1000, 175000, WRAP, "", " Hz", &frequency, &set_frequency, &print_frequency},
|
||||
{MENU_PAGE_DEFAULT, " Frequency", TYP_INT, 9, 1, 0, 100, 1000, 1750000,WRAP, "", " Hz", &frequency, &set_frequency, &print_frequency},
|
||||
// {MENU_PAGE_DEFAULT, " Rit ", TYP_INT, 4, 2, 0, 10, 0, 9999, SAT, "", "", &rit, &set_frequency, &print_frequency},
|
||||
{MENU_PAGE_DEFAULT, " Volume ", TYP_INT, 5, 2, 0, 1, 0, 32, SAT, "", "|", &volume, &set_dummy, &print_bar},
|
||||
{MENU_PAGE_DEFAULT, " Gain ", TYP_INT, 1, 2, 7, 1, 1, 6, SAT, "", "x", &gain, &set_gain, &print_integer},
|
||||
{MENU_PAGE_DEFAULT, " Modulation", TYP_INT, 3, 2, 10, 1, 0, 3, WRAP, "", "", &modulation, &set_modulation,&print_modulation},
|
||||
{MENU_PAGE_DEFAULT, " Gain ", TYP_INT, 1, 2, 7, 1, 1, 6, SAT, "", "x", &rx_gain, &set_rx_gain, &print_integer},
|
||||
{MENU_PAGE_DEFAULT, " Modulation", TYP_INT, 3, 2, 10, 1, 0, 6, WRAP, "", "", &modulation, &set_modulation,&print_modulation},
|
||||
// {MENU_PAGE_DEFAULT, " Squelch ", TYP_INT, 2, 3, 10, 1, 0, 32, SAT, "", "", &squelch, &set_dummy, &print_integer},
|
||||
|
||||
{MENU_PAGE_AUDIO, " Filter CF ", TYP_INT, 4, 1, 0, 50, 50, 3500, SAT, "", " Hz", &audio_filter_freq, &set_filter, &print_integer},
|
||||
{MENU_PAGE_AUDIO, " Filter BW ", TYP_INT, 4, 2, 0, 50, 50, 2500, SAT, "", " Hz", &audio_filter_bw, &set_filter, &print_integer},
|
||||
{MENU_PAGE_AUDIO, " Filter Q ", TYP_INT, 2, 3, 0, 1, 1, 32, SAT, "", " Q", &audio_filter_beta, &set_filter, &print_integer},
|
||||
{MENU_PAGE_AUDIO, " Filter CF ", TYP_INT, 4, 1, 0, 50, 50, 3500, SAT, "", " Hz", &audio_filter_freq, &set_rx_audio_filter, &print_integer},
|
||||
{MENU_PAGE_AUDIO, " Filter BW ", TYP_INT, 4, 2, 0, 50, 50, 2500, SAT, "", " Hz", &audio_filter_bw, &set_rx_audio_filter, &print_integer},
|
||||
{MENU_PAGE_AUDIO, " Filter Q ", TYP_INT, 2, 3, 0, 1, 1, 32, SAT, "", " Q", &audio_filter_beta, &set_rx_audio_filter, &print_integer},
|
||||
|
||||
{MENU_PAGE_ALL, " Signal ", TYP_NED, 13, 4, 0, 0, 0, 0, SAT, "S", "", &s_meter, &set_dummy, &print_bar},
|
||||
{MENU_PAGE_ALL, " Signal ", TYP_NED, 13, 4, 0, 0, 0, 0, SAT, "S", "", &s_meter, &set_dummy, &print_bar},
|
||||
{MENU_PAGE_ALL, " TX tab ", TYP_NED, 3, 5, 0, 0, 0, 0, SAT, "", "", "PTT", &set_dummy, &print_string},
|
||||
{MENU_PAGE_ALL, " Tabs ", TYP_NED, 3, 5, 4, 0, 0, 0, SAT, "", "", "SET", &set_dummy, &print_string},
|
||||
{MENU_PAGE_ALL, " Tabs ", TYP_NED, 2, 5, 9, 0, 0, 0, SAT, "", "", "BL", &set_dummy, &print_string},
|
||||
@@ -63,7 +63,10 @@ char modulation_list[][4] = {
|
||||
[MOD_DC] = "DC",
|
||||
[MOD_LSB] = "LSB",
|
||||
[MOD_USB] = "USB",
|
||||
[MOD_AM] = "AM"
|
||||
[MOD_CWL] = "CWL",
|
||||
[MOD_CWU] = "CWU",
|
||||
[MOD_AM] = "AM",
|
||||
[MOD_FM] = "FM"
|
||||
};
|
||||
|
||||
uint8_t modulation_list_count = sizeof(modulation_list)/sizeof(modulation_list[0]);
|
||||
@@ -334,12 +337,12 @@ void tab_down(uint8_t tab){
|
||||
void display_init(void){
|
||||
// https://git.lattuga.net/asdrea/tosta
|
||||
// caratteri print_bar
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[128,255,0,0,0,0,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[129,255,255,0,0,0,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[130,255,255,255,0,0,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[131,255,255,255,255,0,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[132,255,255,255,255,255,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[133,255,255,255,255,255,255c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[128,127,0,0,0,0,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[129,127,127,0,0,0,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[130,127,127,127,0,0,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[131,127,127,127,127,0,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[132,127,127,127,127,127,0c");
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[133,127,127,127,127,127,127c");
|
||||
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[%ds",DISPLAY_STANDBY_TIMER);
|
||||
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[150,100q");
|
||||
|
||||
@@ -235,6 +235,12 @@ void start_transmit(void){
|
||||
} else if(TX_TYPE == TX_TYPE_SI5351){
|
||||
si5351_on();
|
||||
}
|
||||
if(modulation == MOD_CWL || modulation == MOD_CWU){
|
||||
// TONO su DAC
|
||||
HAL_TIM_Base_Start(&htim6);
|
||||
HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);
|
||||
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, lf_buffer, (LF_BUFFER_SIZE * 2), DAC_ALIGN_12B_R);
|
||||
}
|
||||
}
|
||||
|
||||
void stop_transmit(void){
|
||||
@@ -252,6 +258,12 @@ void stop_transmit(void){
|
||||
} else if(TX_TYPE == TX_TYPE_SI5351){
|
||||
si5351_off();
|
||||
}
|
||||
if(modulation == MOD_CWL || modulation == MOD_CWU){
|
||||
// DAC
|
||||
HAL_TIM_Base_Stop(&htim6);
|
||||
HAL_DAC_Stop(&hdac1,DAC_CHANNEL_1);
|
||||
HAL_DAC_Stop_DMA(&hdac1, DAC_CHANNEL_1);
|
||||
}
|
||||
}
|
||||
|
||||
void start_receive(void){
|
||||
@@ -276,9 +288,9 @@ void stop_receive(void){
|
||||
HAL_DAC_Stop_DMA(&hdac1, DAC_CHANNEL_1);
|
||||
}
|
||||
|
||||
void set_gain(void){
|
||||
void set_rx_gain(void){
|
||||
HAL_OPAMP_Stop(&hopamp1);
|
||||
switch (gain){
|
||||
switch (rx_gain){
|
||||
case 1:
|
||||
hopamp1.Init.PgaGain = OPAMP_PGA_GAIN_2_OR_MINUS_1;
|
||||
break;
|
||||
@@ -301,9 +313,8 @@ void set_gain(void){
|
||||
hopamp1.Init.PgaGain = OPAMP_PGA_GAIN_2_OR_MINUS_1;
|
||||
break;
|
||||
}
|
||||
HAL_OPAMP_Init(&hopamp1);
|
||||
HAL_OPAMP_Start(&hopamp1);
|
||||
|
||||
HAL_OPAMP_Init(&hopamp1);
|
||||
HAL_OPAMP_Start(&hopamp1);
|
||||
}
|
||||
|
||||
|
||||
@@ -367,7 +378,7 @@ int main(void)
|
||||
audio_filter_init();
|
||||
// diag();
|
||||
HAL_OPAMP_Start(&hopamp1);
|
||||
set_gain();
|
||||
set_rx_gain();
|
||||
HAL_TIM_Base_Start_IT(&htim7);
|
||||
HAL_UART_Receive_IT(&huart1, uart_rx_buf, 1);
|
||||
// HAL_UART_Receive_IT(&huart2, uart_rx_buf, 1);
|
||||
@@ -376,7 +387,6 @@ int main(void)
|
||||
// rooto!
|
||||
si53531_initialize();
|
||||
}
|
||||
|
||||
|
||||
start_receive();
|
||||
/* USER CODE END 2 */
|
||||
@@ -387,7 +397,7 @@ int main(void)
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
HAL_GPIO_TogglePin(GPIO1_GPIO_Port, GPIO1_Pin);
|
||||
// HAL_GPIO_TogglePin(GPIO1_GPIO_Port, GPIO1_Pin);
|
||||
// receive = transmit = 0;
|
||||
if(receive){
|
||||
if(rx_adc_buffer_ready){
|
||||
@@ -399,7 +409,7 @@ int main(void)
|
||||
if(half_rx_dac_buffer_empty){
|
||||
// HAL_GPIO_WritePin(GPIO1_GPIO_Port, GPIO1_Pin, SET);
|
||||
if (modulation == MOD_DC) dc_demodulator(if_I, LF_BUFFER_SIZE, prefilter_lf_buffer);
|
||||
else if(modulation == MOD_LSB || modulation == MOD_USB) ssb_demodulator(if_I, if_Q, LF_BUFFER_SIZE, prefilter_lf_buffer, NCO2_INCREMENT);
|
||||
else if(modulation == MOD_LSB || modulation == MOD_USB || modulation == MOD_CWL || modulation == MOD_CWU) ssb_demodulator(if_I, if_Q, LF_BUFFER_SIZE, prefilter_lf_buffer, NCO2_INCREMENT);
|
||||
else if (modulation == MOD_AM) am_demodulator(if_I, if_Q, LF_BUFFER_SIZE, prefilter_lf_buffer);
|
||||
arm_fir_q31(&audio_filter_struct, prefilter_lf_buffer, lf_buffer[lf_buffer_toggle], RX_AUDIO_FILTER_BLOCK_SIZE);
|
||||
// arm_fir_q31(&audio_filter_struct, prefilter_lf_buffer, lf_buffer_test[lf_buffer_toggle], AUDIO_FILTER_BLOCK_SIZE);
|
||||
@@ -419,6 +429,12 @@ int main(void)
|
||||
else if(modulation == MOD_LSB || modulation == MOD_USB) ssb_modulator(if_I, if_Q, LF_BUFFER_SIZE, prefilter_lf_buffer, NCO2_INCREMENT);
|
||||
else if (modulation == MOD_AM) am_modulator(if_I, if_Q, LF_BUFFER_SIZE, prefilter_lf_buffer);
|
||||
}
|
||||
|
||||
if(half_rx_dac_buffer_empty && (modulation == MOD_CWL || modulation == MOD_CWU)){
|
||||
generate_tone(lf_buffer[lf_buffer_toggle], LF_BUFFER_SIZE);
|
||||
half_rx_dac_buffer_empty = 0;
|
||||
}
|
||||
|
||||
}
|
||||
if(tick){
|
||||
// consuma coda comandi
|
||||
|
||||
@@ -234,10 +234,10 @@ inline q31_t hb_fir15(q31_t * samples_ringbuf, uint8_t sample_index, uint8_t buf
|
||||
}
|
||||
|
||||
void st2_filter_init(void){
|
||||
if((modulation == MOD_LSB) || (modulation == MOD_USB)){
|
||||
if((modulation == MOD_LSB) || (modulation == MOD_USB || modulation == MOD_CWL || modulation == MOD_CWU)){
|
||||
arm_fir_decimate_init_q31(&st2_filter_I_struct, ST2_FILTER_TAP_NUM, ST2_DECIMATION_FACTOR, &st2_filter_taps[0], &st2_filter_I_state[0], ST2_FILTER_BLOCK_SIZE);
|
||||
arm_fir_decimate_init_q31(&st2_filter_Q_struct, ST2_FILTER_TAP_NUM, ST2_DECIMATION_FACTOR, &st2_filter_taps[0], &st2_filter_Q_state[0], ST2_FILTER_BLOCK_SIZE);
|
||||
} else if ((modulation == MOD_DC) || (modulation == MOD_AM)){
|
||||
} else if ((modulation == MOD_DC) || (modulation == MOD_AM || modulation == MOD_FM)){
|
||||
arm_fir_decimate_init_q31(&st2_filter_I_struct, ST2_FILTER_TAP_NUM, ST2_DECIMATION_FACTOR, &st2_wide_taps[0], &st2_filter_I_state[0], ST2_FILTER_BLOCK_SIZE);
|
||||
arm_fir_decimate_init_q31(&st2_filter_Q_struct, ST2_FILTER_TAP_NUM, ST2_DECIMATION_FACTOR, &st2_wide_taps[0], &st2_filter_Q_state[0], ST2_FILTER_BLOCK_SIZE);
|
||||
}
|
||||
@@ -260,3 +260,7 @@ void audio_filter_generate_coeffs(int32_t *Coeffs, uint32_t freq, uint32_t bw, u
|
||||
Coeffs[index] = (int32_t) ( (double)(FPCoeff[index])*(double)0x7FFFFFFF );
|
||||
}
|
||||
}
|
||||
|
||||
void set_rx_audio_filter(void){
|
||||
audio_filter_generate_coeffs(audio_filter_coeffs, audio_filter_freq, audio_filter_bw, audio_filter_beta);
|
||||
}
|
||||
|
||||
@@ -44,14 +44,14 @@ void CalcRegisters(uint32_t fout, uint8_t *regs){
|
||||
rd++;
|
||||
}
|
||||
rx_div = rd << 4;
|
||||
|
||||
|
||||
d = 600e6 / (r * fout); // Use lowest VCO frequency but handle d minimum
|
||||
if (d % 2) // Make d even to reduce spurious and phase noise/jitter, see datasheet 4.1.2.1.
|
||||
d++;
|
||||
|
||||
|
||||
if (d * r * fout < 600e6) // VCO frequency to low check and maintain an even d value
|
||||
d += 2;
|
||||
}
|
||||
}
|
||||
else // 292968 Hz <= fout <= 150 MHz
|
||||
{
|
||||
d = 600e6 / fout; // Use lowest VCO frequency but handle d minimum
|
||||
@@ -144,20 +144,22 @@ void si53531_initialize(){
|
||||
// si5351_write8(SI5351_OUT_ENABLE, 0xFC); // Output Enable Control. Active low
|
||||
}
|
||||
|
||||
void si53531_set_frequency(uint32_t freq){
|
||||
void si53531_set_frequency(uint32_t freq, uint8_t synth){
|
||||
uint8_t regs[16];
|
||||
CalcRegisters(freq, regs);
|
||||
|
||||
|
||||
// Load PLLA Feedback Multisynth NA
|
||||
for (int i = 0; i < 8; i++)
|
||||
si5351_write8(SI5351_PLLA + i, regs[i]);
|
||||
|
||||
// Load Output Multisynth0 with d (e and f already set during init. and never changed)
|
||||
for (int i = 10; i < 13; i++)
|
||||
si5351_write8(34 + i, regs[i]);
|
||||
|
||||
for (int i = 10; i < 13; i++)
|
||||
si5351_write8(42 + i, regs[i]);
|
||||
if(synth = 0){
|
||||
for (int i = 10; i < 13; i++)
|
||||
si5351_write8(34 + i, regs[i]);
|
||||
} else if(synth = 1){
|
||||
for (int i = 10; i < 13; i++)
|
||||
si5351_write8(42 + i, regs[i]);
|
||||
}
|
||||
|
||||
// Reset PLLA
|
||||
// delayMicroseconds(500); // Allow registers to settle before resetting the PLL
|
||||
|
||||
@@ -87,3 +87,18 @@ void tx_audio_filter_init(void){
|
||||
arm_fir_interpolate_init_q15 (&tx_audio_filter_I_struct, TX_AUDIO_FILTER_INTERPOLATION_FACTOR, TX_AUDIO_FILTER_TAP_NUM, tx_audio_filter_coeffs, &tx_audio_filter_I_state[0], TX_AUDIO_FILTER_BLOCK_SIZE);
|
||||
arm_fir_interpolate_init_q15 (&tx_audio_filter_Q_struct, TX_AUDIO_FILTER_INTERPOLATION_FACTOR, TX_AUDIO_FILTER_TAP_NUM, tx_audio_filter_coeffs, &tx_audio_filter_Q_state[0], TX_AUDIO_FILTER_BLOCK_SIZE);
|
||||
}
|
||||
|
||||
uint16_t u12_sine(void){
|
||||
static double angle;
|
||||
angle += CW_TONE_INCREMENT;
|
||||
if(angle >= 6.28) angle = 0;
|
||||
return (uint16_t)((sin(angle) * CW_TONE_VOLUME) + 0x7ff);
|
||||
}
|
||||
|
||||
void generate_tone(q31_t *buffer, uint16_t buffer_size){
|
||||
uint16_t i;
|
||||
while(i < buffer_size){
|
||||
buffer[i] = u12_sine();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user