This commit is contained in:
nzasch
2022-01-01 02:10:06 +01:00
parent 8fe05fdf5e
commit 9a2f5c0069
11 changed files with 344 additions and 28 deletions

Binary file not shown.

View File

@@ -5,34 +5,42 @@
#include "rx.h" #include "rx.h"
#include "tx.h" #include "tx.h"
/*
#define TX_TYPE_NONE 0 #define TX_TYPE_NONE 0
#define TX_TYPE_DAC 1 #define TX_TYPE_DAC 1
#define TX_TYPE_PWM 2 #define TX_TYPE_PWM 2
#define TX_TYPE_SI5351 3 #define TX_TYPE_SI5351 3
// #define TX_TYPE TX_TYPE_SI5351 // #define TX_TYPE TX_TYPE_SI5351
#define TX_TYPE TX_TYPE_NONE #define TX_TYPE TX_TYPE_NONE
*/
#define IF_TYPE_NOIF 0 #define IF_TYPE_NOIF 0 // la frequenza del dac o del dds e' pari alla frequenza impostata
#define IF_TYPE_LOMIX 1 #define IF_TYPE_LOMIX 1
#define IF_TYPE IF_TYPE_NOIF #define IF_TYPE IF_TYPE_NOIF
#define LO_TYPE_FIX 0 #define LO_TYPE_FIX 0
#define LO_TYPE_SI5351 1 #define LO_TYPE_SI5351 1
#define LO_TYPE LO_TYPE_SI5351 #define LO_TYPE LO_TYPE_SI5351
#define LO_TYPE_FIX_FREQ 0 // frequenza di LO
#define CLOCK (168000000UL) #define CLOCK (168000000UL)
/*
// RX ADC // RX ADC
#define ADC_CLOCK (700000L) // (168000000/((47,5+12,5)*4) #define ADC_CLOCK (700000L) // (168000000/((47,5+12,5)*4)
#define OVERSAMPLING (2) #define ADC_OVERSAMPLING (2)
#define ADC_SAMPLE_RATE (ADC_CLOCK/OVERSAMPLING) #define ADC_SAMPLE_RATE (ADC_CLOCK/ADC_OVERSAMPLING)
#define ADC_BUFFER_SIZE (1024) #define ADC_BUFFER_SIZE (1024)
#define SAMPLES_BUFFER_RATE (ADC_SAMPLE_RATE/ADC_BUFFER_SIZE) #define ADC_SAMPLES_BUFFER_RATE (ADC_SAMPLE_RATE/ADC_BUFFER_SIZE)
*/
/*
// TX DAC // TX DAC
#define TX_DAC_SAMPLE_RATE (CLOCK/480) #define TX_DAC_SAMPLE_RATE (CLOCK/480)
#define TX_DAC_BUFFER_SIZE (1024) #define TX_DAC_BUFFER_SIZE (1024)
#define TX_DAC_BUFFER_RATE (TX_DAC_SAMPLE_RATE/TX_DAC_BUFFER_SIZE) #define TX_DAC_BUFFER_RATE (TX_DAC_SAMPLE_RATE/TX_DAC_BUFFER_SIZE)
*/
#define MOD_DC 0 #define MOD_DC 0
#define MOD_LSB 1 #define MOD_LSB 1
@@ -43,9 +51,11 @@
#define STATUS_TX 1 #define STATUS_TX 1
#define STATUS_SQ 2 #define STATUS_SQ 2
/*
// === DAC === // === DAC ===
#define DAC_DIVISOR 7680 #define RX_DAC_DIVISOR 7680
#define DAC_SAMPLE_RATE (CLOCK/DAC_DIVISOR) #define RX_DAC_SAMPLE_RATE (CLOCK/RX_DAC_DIVISOR)
*/
// === UART === // === UART ===
#define RX_CMD_RB_SIZE (32) #define RX_CMD_RB_SIZE (32)
@@ -84,7 +94,7 @@ extern char uart_tx_buf[UART_TX_BUFFER_SIZE];
extern uint16_t uart_tx_buf_in_idx; extern uint16_t uart_tx_buf_in_idx;
// rx adc // rx adc
extern uint16_t adc_buffer[ADC_BUFFER_SIZE]; extern uint16_t adc_buffer[RX_ADC_BUFFER_SIZE];
// tx dac // tx dac
extern q31_t tx_dac_buffer[2][TX_DAC_BUFFER_SIZE]; extern q31_t tx_dac_buffer[2][TX_DAC_BUFFER_SIZE];

