diff --git a/firmware/func_gen_stm32f303re_nucleo/Core/Inc/main.h b/firmware/func_gen_stm32f303re_nucleo/Core/Inc/main.h index 03b4ec7..1e29fd3 100644 --- a/firmware/func_gen_stm32f303re_nucleo/Core/Inc/main.h +++ b/firmware/func_gen_stm32f303re_nucleo/Core/Inc/main.h @@ -72,6 +72,8 @@ void Error_Handler(void); #define BTN3_GPIO_Port GPIOA #define BTN4_Pin GPIO_PIN_5 #define BTN4_GPIO_Port GPIOA +#define DDS2_CS_Pin GPIO_PIN_10 +#define DDS2_CS_GPIO_Port GPIOB #define AMP1_CS_Pin GPIO_PIN_11 #define AMP1_CS_GPIO_Port GPIOB #define DDS1_CS_Pin GPIO_PIN_12 @@ -98,6 +100,8 @@ void Error_Handler(void); #define ST7565_MOSI_GPIO_Port GPIOC #define SWO_Pin GPIO_PIN_3 #define SWO_GPIO_Port GPIOB +#define AMP2_CS_Pin GPIO_PIN_9 +#define AMP2_CS_GPIO_Port GPIOB /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ diff --git a/firmware/func_gen_stm32f303re_nucleo/Core/Src/gpio.c b/firmware/func_gen_stm32f303re_nucleo/Core/Src/gpio.c index fa6624e..7c48cff 100644 --- a/firmware/func_gen_stm32f303re_nucleo/Core/Src/gpio.c +++ b/firmware/func_gen_stm32f303re_nucleo/Core/Src/gpio.c @@ -51,7 +51,7 @@ void MX_GPIO_Init(void) __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, AMP1_CS_Pin|DDS1_CS_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOB, DDS2_CS_Pin|AMP1_CS_Pin|DDS1_CS_Pin|AMP2_CS_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, ST7565_RST_Pin|ST7565_A0_Pin|ST7565_CS_Pin, GPIO_PIN_RESET); @@ -73,8 +73,8 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - /*Configure GPIO pins : PBPin PBPin */ - GPIO_InitStruct.Pin = AMP1_CS_Pin|DDS1_CS_Pin; + /*Configure GPIO pins : PBPin PBPin PBPin PBPin */ + GPIO_InitStruct.Pin = DDS2_CS_Pin|AMP1_CS_Pin|DDS1_CS_Pin|AMP2_CS_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; diff --git a/firmware/func_gen_stm32f303re_nucleo/Core/Src/main.c b/firmware/func_gen_stm32f303re_nucleo/Core/Src/main.c index 71006df..ed5409e 100644 --- a/firmware/func_gen_stm32f303re_nucleo/Core/Src/main.c +++ b/firmware/func_gen_stm32f303re_nucleo/Core/Src/main.c @@ -67,40 +67,40 @@ void RTT_console_logger(ulog_level_t severity, char *msg); /* USER CODE END 0 */ /** - * @brief The application entry point. - * @retval int - */ + * @brief The application entry point. + * @retval int + */ int main(void) { - /* USER CODE BEGIN 1 */ + /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ + /* USER CODE END 1 */ - /* MCU Configuration--------------------------------------------------------*/ + /* MCU Configuration--------------------------------------------------------*/ - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); - /* USER CODE BEGIN Init */ + /* USER CODE BEGIN Init */ - /* USER CODE END Init */ + /* USER CODE END Init */ - /* Configure the system clock */ - SystemClock_Config(); + /* Configure the system clock */ + SystemClock_Config(); - /* USER CODE BEGIN SysInit */ + /* USER CODE BEGIN SysInit */ - /* USER CODE END SysInit */ + /* USER CODE END SysInit */ - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_USART2_UART_Init(); - MX_SPI2_Init(); - MX_I2C1_Init(); - MX_SPI3_Init(); - MX_TIM2_Init(); - MX_TIM3_Init(); - /* USER CODE BEGIN 2 */ + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART2_UART_Init(); + MX_SPI2_Init(); + MX_I2C1_Init(); + MX_SPI3_Init(); + MX_TIM2_Init(); + MX_TIM3_Init(); + /* USER CODE BEGIN 2 */ ulog_init(); ulog_subscribe(RTT_console_logger, ULOG_TRACE_LEVEL); @@ -117,10 +117,10 @@ int main(void) hst7565.rst_pin = ST7565_RST_Pin; ST7565_Init(&hst7565, &disp); - /* USER CODE END 2 */ + /* USER CODE END 2 */ - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ DISP_clearScreen(&disp); ST7565_DisplayAll(&hst7565); HAL_Delay(1000); @@ -135,59 +135,61 @@ int main(void) ST7565_DisplayAll(&hst7565); LAY_drawDisplayLayout(&disp, &app_data); } - /* USER CODE END WHILE */ + /* USER CODE END WHILE */ - /* USER CODE BEGIN 3 */ + /* USER CODE BEGIN 3 */ } - /* USER CODE END 3 */ + /* USER CODE END 3 */ } /** - * @brief System Clock Configuration - * @retval None - */ + * @brief System Clock Configuration + * @retval None + */ void SystemClock_Config(void) { - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_TIM2 | RCC_PERIPHCLK_TIM34; - PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; - PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI; - PeriphClkInit.Tim2ClockSelection = RCC_TIM2CLK_HCLK; - PeriphClkInit.Tim34ClockSelection = RCC_TIM34CLK_HCLK; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_I2C1 + |RCC_PERIPHCLK_TIM2|RCC_PERIPHCLK_TIM34; + PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1; + PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI; + PeriphClkInit.Tim2ClockSelection = RCC_TIM2CLK_HCLK; + PeriphClkInit.Tim34ClockSelection = RCC_TIM34CLK_HCLK; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } } /* USER CODE BEGIN 4 */ @@ -201,33 +203,33 @@ void RTT_console_logger(ulog_level_t severity, char *msg) /* USER CODE END 4 */ /** - * @brief This function is executed in case of error occurrence. - * @retval None - */ + * @brief This function is executed in case of error occurrence. + * @retval None + */ void Error_Handler(void) { - /* USER CODE BEGIN Error_Handler_Debug */ + /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ __disable_irq(); while (1) { } - /* USER CODE END Error_Handler_Debug */ + /* USER CODE END Error_Handler_Debug */ } -#ifdef USE_FULL_ASSERT +#ifdef USE_FULL_ASSERT /** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ void assert_failed(uint8_t *file, uint32_t line) { - /* USER CODE BEGIN 6 */ + /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - /* USER CODE END 6 */ + /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ diff --git a/firmware/func_gen_stm32f303re_nucleo/Makefile b/firmware/func_gen_stm32f303re_nucleo/Makefile index 5fc2a63..ced76c6 100644 --- a/firmware/func_gen_stm32f303re_nucleo/Makefile +++ b/firmware/func_gen_stm32f303re_nucleo/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [3.17.1] date: [Sun May 21 21:04:44 CEST 2023] +# File automatically-generated by tool: [projectgenerator] version: [3.17.1] date: [Mon Jul 31 14:03:39 CEST 2023] ########################################################################################################################## # ------------------------------------------------ diff --git a/firmware/func_gen_stm32f303re_nucleo/func_gen_stm32f303re_nucleo.ioc b/firmware/func_gen_stm32f303re_nucleo/func_gen_stm32f303re_nucleo.ioc index 743c630..c0f7b4a 100644 --- a/firmware/func_gen_stm32f303re_nucleo/func_gen_stm32f303re_nucleo.ioc +++ b/firmware/func_gen_stm32f303re_nucleo/func_gen_stm32f303re_nucleo.ioc @@ -24,35 +24,37 @@ Mcu.Pin1=PC14-OSC32_IN Mcu.Pin10=PA5 Mcu.Pin11=PA6 Mcu.Pin12=PA7 -Mcu.Pin13=PB11 -Mcu.Pin14=PB12 -Mcu.Pin15=PB13 -Mcu.Pin16=PB14 -Mcu.Pin17=PB15 -Mcu.Pin18=PC8 -Mcu.Pin19=PC9 +Mcu.Pin13=PB10 +Mcu.Pin14=PB11 +Mcu.Pin15=PB12 +Mcu.Pin16=PB13 +Mcu.Pin17=PB14 +Mcu.Pin18=PB15 +Mcu.Pin19=PC8 Mcu.Pin2=PC15-OSC32_OUT -Mcu.Pin20=PA8 -Mcu.Pin21=PA9 -Mcu.Pin22=PA10 -Mcu.Pin23=PA13 -Mcu.Pin24=PA14 -Mcu.Pin25=PC10 -Mcu.Pin26=PC11 -Mcu.Pin27=PC12 -Mcu.Pin28=PB3 -Mcu.Pin29=PB6 +Mcu.Pin20=PC9 +Mcu.Pin21=PA8 +Mcu.Pin22=PA9 +Mcu.Pin23=PA10 +Mcu.Pin24=PA13 +Mcu.Pin25=PA14 +Mcu.Pin26=PC10 +Mcu.Pin27=PC11 +Mcu.Pin28=PC12 +Mcu.Pin29=PB3 Mcu.Pin3=PF0-OSC_IN -Mcu.Pin30=PB7 -Mcu.Pin31=VP_SYS_VS_Systick -Mcu.Pin32=VP_TIM2_VS_ClockSourceINT +Mcu.Pin30=PB6 +Mcu.Pin31=PB7 +Mcu.Pin32=PB9 +Mcu.Pin33=VP_SYS_VS_Systick +Mcu.Pin34=VP_TIM2_VS_ClockSourceINT Mcu.Pin4=PF1-OSC_OUT Mcu.Pin5=PA0 Mcu.Pin6=PA1 Mcu.Pin7=PA2 Mcu.Pin8=PA3 Mcu.Pin9=PA4 -Mcu.PinsNb=33 +Mcu.PinsNb=35 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F303RETx @@ -126,6 +128,10 @@ PA9.GPIOParameters=GPIO_Label PA9.GPIO_Label=BTN_CH1 PA9.Locked=true PA9.Signal=GPIO_Input +PB10.GPIOParameters=GPIO_Label +PB10.GPIO_Label=DDS2_CS +PB10.Locked=true +PB10.Signal=GPIO_Output PB11.GPIOParameters=GPIO_Label PB11.GPIO_Label=AMP1_CS PB11.Locked=true @@ -149,6 +155,10 @@ PB6.Mode=I2C PB6.Signal=I2C1_SCL PB7.Mode=I2C PB7.Signal=I2C1_SDA +PB9.GPIOParameters=GPIO_Label +PB9.GPIO_Label=AMP2_CS +PB9.Locked=true +PB9.Signal=GPIO_Output PC10.GPIOParameters=GPIO_Label PC10.GPIO_Label=ST7565_SCK PC10.Locked=true @@ -214,7 +224,7 @@ ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=Makefile ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART2_UART_Init-USART2-false-HAL-true,4-MX_SPI2_Init-SPI2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_SPI3_Init-SPI3-false-HAL-true,7-MX_TIM2_Init-TIM2-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true,9-MX_ADC1_Init-ADC1-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART2_UART_Init-USART2-false-HAL-true,4-MX_SPI2_Init-SPI2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_SPI3_Init-SPI3-false-HAL-true,7-MX_TIM2_Init-TIM2-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true RCC.ADC12outputFreq_Value=72000000 RCC.ADC34outputFreq_Value=72000000 RCC.AHBFreq_Value=72000000 diff --git a/firmware/shared_libs/controllers/ctrl_app.c b/firmware/shared_libs/controllers/ctrl_app.c index 7bd909b..bcb8ca2 100644 --- a/firmware/shared_libs/controllers/ctrl_app.c +++ b/firmware/shared_libs/controllers/ctrl_app.c @@ -20,18 +20,19 @@ static GEN_pwm_t pwm_gen[3]; static const CMD_button_t btn_command[BTN_STATE_MAX][DISP_BTN_MAX]; static const LAY_dispBtn_t btn_hw_to_disp[BTN_BOT_MAX] = {DISP_BTN_1, DISP_BTN_2, DISP_BTN_3, DISP_BTN_4, DISP_BTN_5}; +static const GEN_channel_t btn_ch_to_chan[CHANNEL_MAX] = {CHANNEL1, CHANNEL2, CHANNEL3, CHANNEL4, CHANNEL5, CHANNEL6}; static const uint32_t pow_of_10[7] = {1, 10, 100, 1000, 10000, 100000, 1000000}; static HW_BotBtnName_t last_key; static APP_data_t *_app_data; -static GENERATOR_t generators[CHANNEL_MAX] = { - {.gen_type = GEN_FG_TYPE, .gen = &func_gen[0]}, - {.gen_type = GEN_FG_TYPE, .gen = &func_gen[1]}, - {.gen_type = GEN_FG_TYPE, .gen = &func_gen[2]}, - {.gen_type = GEN_PWM_TYPE, .gen = &pwm_gen[0]}, - {.gen_type = GEN_PWM_TYPE, .gen = &pwm_gen[1]}, - {.gen_type = GEN_PWM_TYPE, .gen = &pwm_gen[2]}, +static GEN_sig_t signal_gen[CHANNEL_MAX] = { + {.type = GEN_FG_TYPE, .gen = &func_gen[0]}, + {.type = GEN_FG_TYPE, .gen = &func_gen[1]}, + {.type = GEN_FG_TYPE, .gen = &func_gen[2]}, + {.type = GEN_PWM_TYPE, .gen = &pwm_gen[0]}, + {.type = GEN_PWM_TYPE, .gen = &pwm_gen[1]}, + {.type = GEN_PWM_TYPE, .gen = &pwm_gen[2]}, }; void APP_init(APP_data_t *app_data) @@ -43,11 +44,12 @@ void APP_init(APP_data_t *app_data) _app_data->phas_focus_digit = 0; _app_data->duty_focus_digit = 0; - _app_data->curr_gen_type = GEN_FG_TYPE; - _app_data->generator = generators[CHANNEL1].gen; + _app_data->curr_gen_type = signal_gen[CHANNEL1].type; + _app_data->curr_gen = signal_gen[CHANNEL1].gen; _app_data->curr_state_lay = LAY_MAIN; _app_data->curr_state_btn = BTN_MAIN_FG; + _app_data->curr_channel = CHANNEL1; _app_data->isChannelChange = 1; _app_data->isGraphChange = 1; @@ -84,31 +86,51 @@ void CTRL_pushedDispBtnEvent(ButtonKey_t *key) void CTRL_pushedChanBtnEvent(ButtonKey_t *key) { ULOG_TRACE("Chan btn: %d", key->instance); - UNUSED(key); + GEN_channel_t channel = btn_ch_to_chan[key->instance]; + + _app_data->curr_gen_type = signal_gen[channel].type; + _app_data->curr_gen = signal_gen[channel].gen; + + _app_data->curr_state_lay = LAY_MAIN; + _app_data->curr_state_btn = BTN_MAIN_FG; + _app_data->curr_channel = channel; + + _app_data->isChannelChange = 1; + _app_data->isGraphChange = 1; + _app_data->isValueChange = 1; + _app_data->isButtonChange = 1; + _app_data->isButtonBlink = 1; } void CTRL_longPushedChanBtnEvent(ButtonKey_t *key) { ULOG_TRACE("Chan btn(long): %d", key->instance); - GEN_fg_t *dds_ch0 = generators[key->instance].gen; - if (dds_ch0->enabled) + GEN_channel_t channel = btn_ch_to_chan[key->instance]; + + switch (signal_gen[channel].type) { - dds_ch0->enabled = FALSE; - setEnabled(&generators[CHANNEL1], CHANNEL1); - HAL_GPIO_WritePin(LED_CH1_GPIO_Port, LED_CH1_Pin, GPIO_PIN_SET); - } - else + case GEN_FG_TYPE: { - dds_ch0->enabled = TRUE; - setEnabled(&generators[CHANNEL1], CHANNEL1); - HAL_GPIO_WritePin(LED_CH1_GPIO_Port, LED_CH1_Pin, GPIO_PIN_RESET); + GEN_fg_t *gen = signal_gen[channel].gen; + gen->enabled = gen->enabled ? FALSE : TRUE; + setEnabled(&signal_gen[channel], channel); + break; + } + case GEN_PWM_TYPE: + { + GEN_pwm_t *gen = signal_gen[channel].gen; + gen->enabled = gen->enabled ? FALSE : TRUE; + setEnabled(&signal_gen[channel], channel); + break; + } + default: + break; } - UNUSED(key); } static void _changeValueFunGen(int8_t dir) { - GEN_fg_t *gen = (GEN_fg_t *)_app_data->generator; + GEN_fg_t *gen = (GEN_fg_t *)_app_data->curr_gen; switch (_app_data->curr_state_lay) { @@ -121,7 +143,7 @@ static void _changeValueFunGen(int8_t dir) return; } gen->frequency = new_freq; - setFreq(&generators[CHANNEL1], CHANNEL1); + setFreq(&signal_gen[CHANNEL1], CHANNEL1); break; } case LAY_AMPL: @@ -133,7 +155,7 @@ static void _changeValueFunGen(int8_t dir) return; } gen->amplitude = new_ampl; - setAmplitude(&generators[CHANNEL1], CHANNEL1); + setAmplitude(&signal_gen[CHANNEL1], CHANNEL1); break; } case LAY_OFFS: @@ -145,7 +167,7 @@ static void _changeValueFunGen(int8_t dir) return; } gen->offset = new_offs; - setOfsset(&generators[CHANNEL1], CHANNEL1); + setOfsset(&signal_gen[CHANNEL1], CHANNEL1); break; } case LAY_PHAS: @@ -170,7 +192,7 @@ static void _changeValueFunGen(int8_t dir) static void _changeValuePwmGen(int8_t dir) { - GEN_pwm_t *gen = (GEN_pwm_t *)_app_data->generator; + GEN_pwm_t *gen = (GEN_pwm_t *)_app_data->curr_gen; switch (_app_data->curr_state_lay) { diff --git a/firmware/shared_libs/controllers/ctrl_app.h b/firmware/shared_libs/controllers/ctrl_app.h index 89b4a5a..21dcda1 100644 --- a/firmware/shared_libs/controllers/ctrl_app.h +++ b/firmware/shared_libs/controllers/ctrl_app.h @@ -26,9 +26,9 @@ typedef struct typedef struct { - GEN_type_t gen_type; + GEN_type_t type; void *const gen; -} GENERATOR_t; +} GEN_sig_t; typedef struct { @@ -39,7 +39,7 @@ typedef struct uint8_t duty_focus_digit; GEN_type_t curr_gen_type; - void *generator; + void *curr_gen; GEN_channel_t curr_channel; STATE_layout_t curr_state_lay; diff --git a/firmware/shared_libs/controllers/ctrl_app_types.h b/firmware/shared_libs/controllers/ctrl_app_types.h index df5de71..2a5338c 100644 --- a/firmware/shared_libs/controllers/ctrl_app_types.h +++ b/firmware/shared_libs/controllers/ctrl_app_types.h @@ -3,7 +3,7 @@ #define FUN_GEN_FOCUS_MAX 6U #define PWM_GEN_FOCUS_MAX 4U #define MAX_FREQ 1000000U -#define MAX_VOLT_POS 330 +#define MAX_VOLT_POS 360 #define MAX_VOLT_NEG 0 #define MAX_PHAS 360 #define MAX_DUTY 100 diff --git a/firmware/shared_libs/controllers/ctrl_generator.c b/firmware/shared_libs/controllers/ctrl_generator.c index 316c5c4..a74c82a 100644 --- a/firmware/shared_libs/controllers/ctrl_generator.c +++ b/firmware/shared_libs/controllers/ctrl_generator.c @@ -9,12 +9,19 @@ typedef struct FG_handle_s FG_handle_t; +typedef struct +{ + GPIO_TypeDef *port; + uint16_t pin; +} GEN_led_t; + struct FG_handle_s { ad9833_handle_t hdds; ltc2631_handle_t hoffs; mcp41x_handle_t hampl; FG_handle_t *link[2]; + GEN_led_t hled; }; typedef uint8_t timer_handle_t; @@ -23,6 +30,7 @@ typedef struct timer_handle_t hpwm; ltc2631_handle_t hoffs; mcp41x_handle_t hampl; + GEN_led_t hled; } PWM_handle_t; typedef enum @@ -61,12 +69,29 @@ uint8_t ch_to_gen_ch[CHANNEL_MAX] = {FG_CHAN1, FG_CHAN2, FG_CHAN3, PWM_CHAN1, PW // #define AMP1_CS_PIN GPIO_PIN_0 // #define AMP2_CS_PIN GPIO_PIN_0 // #define AMP3_CS_PIN GPIO_PIN_0 +void led_init(GEN_led_t *hled, GPIO_TypeDef *port, uint16_t pin) +{ + hled->port = port; + hled->pin = pin; + + HAL_GPIO_WritePin(port, pin, GPIO_PIN_SET); +} + +void led_on(GEN_led_t *hled) +{ + HAL_GPIO_WritePin(hled->port, hled->pin, GPIO_PIN_RESET); +} + +void led_off(GEN_led_t *hled) +{ + HAL_GPIO_WritePin(hled->port, hled->pin, GPIO_PIN_SET); +} void gen_init() { ad9833_init(&dds_gen[FG_CHAN1].hdds, &hspi2, DDS1_CS_GPIO_Port, DDS1_CS_Pin); ad9833_setMode(&dds_gen[FG_CHAN1].hdds, MODE_OFF); - // ad9833_init(&dds_gen[FG_CHAN2].hdds, &hspi2, DDS2_CS_PORT, DDS2_CS_PIN); + ad9833_init(&dds_gen[FG_CHAN2].hdds, &hspi2, DDS2_CS_GPIO_Port, DDS2_CS_Pin); // ad9833_init(&dds_gen[FG_CHAN3].hdds, &hspi2, DDS3_CS_PORT, DDS3_CS_PIN); // ltc2631_init(&dds_gen[FG_CHAN1].hoffs, &hi2c1, 0x00, LTC2631_8BIT, LTC_REF_2V5); @@ -75,8 +100,10 @@ void gen_init() mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP1_CS_GPIO_Port, AMP1_CS_Pin, MCP41X_10K); mcp41x_setValue(&dds_gen[FG_CHAN1].hampl, 0); - // mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP2_CS_PORT, AMP2_CS_PIN, MCP41X_10K); + mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP2_CS_GPIO_Port, AMP2_CS_Pin, MCP41X_10K); // mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP3_CS_PORT, AMP3_CS_PIN, MCP41X_10K); + + led_init(&dds_gen[FG_CHAN1].hled, LED_CH1_GPIO_Port, LED_CH1_Pin); } static void _setAmpliude(mcp41x_handle_t *hampl, uint16_t ampl_x100) @@ -126,16 +153,18 @@ static void _setWaveDdsGen(ad9833_handle_t *hdds, GEN_wave_t wave) } } -static void _setEnabledDdsGen(ad9833_handle_t *hdds, GEN_fg_t *gen) +static void _setEnabledDdsGen(FG_handle_t *hfg, GEN_fg_t *gen) { ULOG_DEBUG("(%d:_setAmplitude) phase: %d", __LINE__, gen->enabled); switch (gen->enabled) { case FALSE: - ad9833_setMode(hdds, MODE_OFF); + ad9833_setMode(&hfg->hdds, MODE_OFF); + led_off(&hfg->hled); break; case TRUE: - _setWaveDdsGen(hdds, gen->wave); + _setWaveDdsGen(&hfg->hdds, gen->wave); + led_on(&hfg->hled); break; default: @@ -156,13 +185,13 @@ static void _setDutyPwmGen(timer_handle_t *hpwm, uint8_t duty) { } -static void _setEnabledPwmGen(timer_handle_t *hpwm, bool_t en) +static void _setEnabledPwmGen(PWM_handle_t *hpwm, bool_t en) { } -void setFreq(GENERATOR_t *gen, GEN_channel_t channel) +void setFreq(GEN_sig_t *gen, GEN_channel_t channel) { - switch (gen->gen_type) + switch (gen->type) { case GEN_FG_TYPE: _setFreqDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->frequency); @@ -172,14 +201,14 @@ void setFreq(GENERATOR_t *gen, GEN_channel_t channel) break; default: - ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type); + ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type); break; } } -void setAmplitude(GENERATOR_t *gen, GEN_channel_t channel) +void setAmplitude(GEN_sig_t *gen, GEN_channel_t channel) { - switch (gen->gen_type) + switch (gen->type) { case GEN_FG_TYPE: _setAmpliude(&dds_gen[ch_to_gen_ch[channel]].hampl, ((GEN_fg_t *)gen->gen)->amplitude); @@ -189,14 +218,14 @@ void setAmplitude(GENERATOR_t *gen, GEN_channel_t channel) break; default: - ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type); + ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type); break; } } -void setOfsset(GENERATOR_t *gen, GEN_channel_t channel) +void setOfsset(GEN_sig_t *gen, GEN_channel_t channel) { - switch (gen->gen_type) + switch (gen->type) { case GEN_FG_TYPE: _setOffset(&dds_gen[ch_to_gen_ch[channel]].hoffs, ((GEN_fg_t *)gen->gen)->offset); @@ -206,14 +235,14 @@ void setOfsset(GENERATOR_t *gen, GEN_channel_t channel) break; default: - ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type); + ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type); break; } } -void setPhase(GENERATOR_t *gen, GEN_channel_t channel) +void setPhase(GEN_sig_t *gen, GEN_channel_t channel) { - switch (gen->gen_type) + switch (gen->type) { case GEN_FG_TYPE: _setPhaseDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->phase); @@ -223,56 +252,56 @@ void setPhase(GENERATOR_t *gen, GEN_channel_t channel) break; default: - ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type); + ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type); break; } } -void setWave(GENERATOR_t *gen, GEN_channel_t channel) +void setWave(GEN_sig_t *gen, GEN_channel_t channel) { - switch (gen->gen_type) + switch (gen->type) { case GEN_FG_TYPE: _setWaveDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->wave); break; default: - ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type); + ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type); break; } } -void setDuty(GENERATOR_t *gen, GEN_channel_t channel) +void setDuty(GEN_sig_t *gen, GEN_channel_t channel) { - switch (gen->gen_type) + switch (gen->type) { case GEN_PWM_TYPE: _setDutyPwmGen(&pwm_gen[ch_to_gen_ch[channel]].hpwm, ((GEN_pwm_t *)gen->gen)->duty); break; default: - ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type); + ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type); break; } } -void setEnabled(GENERATOR_t *gen, GEN_channel_t channel) +void setEnabled(GEN_sig_t *gen, GEN_channel_t channel) { - switch (gen->gen_type) + switch (gen->type) { case GEN_FG_TYPE: - _setEnabledDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)); + _setEnabledDdsGen(&dds_gen[ch_to_gen_ch[channel]], ((GEN_fg_t *)gen->gen)); break; case GEN_PWM_TYPE: - _setEnabledPwmGen(&pwm_gen[ch_to_gen_ch[channel]].hpwm, ((GEN_pwm_t *)gen->gen)->enabled); + _setEnabledPwmGen(&pwm_gen[ch_to_gen_ch[channel]], ((GEN_pwm_t *)gen->gen)->enabled); break; default: - ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->gen_type); + ULOG_ERROR("%s:%d: Unknown generator type: %d", __FILE__, __LINE__, gen->type); break; } } -void setLink(GENERATOR_t *source_gen, GEN_channel_t source_ch, GENERATOR_t *dest_gen, GEN_channel_t dest_ch) +void setLink(GEN_sig_t *source_gen, GEN_channel_t source_ch, GEN_sig_t *dest_gen, GEN_channel_t dest_ch) { } \ No newline at end of file diff --git a/firmware/shared_libs/controllers/ctrl_generator.h b/firmware/shared_libs/controllers/ctrl_generator.h index 6eaf595..beab7d9 100644 --- a/firmware/shared_libs/controllers/ctrl_generator.h +++ b/firmware/shared_libs/controllers/ctrl_generator.h @@ -1,12 +1,12 @@ #pragma once #include "ctrl_app.h" -void setLink(GENERATOR_t *source_gen, GEN_channel_t source_ch, GENERATOR_t *dest_gen, GEN_channel_t dest_ch); -void setEnabled(GENERATOR_t *gen, GEN_channel_t channel); -void setDuty(GENERATOR_t *gen, GEN_channel_t channel); -void setWave(GENERATOR_t *gen, GEN_channel_t channel); -void setPhase(GENERATOR_t *gen, GEN_channel_t channel); -void setOfsset(GENERATOR_t *gen, GEN_channel_t channel); -void setAmplitude(GENERATOR_t *gen, GEN_channel_t channel); -void setFreq(GENERATOR_t *gen, GEN_channel_t channel); +void setLink(GEN_sig_t *source_gen, GEN_channel_t source_ch, GEN_sig_t *dest_gen, GEN_channel_t dest_ch); +void setEnabled(GEN_sig_t *gen, GEN_channel_t channel); +void setDuty(GEN_sig_t *gen, GEN_channel_t channel); +void setWave(GEN_sig_t *gen, GEN_channel_t channel); +void setPhase(GEN_sig_t *gen, GEN_channel_t channel); +void setOfsset(GEN_sig_t *gen, GEN_channel_t channel); +void setAmplitude(GEN_sig_t *gen, GEN_channel_t channel); +void setFreq(GEN_sig_t *gen, GEN_channel_t channel); void gen_init(); \ No newline at end of file diff --git a/firmware/shared_libs/disp_layout/disp_layout.c b/firmware/shared_libs/disp_layout/disp_layout.c index 32bc990..dd0dff2 100644 --- a/firmware/shared_libs/disp_layout/disp_layout.c +++ b/firmware/shared_libs/disp_layout/disp_layout.c @@ -180,7 +180,7 @@ static void _drawPhaseValueHelper(GFX_display_t *disp, uint32_t phase, uint8_t f static void _drawFuncGenValues(GFX_display_t *disp, APP_data_t *app_data) { - GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->generator; + GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->curr_gen; switch (app_data->curr_state_lay) { case LAY_FREQ: @@ -220,7 +220,7 @@ static void _drawFuncGenValues(GFX_display_t *disp, APP_data_t *app_data) static void _drawPwmGenValues(GFX_display_t *disp, APP_data_t *app_data) { - // GEN_pwm_t *pwm_gen = app_data->generator; + // GEN_pwm_t *pwm_gen = app_data->curr_gen; } static void _drawValues(GFX_display_t *disp, APP_data_t *app_data) @@ -264,7 +264,7 @@ static void _drawOffsetLine(GFX_display_t *disp, int16_t offs, uint32_t ampl) static void _drawFunGenGraph(GFX_display_t *disp, APP_data_t *app_data) { - GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->generator; + GEN_fg_t *fun_gen = (GEN_fg_t *)app_data->curr_gen; DISP_clearRegion(disp, 3, 12, 57, 40); switch (fun_gen->wave)