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

@@ -25,6 +25,7 @@
#include <stdio.h>
#include "bassofono.h"
#include "interface.h"
#include "si5351.h"
/* USER CODE END Includes */
@@ -52,6 +53,8 @@ DAC_HandleTypeDef hdac1;
DMA_HandleTypeDef hdma_dac1_ch1;
DMA_HandleTypeDef hdma_dac1_ch2;
I2C_HandleTypeDef hi2c1;
OPAMP_HandleTypeDef hopamp1;
TIM_HandleTypeDef htim6;
@@ -64,6 +67,7 @@ DMA_HandleTypeDef hdma_usart1_tx;
/* USER CODE BEGIN PV */
volatile uint8_t tick;
uint16_t tick_timer;
// RX
volatile uint8_t rx_adc_buffer_ready, half_rx_dac_buffer_empty;
@@ -85,6 +89,7 @@ static void MX_CORDIC_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_TIM8_Init(void);
static void MX_OPAMP1_Init(void);
static void MX_I2C1_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
@@ -94,6 +99,19 @@ static void MX_OPAMP1_Init(void);
// IRQ
// EXTI Line9 External Interrupt ISR Handler CallBackFun
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if(GPIO_Pin == GPIO_PIN_11){
/*
if(HAL_GPIO_ReadPin(PTT_GPIO_Port, PTT_Pin)){
enqueue_cmd(BT1P);
} else {
enqueue_cmd(BT1R);
}
*/
}
}
// ADC
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){
@@ -122,13 +140,13 @@ void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac) {
// tx
void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef* hdac) {
HAL_GPIO_TogglePin(OUT_GPIO_Port, OUT_Pin);
// HAL_GPIO_TogglePin(OUT_GPIO_Port, OUT_Pin);
tx_dac_buffer_toggle = 0;
half_tx_dac_buffer_empty = 1;
}
void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac) {
HAL_GPIO_TogglePin(OUT_GPIO_Port, OUT_Pin);
// HAL_GPIO_TogglePin(OUT_GPIO_Port, OUT_Pin);
tx_dac_buffer_toggle = 1;
half_tx_dac_buffer_empty = 1;
}
@@ -197,21 +215,34 @@ void start_transmit(void){
// ADC
// HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_BUFFER_SIZE);
// DAC
HAL_TIM_Base_Start(&htim8);
HAL_DAC_Start(&hdac1,DAC_CHANNEL_2);
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_2, tx_dac_buffer, (TX_DAC_BUFFER_SIZE * 2), DAC_ALIGN_12B_R);
if(TX_TYPE == TX_TYPE_DAC){
// DAC
HAL_TIM_Base_Start(&htim8);
HAL_DAC_Start(&hdac1,DAC_CHANNEL_2);
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_2, tx_dac_buffer, (TX_DAC_BUFFER_SIZE * 2), DAC_ALIGN_12B_R);
} else if(TX_TYPE == TX_TYPE_PWM){
// HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
// HAL_TIM_Base_Start(&htim4);
} else if(TX_TYPE == TX_TYPE_SI5351){
si5351_on();
}
}
void stop_transmit(void){
transmit = 0;
// ADC
// HAL_ADC_Stop_DMA(&hadc1);
// DAC
HAL_TIM_Base_Stop(&htim8);
HAL_DAC_Stop(&hdac1,DAC_CHANNEL_2);
HAL_DAC_Stop_DMA(&hdac1, DAC_CHANNEL_2);
if(TX_TYPE == TX_TYPE_DAC){
// DAC
HAL_TIM_Base_Stop(&htim8);
HAL_DAC_Stop(&hdac1,DAC_CHANNEL_2);
HAL_DAC_Stop_DMA(&hdac1, DAC_CHANNEL_2);
} else if(TX_TYPE == TX_TYPE_PWM){
// HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_3);
// HAL_TIM_Base_Stop(&htim4);
} else if(TX_TYPE == TX_TYPE_SI5351){
si5351_off();
}
}
void start_receive(void){
@@ -277,11 +308,6 @@ int main(void)
{
/* USER CODE BEGIN 1 */
state_changed = 0;
display_init();
state_set_default();
interface_set_default();
display_update_mode();
display_update_state();
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
@@ -311,7 +337,19 @@ int main(void)
MX_USART1_UART_Init();
MX_TIM8_Init();
MX_OPAMP1_Init();
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
HAL_Delay(10);
display_init();
state_set_default();
interface_set_default();
// inutili
display_update_item();
// display_update_state();
st2_filter_init();
audio_filter_init();
// diag();
@@ -321,6 +359,12 @@ int main(void)
HAL_UART_Receive_IT(&huart1, uart_rx_buf, 1);
// HAL_UART_Receive_IT(&huart2, uart_rx_buf, 1);
if(TX_TYPE == TX_TYPE_SI5351){
// rooto!
si53531_initialize();
}
start_receive();
/* USER CODE END 2 */
@@ -330,25 +374,30 @@ int main(void)
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(OUT_GPIO_Port, OUT_Pin);
// receive = transmit = 0;
if(receive){
if(rx_adc_buffer_ready){
HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, SET);
rx_mixer(adc_buffer, ADC_BUFFER_SIZE, if_I, if_Q, nco1_increment);
HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, RESET);
// HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, SET);
rx_mixer(adc_buffer, ADC_BUFFER_SIZE, if_I, if_Q, rx_nco1_increment);
// HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, RESET);
rx_adc_buffer_ready = 0;
}
if(half_rx_dac_buffer_empty){
// HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_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_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], AUDIO_FILTER_BLOCK_SIZE);
// arm_fir_q31(&audio_filter_struct, prefilter_lf_buffer, lf_buffer_test[lf_buffer_toggle], AUDIO_FILTER_BLOCK_SIZE);
// HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, RESET);
half_rx_dac_buffer_empty = 0;
}
}
if (transmit){
if(half_tx_dac_buffer_empty){
// HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, SET);
tx_mixer(tx_dac_buffer[tx_dac_buffer_toggle], TX_DAC_BUFFER_SIZE, if_I, if_Q, nco1_increment);
tx_mixer(tx_dac_buffer[tx_dac_buffer_toggle], TX_DAC_BUFFER_SIZE, if_I, if_Q, tx_nco1_increment);
half_tx_dac_buffer_empty = 0;
// HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, RESET);
}
@@ -359,27 +408,46 @@ int main(void)
}
}
if(tick){
if(receive){
// TODO
rx_measure_signal(if_I, LF_BUFFER_SIZE);
}
// HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
// consuma coda comandi
while(rx_cmd_rb_in_idx != rx_cmd_rb_out_idx) dequeue_cmd();
// applica cambiamenti display
if(state_changed) display_update_state();
if(uart_tx_buf_in_idx){
display_write(uart_tx_buf, uart_tx_buf_in_idx);
uart_tx_buf_in_idx = 0;
}
if(peak){
if(peakset == 0) click();
peakset = 50;
peak = 0;
}
if(peakset){
peakset--;
if(peakset == 0) click();
tick_timer++;
// eventi lenti
if(tick_timer % 8 == 0){
if(receive){
if(peak){
if(peakset == 0) click();
peakset = 50;
peak = 0;
}
if(peakset){
peakset--;
if(peakset == 0) click();
}
rx_signal = measure_log_abs_mean(if_I, LF_BUFFER_SIZE) * RX_SMETER_SCALE;
if(rx_signal != s_meter){
s_meter = rx_signal;
set_changed(7);
}
}
if(transmit){
tx_signal = 78;
if(tx_signal != s_meter){
s_meter = tx_signal;
set_changed(7);
}
}
}
tick = 0;
}
}
@@ -394,7 +462,6 @@ void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
/** Configure the main internal regulator output voltage
*/
@@ -428,15 +495,7 @@ void SystemClock_Config(void)
{
Error_Handler();
}
/** Initializes the peripherals clocks
*/
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_ADC12;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);
}
/**
@@ -608,6 +667,52 @@ static void MX_DAC1_Init(void)
}
/**
* @brief I2C1 Initialization Function
* @param None
* @retval None
*/
static void MX_I2C1_Init(void)
{
/* USER CODE BEGIN I2C1_Init 0 */
/* USER CODE END I2C1_Init 0 */
/* USER CODE BEGIN I2C1_Init 1 */
/* USER CODE END I2C1_Init 1 */
hi2c1.Instance = I2C1;
hi2c1.Init.Timing = 0x60505F8C;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
{
Error_Handler();
}
/** Configure Analogue filter
*/
if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
{
Error_Handler();
}
/** Configure Digital filter
*/
if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN I2C1_Init 2 */
/* USER CODE END I2C1_Init 2 */
}
/**
* @brief OPAMP1 Initialization Function
* @param None
@@ -856,11 +961,25 @@ static void MX_GPIO_Init(void)
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(OUT_GPIO_Port, OUT_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : NC1_Pin NC2_Pin */
GPIO_InitStruct.Pin = NC1_Pin|NC2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pin : PA8 */
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pin : OUT_Pin */
GPIO_InitStruct.Pin = OUT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
HAL_GPIO_Init(OUT_GPIO_Port, &GPIO_InitStruct);
}
@@ -901,4 +1020,3 @@ void assert_failed(uint8_t *file, uint32_t line)
}
#endif /* USE_FULL_ASSERT */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/