View File

@@ -48,7 +48,7 @@
#define MENU_NAME_ROW 0 #define MENU_NAME_ROW 0
#define MENU_NAME_COL 0 #define MENU_NAME_COL 0
#define DISPLAY_BL_DIM 0 #define DISPLAY_BL_DIM 50
#define DISPLAY_ROWS 6 #define DISPLAY_ROWS 6
#define DISPLAY_COLS 14 #define DISPLAY_COLS 14
@@ -110,3 +110,6 @@ char * valToStr(uint32_t val, char *buf, uint8_t bufSize, char sepChar);
uint8_t sat_subu8b(uint8_t x, uint8_t y); uint8_t sat_subu8b(uint8_t x, uint8_t y);
void menu_item_up(void); void menu_item_up(void);
void menu_item_down(void); void menu_item_down(void);
void display_backlight_on(void);
void display_backlight_off(void);

View File

@@ -4,8 +4,16 @@
#include <stdint.h> #include <stdint.h>
#include <arm_math.h> #include <arm_math.h>
// RX ADC
#define RX_ADC_CLOCK (700000L) // (168000000/((47,5+12,5)*4)
#define RX_ADC_OVERSAMPLING (2)
#define RX_ADC_SAMPLE_RATE (RX_ADC_CLOCK/RX_ADC_OVERSAMPLING)
#define RX_ADC_BUFFER_SIZE (1024)
#define RX_ADC_SAMPLES_BUFFER_RATE (RX_ADC_SAMPLE_RATE/RX_ADC_BUFFER_SIZE)
#define NCO2_INCREMENT (343597383L) #define NCO2_INCREMENT (343597383L)
#define NCO2_FREQUENCY (DAC_SAMPLE_RATE/((0xFFFFFFFF)/NCO2_INCREMENT)) #define NCO2_FREQUENCY (RX_DAC_SAMPLE_RATE/((0xFFFFFFFF)/NCO2_INCREMENT))
// 1° stadio // 1° stadio
// decimazione del singolo stadio // decimazione del singolo stadio
@@ -18,7 +26,7 @@
#define MIXED_SAMPLES_2M_RINGBUFFER_SIZE (MIXED_SAMPLES_RINGBUFFER_SIZE / 2) #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 MIXED_SAMPLES_2M_RINGBUFFER_SIZE_MASK (MIXED_SAMPLES_2M_RINGBUFFER_SIZE - 1)
#define ST1_OUT_SAMPLE_RATE (ADC_SAMPLE_RATE/(MS_DECIMATION_FACTOR*2)) #define ST1_OUT_SAMPLE_RATE (RX_ADC_SAMPLE_RATE/(MS_DECIMATION_FACTOR*2))
// 2° stadio // 2° stadio
#define ST2_BUFFER_SIZE (256) #define ST2_BUFFER_SIZE (256)
@@ -32,14 +40,18 @@
// audio filter // audio filter
#define AUDIO_FILTER_TAP_NUM 128 #define AUDIO_FILTER_TAP_NUM 128
#define AUDIO_FILTER_FREQ_DEF (1250) #define AUDIO_FILTER_FREQ_DEF (1250)
#define AUDIO_FILTER_FREQ_MAX (DAC_SAMPLE_RATE/2) #define AUDIO_FILTER_FREQ_MAX (RX_DAC_SAMPLE_RATE/2)
#define AUDIO_FILTER_BW_DEF (2000) #define AUDIO_FILTER_BW_DEF (2000)
#define AUDIO_FILTER_BW_MAX (DAC_SAMPLE_RATE/2) #define AUDIO_FILTER_BW_MAX (RX_DAC_SAMPLE_RATE/2)
#define AUDIO_FILTER_BETA_DEF (16) #define AUDIO_FILTER_BETA_DEF (16)
#define AUDIO_FILTER_BLOCK_SIZE LF_BUFFER_SIZE #define AUDIO_FILTER_BLOCK_SIZE LF_BUFFER_SIZE
#define RX_SMETER_SCALE 4 #define RX_SMETER_SCALE 4
// === DAC ===
#define RX_DAC_DIVISOR 7680
#define RX_DAC_SAMPLE_RATE (CLOCK/RX_DAC_DIVISOR)
extern uint8_t rx_signal, rx_signal_last; extern uint8_t rx_signal, rx_signal_last;
extern q31_t rx_nco1_increment; extern q31_t rx_nco1_increment;

View File

@@ -4,10 +4,22 @@
#include <stdint.h> #include <stdint.h>
#include <arm_math.h> #include <arm_math.h>
#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_AUDIO_FILTER_INTERPOLATION_FACTOR (16) #define TX_AUDIO_FILTER_INTERPOLATION_FACTOR (16)
#define TX_AUDIO_FILTER_BLOCK_SIZE (1024) #define TX_AUDIO_FILTER_BLOCK_SIZE (1024)
#define TX_AUDIO_FILTER_TAP_NUM (128) #define TX_AUDIO_FILTER_TAP_NUM (128)
// 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)
extern uint8_t tx_signal, tx_signal_last; extern uint8_t tx_signal, tx_signal_last;
extern q31_t tx_nco1_increment; extern q31_t tx_nco1_increment;

View File

@@ -60,7 +60,7 @@ char uart_tx_buf[UART_TX_BUFFER_SIZE];
uint16_t uart_tx_buf_in_idx; uint16_t uart_tx_buf_in_idx;
// bufffah // bufffah
uint16_t adc_buffer[ADC_BUFFER_SIZE]; uint16_t adc_buffer[RX_ADC_BUFFER_SIZE];
q31_t if_I[LF_BUFFER_SIZE]; q31_t if_I[LF_BUFFER_SIZE];
q31_t if_Q[LF_BUFFER_SIZE]; q31_t if_Q[LF_BUFFER_SIZE];
@@ -81,7 +81,7 @@ int32_t set_nco1_freq(int32_t freq){
int64_t tmp_increment; int64_t tmp_increment;
if(modulation == MOD_USB) freq += (NCO2_FREQUENCY); if(modulation == MOD_USB) freq += (NCO2_FREQUENCY);
else if(modulation == MOD_LSB) freq -= (NCO2_FREQUENCY); else if(modulation == MOD_LSB) freq -= (NCO2_FREQUENCY);
tmp_increment = ((int64_t)freq * 0x100000000LL)/ADC_SAMPLE_RATE; tmp_increment = ((int64_t)freq * 0x100000000LL)/RX_ADC_SAMPLE_RATE;
return (int32_t)tmp_increment; return (int32_t)tmp_increment;
} }
@@ -180,8 +180,8 @@ void state_set_default(void){
// diag // diag
void diag(void){ void diag(void){
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"ADC sample rate: %d\nADC oversampling: %d\n", ADC_SAMPLE_RATE, OVERSAMPLING); uart_tx_buf_in_idx += sprintf(uart_tx_buf,"ADC sample rate: %d\nADC oversampling: %d\n", RX_ADC_SAMPLE_RATE, RX_ADC_OVERSAMPLING);
uart_tx_buf_in_idx += sprintf(uart_tx_buf,"ADC buffer size: %d\n1st decimation factor: %d\n", ADC_BUFFER_SIZE, MS_DECIMATION_FACTOR * 2); uart_tx_buf_in_idx += sprintf(uart_tx_buf,"ADC buffer size: %d\n1st decimation factor: %d\n", RX_ADC_BUFFER_SIZE, MS_DECIMATION_FACTOR * 2);
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,"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 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,"2st out sample rate: %d\n", ST2_OUT_SAMPLE_RATE);

View File

@@ -46,7 +46,7 @@ struct menu_item items[] = {
{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, " 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, 3, 5, 4, 0, 0, 0, SAT, "", "", "SET", &set_dummy, &print_string},
{MENU_PAGE_ALL, " Tabs ", TYP_NED, 1, 5, 9, 0, 0, 0, SAT, "", "", "-", &set_dummy, &print_string}, {MENU_PAGE_ALL, " Tabs ", TYP_NED, 2, 5, 9, 0, 0, 0, SAT, "", "", "BL", &set_dummy, &print_string},
{MENU_PAGE_ALL, " Tabs ", TYP_NED, 1, 5, 12, 0, 0, 0, SAT, "", "", "+", &set_dummy, &print_string}, {MENU_PAGE_ALL, " Tabs ", TYP_NED, 1, 5, 12, 0, 0, 0, SAT, "", "", "+", &set_dummy, &print_string},
}; };
@@ -307,8 +307,9 @@ void tab_up(uint8_t tab){
display_update_state(); display_update_state();
break; break;
case 2: case 2:
encoder_increment(); // encoder_increment();
click(); // click();
display_backlight_on();
break; break;
case 3: case 3:
encoder_decrement(); encoder_decrement();
@@ -323,6 +324,9 @@ void tab_down(uint8_t tab){
stop_transmit(); stop_transmit();
start_receive(); start_receive();
break; break;
case 2:
display_backlight_off();
break;
} }
} }
@@ -339,7 +343,7 @@ void display_init(void){
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[%ds",DISPLAY_STANDBY_TIMER);
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[150,100q"); uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[150,100q");
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[%db",DISPLAY_BL_DIM); uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[%db",0);
// uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\a"); // uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\a");
clear_display(); clear_display();
} }
@@ -424,3 +428,11 @@ void click(void){
void clear_display(void){ void clear_display(void){
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\f"); uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\f");
} }
void display_backlight_on(void){
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[%db",DISPLAY_BL_DIM);
}
void display_backlight_off(void){
uart_tx_buf_in_idx += sprintf(uart_tx_buf+uart_tx_buf_in_idx,"\x1B[%db",0);
}

View File

@@ -45,17 +45,20 @@
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc1;
ADC_HandleTypeDef hadc2;
DMA_HandleTypeDef hdma_adc1; DMA_HandleTypeDef hdma_adc1;
CORDIC_HandleTypeDef hcordic; CORDIC_HandleTypeDef hcordic;
DAC_HandleTypeDef hdac1; DAC_HandleTypeDef hdac1;
DAC_HandleTypeDef hdac3;
DMA_HandleTypeDef hdma_dac1_ch1; DMA_HandleTypeDef hdma_dac1_ch1;
DMA_HandleTypeDef hdma_dac1_ch2; DMA_HandleTypeDef hdma_dac1_ch2;
I2C_HandleTypeDef hi2c1; I2C_HandleTypeDef hi2c1;
OPAMP_HandleTypeDef hopamp1; OPAMP_HandleTypeDef hopamp1;
OPAMP_HandleTypeDef hopamp2;
TIM_HandleTypeDef htim6; TIM_HandleTypeDef htim6;
TIM_HandleTypeDef htim7; TIM_HandleTypeDef htim7;
@@ -90,6 +93,9 @@ static void MX_USART1_UART_Init(void);
static void MX_TIM8_Init(void); static void MX_TIM8_Init(void);
static void MX_OPAMP1_Init(void); static void MX_OPAMP1_Init(void);
static void MX_I2C1_Init(void); static void MX_I2C1_Init(void);
static void MX_ADC2_Init(void);
static void MX_DAC3_Init(void);
static void MX_OPAMP2_Init(void);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN PFP */
/* USER CODE END PFP */ /* USER CODE END PFP */
@@ -248,7 +254,7 @@ void stop_transmit(void){
void start_receive(void){ void start_receive(void){
receive = 1; receive = 1;
// ADC // ADC
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_BUFFER_SIZE); HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, RX_ADC_BUFFER_SIZE);
// DAC // DAC
HAL_TIM_Base_Start(&htim6); HAL_TIM_Base_Start(&htim6);
@@ -338,6 +344,9 @@ int main(void)
MX_TIM8_Init(); MX_TIM8_Init();
MX_OPAMP1_Init(); MX_OPAMP1_Init();
MX_I2C1_Init(); MX_I2C1_Init();
MX_ADC2_Init();
MX_DAC3_Init();
MX_OPAMP2_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
HAL_Delay(10); HAL_Delay(10);
@@ -379,7 +388,7 @@ int main(void)
if(receive){ if(receive){
if(rx_adc_buffer_ready){ if(rx_adc_buffer_ready){
// HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, SET); // HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, SET);
rx_mixer(adc_buffer, ADC_BUFFER_SIZE, if_I, if_Q, rx_nco1_increment); rx_mixer(adc_buffer, RX_ADC_BUFFER_SIZE, if_I, if_Q, rx_nco1_increment);
// HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, RESET); // HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, RESET);
rx_adc_buffer_ready = 0; rx_adc_buffer_ready = 0;
} }
@@ -581,6 +590,63 @@ static void MX_ADC1_Init(void)
} }
/**
* @brief ADC2 Initialization Function
* @param None
* @retval None
*/
static void MX_ADC2_Init(void)
{
/* USER CODE BEGIN ADC2_Init 0 */
/* USER CODE END ADC2_Init 0 */
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC2_Init 1 */
/* USER CODE END ADC2_Init 1 */
/** Common config
*/
hadc2.Instance = ADC2;
hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc2.Init.Resolution = ADC_RESOLUTION_12B;
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc2.Init.GainCompensation = 0;
hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc2.Init.LowPowerAutoWait = DISABLE;
hadc2.Init.ContinuousConvMode = DISABLE;
hadc2.Init.NbrOfConversion = 1;
hadc2.Init.DiscontinuousConvMode = DISABLE;
hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc2.Init.DMAContinuousRequests = DISABLE;
hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc2.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc2) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_VOPAMP2;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN ADC2_Init 2 */
/* USER CODE END ADC2_Init 2 */
}
/** /**
* @brief CORDIC Initialization Function * @brief CORDIC Initialization Function
* @param None * @param None
@@ -667,6 +733,51 @@ static void MX_DAC1_Init(void)
} }
/**
* @brief DAC3 Initialization Function
* @param None
* @retval None
*/
static void MX_DAC3_Init(void)
{
/* USER CODE BEGIN DAC3_Init 0 */
/* USER CODE END DAC3_Init 0 */
DAC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN DAC3_Init 1 */
/* USER CODE END DAC3_Init 1 */
/** DAC Initialization
*/
hdac3.Instance = DAC3;
if (HAL_DAC_Init(&hdac3) != HAL_OK)
{
Error_Handler();
}
/** DAC channel OUT1 config
*/
sConfig.DAC_HighFrequency = DAC_HIGH_FREQUENCY_INTERFACE_MODE_AUTOMATIC;
sConfig.DAC_DMADoubleDataMode = DISABLE;
sConfig.DAC_SignedFormat = DISABLE;
sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
sConfig.DAC_Trigger2 = DAC_TRIGGER_NONE;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE;
sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_INTERNAL;
sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
if (HAL_DAC_ConfigChannel(&hdac3, &sConfig, DAC_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN DAC3_Init 2 */
/* USER CODE END DAC3_Init 2 */
}
/** /**
* @brief I2C1 Initialization Function * @brief I2C1 Initialization Function
* @param None * @param None
@@ -747,6 +858,38 @@ static void MX_OPAMP1_Init(void)
} }
/**
* @brief OPAMP2 Initialization Function
* @param None
* @retval None
*/
static void MX_OPAMP2_Init(void)
{
/* USER CODE BEGIN OPAMP2_Init 0 */
/* USER CODE END OPAMP2_Init 0 */
/* USER CODE BEGIN OPAMP2_Init 1 */
/* USER CODE END OPAMP2_Init 1 */
hopamp2.Instance = OPAMP2;
hopamp2.Init.PowerMode = OPAMP_POWERMODE_NORMALSPEED;
hopamp2.Init.Mode = OPAMP_FOLLOWER_MODE;
hopamp2.Init.NonInvertingInput = OPAMP_NONINVERTINGINPUT_IO0;
hopamp2.Init.InternalOutput = ENABLE;
hopamp2.Init.TimerControlledMuxmode = OPAMP_TIMERCONTROLLEDMUXMODE_DISABLE;
hopamp2.Init.UserTrimming = OPAMP_TRIMMING_FACTORY;
if (HAL_OPAMP_Init(&hopamp2) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN OPAMP2_Init 2 */
/* USER CODE END OPAMP2_Init 2 */
}
/** /**
* @brief TIM6 Initialization Function * @brief TIM6 Initialization Function
* @param None * @param None

View File

@@ -250,8 +250,8 @@ void audio_filter_init(void){
void audio_filter_generate_coeffs(int32_t *Coeffs, uint32_t freq, uint32_t bw, uint8_t beta){ void audio_filter_generate_coeffs(int32_t *Coeffs, uint32_t freq, uint32_t bw, uint8_t beta){
double FPCoeff[AUDIO_FILTER_TAP_NUM + 1]; double FPCoeff[AUDIO_FILTER_TAP_NUM + 1];
double normalized_center_freq, normalized_bw, fp_beta; double normalized_center_freq, normalized_bw, fp_beta;
normalized_center_freq = (double)(freq*2)/DAC_SAMPLE_RATE; normalized_center_freq = (double)(freq*2)/RX_DAC_SAMPLE_RATE;
normalized_bw = (double)(bw*2)/DAC_SAMPLE_RATE; normalized_bw = (double)(bw*2)/RX_DAC_SAMPLE_RATE;
fp_beta = beta/4; fp_beta = beta/4;
RectWinFIR(FPCoeff, AUDIO_FILTER_TAP_NUM, firBPF, normalized_center_freq, normalized_bw); RectWinFIR(FPCoeff, AUDIO_FILTER_TAP_NUM, firBPF, normalized_center_freq, normalized_bw);
FIRFilterWindow(FPCoeff, AUDIO_FILTER_TAP_NUM, wtKAISER, fp_beta); FIRFilterWindow(FPCoeff, AUDIO_FILTER_TAP_NUM, wtKAISER, fp_beta);

View File

@@ -88,6 +88,8 @@ void HAL_MspInit(void)
/* USER CODE END MspInit 1 */ /* USER CODE END MspInit 1 */
} }
static uint32_t HAL_RCC_ADC12_CLK_ENABLED=0;
/** /**
* @brief ADC MSP Initialization * @brief ADC MSP Initialization
* This function configures the hardware resources used in this example * This function configures the hardware resources used in this example
@@ -112,7 +114,10 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
} }
/* Peripheral clock enable */ /* Peripheral clock enable */
__HAL_RCC_ADC12_CLK_ENABLE(); HAL_RCC_ADC12_CLK_ENABLED++;
if(HAL_RCC_ADC12_CLK_ENABLED==1){
__HAL_RCC_ADC12_CLK_ENABLE();
}
/* ADC1 DMA Init */ /* ADC1 DMA Init */
/* ADC1 Init */ /* ADC1 Init */
@@ -139,6 +144,33 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
/* USER CODE END ADC1_MspInit 1 */ /* USER CODE END ADC1_MspInit 1 */
} }
else if(hadc->Instance==ADC2)
{
/* USER CODE BEGIN ADC2_MspInit 0 */
/* USER CODE END ADC2_MspInit 0 */
/** Initializes the peripherals clocks
*/
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;
PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
/* Peripheral clock enable */
HAL_RCC_ADC12_CLK_ENABLED++;
if(HAL_RCC_ADC12_CLK_ENABLED==1){
__HAL_RCC_ADC12_CLK_ENABLE();
}
/* ADC2 interrupt Init */
HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
/* USER CODE BEGIN ADC2_MspInit 1 */
/* USER CODE END ADC2_MspInit 1 */
}
} }
@@ -156,17 +188,51 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
/* USER CODE END ADC1_MspDeInit 0 */ /* USER CODE END ADC1_MspDeInit 0 */
/* Peripheral clock disable */ /* Peripheral clock disable */
__HAL_RCC_ADC12_CLK_DISABLE(); HAL_RCC_ADC12_CLK_ENABLED--;
if(HAL_RCC_ADC12_CLK_ENABLED==0){
__HAL_RCC_ADC12_CLK_DISABLE();
}
/* ADC1 DMA DeInit */ /* ADC1 DMA DeInit */
HAL_DMA_DeInit(hadc->DMA_Handle); HAL_DMA_DeInit(hadc->DMA_Handle);
/* ADC1 interrupt DeInit */ /* ADC1 interrupt DeInit */
HAL_NVIC_DisableIRQ(ADC1_2_IRQn); /* USER CODE BEGIN ADC1:ADC1_2_IRQn disable */
/**
* Uncomment the line below to disable the "ADC1_2_IRQn" interrupt
* Be aware, disabling shared interrupt may affect other IPs
*/
/* HAL_NVIC_DisableIRQ(ADC1_2_IRQn); */
/* USER CODE END ADC1:ADC1_2_IRQn disable */
/* USER CODE BEGIN ADC1_MspDeInit 1 */ /* USER CODE BEGIN ADC1_MspDeInit 1 */
/* USER CODE END ADC1_MspDeInit 1 */ /* USER CODE END ADC1_MspDeInit 1 */
} }
else if(hadc->Instance==ADC2)
{
/* USER CODE BEGIN ADC2_MspDeInit 0 */
/* USER CODE END ADC2_MspDeInit 0 */
/* Peripheral clock disable */
HAL_RCC_ADC12_CLK_ENABLED--;
if(HAL_RCC_ADC12_CLK_ENABLED==0){
__HAL_RCC_ADC12_CLK_DISABLE();
}
/* ADC2 interrupt DeInit */
/* USER CODE BEGIN ADC2:ADC1_2_IRQn disable */
/**
* Uncomment the line below to disable the "ADC1_2_IRQn" interrupt
* Be aware, disabling shared interrupt may affect other IPs
*/
/* HAL_NVIC_DisableIRQ(ADC1_2_IRQn); */
/* USER CODE END ADC2:ADC1_2_IRQn disable */
/* USER CODE BEGIN ADC2_MspDeInit 1 */
/* USER CODE END ADC2_MspDeInit 1 */
}
} }
@@ -280,6 +346,17 @@ void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)
/* USER CODE END DAC1_MspInit 1 */ /* USER CODE END DAC1_MspInit 1 */
} }
else if(hdac->Instance==DAC3)
{
/* USER CODE BEGIN DAC3_MspInit 0 */
/* USER CODE END DAC3_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_DAC3_CLK_ENABLE();
/* USER CODE BEGIN DAC3_MspInit 1 */
/* USER CODE END DAC3_MspInit 1 */
}
} }
@@ -312,6 +389,17 @@ void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac)
/* USER CODE END DAC1_MspDeInit 1 */ /* USER CODE END DAC1_MspDeInit 1 */
} }
else if(hdac->Instance==DAC3)
{
/* USER CODE BEGIN DAC3_MspDeInit 0 */
/* USER CODE END DAC3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_DAC3_CLK_DISABLE();
/* USER CODE BEGIN DAC3_MspDeInit 1 */
/* USER CODE END DAC3_MspDeInit 1 */
}
} }
@@ -420,6 +508,25 @@ void HAL_OPAMP_MspInit(OPAMP_HandleTypeDef* hopamp)
/* USER CODE END OPAMP1_MspInit 1 */ /* USER CODE END OPAMP1_MspInit 1 */
} }
else if(hopamp->Instance==OPAMP2)
{
/* USER CODE BEGIN OPAMP2_MspInit 0 */
/* USER CODE END OPAMP2_MspInit 0 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/**OPAMP2 GPIO Configuration
PA7 ------> OPAMP2_VINP
*/
GPIO_InitStruct.Pin = GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN OPAMP2_MspInit 1 */
/* USER CODE END OPAMP2_MspInit 1 */
}
} }
@@ -447,6 +554,21 @@ void HAL_OPAMP_MspDeInit(OPAMP_HandleTypeDef* hopamp)
/* USER CODE END OPAMP1_MspDeInit 1 */ /* USER CODE END OPAMP1_MspDeInit 1 */
} }
else if(hopamp->Instance==OPAMP2)
{
/* USER CODE BEGIN OPAMP2_MspDeInit 0 */
/* USER CODE END OPAMP2_MspDeInit 0 */
/**OPAMP2 GPIO Configuration
PA7 ------> OPAMP2_VINP
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_7);
/* USER CODE BEGIN OPAMP2_MspDeInit 1 */
/* USER CODE END OPAMP2_MspDeInit 1 */
}
} }

View File

@@ -58,6 +58,7 @@
/* External variables --------------------------------------------------------*/ /* External variables --------------------------------------------------------*/
extern DMA_HandleTypeDef hdma_adc1; extern DMA_HandleTypeDef hdma_adc1;
extern ADC_HandleTypeDef hadc1; extern ADC_HandleTypeDef hadc1;
extern ADC_HandleTypeDef hadc2;
extern DMA_HandleTypeDef hdma_dac1_ch1; extern DMA_HandleTypeDef hdma_dac1_ch1;
extern DMA_HandleTypeDef hdma_dac1_ch2; extern DMA_HandleTypeDef hdma_dac1_ch2;
extern TIM_HandleTypeDef htim7; extern TIM_HandleTypeDef htim7;
@@ -270,6 +271,7 @@ void ADC1_2_IRQHandler(void)
/* USER CODE END ADC1_2_IRQn 0 */ /* USER CODE END ADC1_2_IRQn 0 */
HAL_ADC_IRQHandler(&hadc1); HAL_ADC_IRQHandler(&hadc1);
HAL_ADC_IRQHandler(&hadc2);
/* USER CODE BEGIN ADC1_2_IRQn 1 */ /* USER CODE BEGIN ADC1_2_IRQn 1 */
/* USER CODE END ADC1_2_IRQn 1 */ /* USER CODE END ADC1_2_IRQn 1 */