[wip] channels added
This commit is contained in:
@@ -72,6 +72,8 @@ void Error_Handler(void);
|
|||||||
#define BTN3_GPIO_Port GPIOA
|
#define BTN3_GPIO_Port GPIOA
|
||||||
#define BTN4_Pin GPIO_PIN_5
|
#define BTN4_Pin GPIO_PIN_5
|
||||||
#define BTN4_GPIO_Port GPIOA
|
#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_Pin GPIO_PIN_11
|
||||||
#define AMP1_CS_GPIO_Port GPIOB
|
#define AMP1_CS_GPIO_Port GPIOB
|
||||||
#define DDS1_CS_Pin GPIO_PIN_12
|
#define DDS1_CS_Pin GPIO_PIN_12
|
||||||
@@ -98,6 +100,8 @@ void Error_Handler(void);
|
|||||||
#define ST7565_MOSI_GPIO_Port GPIOC
|
#define ST7565_MOSI_GPIO_Port GPIOC
|
||||||
#define SWO_Pin GPIO_PIN_3
|
#define SWO_Pin GPIO_PIN_3
|
||||||
#define SWO_GPIO_Port GPIOB
|
#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 BEGIN Private defines */
|
||||||
|
|
||||||
/* USER CODE END Private defines */
|
/* USER CODE END Private defines */
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ void MX_GPIO_Init(void)
|
|||||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*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 */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOC, ST7565_RST_Pin|ST7565_A0_Pin|ST7565_CS_Pin, GPIO_PIN_RESET);
|
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;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pins : PBPin PBPin */
|
/*Configure GPIO pins : PBPin PBPin PBPin PBPin */
|
||||||
GPIO_InitStruct.Pin = AMP1_CS_Pin|DDS1_CS_Pin;
|
GPIO_InitStruct.Pin = DDS2_CS_Pin|AMP1_CS_Pin|DDS1_CS_Pin|AMP2_CS_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
|||||||
@@ -169,7 +169,8 @@ void SystemClock_Config(void)
|
|||||||
|
|
||||||
/** Initializes the CPU, AHB and APB buses clocks
|
/** 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.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
||||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
@@ -179,7 +180,8 @@ void SystemClock_Config(void)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_TIM2 | RCC_PERIPHCLK_TIM34;
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2|RCC_PERIPHCLK_I2C1
|
||||||
|
|RCC_PERIPHCLK_TIM2|RCC_PERIPHCLK_TIM34;
|
||||||
PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
|
PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
|
||||||
PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;
|
PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;
|
||||||
PeriphClkInit.Tim2ClockSelection = RCC_TIM2CLK_HCLK;
|
PeriphClkInit.Tim2ClockSelection = RCC_TIM2CLK_HCLK;
|
||||||
|
|||||||
@@ -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]
|
||||||
##########################################################################################################################
|
##########################################################################################################################
|
||||||
|
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
|
|||||||
@@ -24,35 +24,37 @@ Mcu.Pin1=PC14-OSC32_IN
|
|||||||
Mcu.Pin10=PA5
|
Mcu.Pin10=PA5
|
||||||
Mcu.Pin11=PA6
|
Mcu.Pin11=PA6
|
||||||
Mcu.Pin12=PA7
|
Mcu.Pin12=PA7
|
||||||
Mcu.Pin13=PB11
|
Mcu.Pin13=PB10
|
||||||
Mcu.Pin14=PB12
|
Mcu.Pin14=PB11
|
||||||
Mcu.Pin15=PB13
|
Mcu.Pin15=PB12
|
||||||
Mcu.Pin16=PB14
|
Mcu.Pin16=PB13
|
||||||
Mcu.Pin17=PB15
|
Mcu.Pin17=PB14
|
||||||
Mcu.Pin18=PC8
|
Mcu.Pin18=PB15
|
||||||
Mcu.Pin19=PC9
|
Mcu.Pin19=PC8
|
||||||
Mcu.Pin2=PC15-OSC32_OUT
|
Mcu.Pin2=PC15-OSC32_OUT
|
||||||
Mcu.Pin20=PA8
|
Mcu.Pin20=PC9
|
||||||
Mcu.Pin21=PA9
|
Mcu.Pin21=PA8
|
||||||
Mcu.Pin22=PA10
|
Mcu.Pin22=PA9
|
||||||
Mcu.Pin23=PA13
|
Mcu.Pin23=PA10
|
||||||
Mcu.Pin24=PA14
|
Mcu.Pin24=PA13
|
||||||
Mcu.Pin25=PC10
|
Mcu.Pin25=PA14
|
||||||
Mcu.Pin26=PC11
|
Mcu.Pin26=PC10
|
||||||
Mcu.Pin27=PC12
|
Mcu.Pin27=PC11
|
||||||
Mcu.Pin28=PB3
|
Mcu.Pin28=PC12
|
||||||
Mcu.Pin29=PB6
|
Mcu.Pin29=PB3
|
||||||
Mcu.Pin3=PF0-OSC_IN
|
Mcu.Pin3=PF0-OSC_IN
|
||||||
Mcu.Pin30=PB7
|
Mcu.Pin30=PB6
|
||||||
Mcu.Pin31=VP_SYS_VS_Systick
|
Mcu.Pin31=PB7
|
||||||
Mcu.Pin32=VP_TIM2_VS_ClockSourceINT
|
Mcu.Pin32=PB9
|
||||||
|
Mcu.Pin33=VP_SYS_VS_Systick
|
||||||
|
Mcu.Pin34=VP_TIM2_VS_ClockSourceINT
|
||||||
Mcu.Pin4=PF1-OSC_OUT
|
Mcu.Pin4=PF1-OSC_OUT
|
||||||
Mcu.Pin5=PA0
|
Mcu.Pin5=PA0
|
||||||
Mcu.Pin6=PA1
|
Mcu.Pin6=PA1
|
||||||
Mcu.Pin7=PA2
|
Mcu.Pin7=PA2
|
||||||
Mcu.Pin8=PA3
|
Mcu.Pin8=PA3
|
||||||
Mcu.Pin9=PA4
|
Mcu.Pin9=PA4
|
||||||
Mcu.PinsNb=33
|
Mcu.PinsNb=35
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32F303RETx
|
Mcu.UserName=STM32F303RETx
|
||||||
@@ -126,6 +128,10 @@ PA9.GPIOParameters=GPIO_Label
|
|||||||
PA9.GPIO_Label=BTN_CH1
|
PA9.GPIO_Label=BTN_CH1
|
||||||
PA9.Locked=true
|
PA9.Locked=true
|
||||||
PA9.Signal=GPIO_Input
|
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.GPIOParameters=GPIO_Label
|
||||||
PB11.GPIO_Label=AMP1_CS
|
PB11.GPIO_Label=AMP1_CS
|
||||||
PB11.Locked=true
|
PB11.Locked=true
|
||||||
@@ -149,6 +155,10 @@ PB6.Mode=I2C
|
|||||||
PB6.Signal=I2C1_SCL
|
PB6.Signal=I2C1_SCL
|
||||||
PB7.Mode=I2C
|
PB7.Mode=I2C
|
||||||
PB7.Signal=I2C1_SDA
|
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.GPIOParameters=GPIO_Label
|
||||||
PC10.GPIO_Label=ST7565_SCK
|
PC10.GPIO_Label=ST7565_SCK
|
||||||
PC10.Locked=true
|
PC10.Locked=true
|
||||||
@@ -214,7 +224,7 @@ ProjectManager.StackSize=0x400
|
|||||||
ProjectManager.TargetToolchain=Makefile
|
ProjectManager.TargetToolchain=Makefile
|
||||||
ProjectManager.ToolChainLocation=
|
ProjectManager.ToolChainLocation=
|
||||||
ProjectManager.UnderRoot=false
|
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.ADC12outputFreq_Value=72000000
|
||||||
RCC.ADC34outputFreq_Value=72000000
|
RCC.ADC34outputFreq_Value=72000000
|
||||||
RCC.AHBFreq_Value=72000000
|
RCC.AHBFreq_Value=72000000
|
||||||
|
|||||||
@@ -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 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 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 const uint32_t pow_of_10[7] = {1, 10, 100, 1000, 10000, 100000, 1000000};
|
||||||
|
|
||||||
static HW_BotBtnName_t last_key;
|
static HW_BotBtnName_t last_key;
|
||||||
static APP_data_t *_app_data;
|
static APP_data_t *_app_data;
|
||||||
|
|
||||||
static GENERATOR_t generators[CHANNEL_MAX] = {
|
static GEN_sig_t signal_gen[CHANNEL_MAX] = {
|
||||||
{.gen_type = GEN_FG_TYPE, .gen = &func_gen[0]},
|
{.type = GEN_FG_TYPE, .gen = &func_gen[0]},
|
||||||
{.gen_type = GEN_FG_TYPE, .gen = &func_gen[1]},
|
{.type = GEN_FG_TYPE, .gen = &func_gen[1]},
|
||||||
{.gen_type = GEN_FG_TYPE, .gen = &func_gen[2]},
|
{.type = GEN_FG_TYPE, .gen = &func_gen[2]},
|
||||||
{.gen_type = GEN_PWM_TYPE, .gen = &pwm_gen[0]},
|
{.type = GEN_PWM_TYPE, .gen = &pwm_gen[0]},
|
||||||
{.gen_type = GEN_PWM_TYPE, .gen = &pwm_gen[1]},
|
{.type = GEN_PWM_TYPE, .gen = &pwm_gen[1]},
|
||||||
{.gen_type = GEN_PWM_TYPE, .gen = &pwm_gen[2]},
|
{.type = GEN_PWM_TYPE, .gen = &pwm_gen[2]},
|
||||||
};
|
};
|
||||||
|
|
||||||
void APP_init(APP_data_t *app_data)
|
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->phas_focus_digit = 0;
|
||||||
_app_data->duty_focus_digit = 0;
|
_app_data->duty_focus_digit = 0;
|
||||||
|
|
||||||
_app_data->curr_gen_type = GEN_FG_TYPE;
|
_app_data->curr_gen_type = signal_gen[CHANNEL1].type;
|
||||||
_app_data->generator = generators[CHANNEL1].gen;
|
_app_data->curr_gen = signal_gen[CHANNEL1].gen;
|
||||||
|
|
||||||
_app_data->curr_state_lay = LAY_MAIN;
|
_app_data->curr_state_lay = LAY_MAIN;
|
||||||
_app_data->curr_state_btn = BTN_MAIN_FG;
|
_app_data->curr_state_btn = BTN_MAIN_FG;
|
||||||
|
_app_data->curr_channel = CHANNEL1;
|
||||||
|
|
||||||
_app_data->isChannelChange = 1;
|
_app_data->isChannelChange = 1;
|
||||||
_app_data->isGraphChange = 1;
|
_app_data->isGraphChange = 1;
|
||||||
@@ -84,31 +86,51 @@ void CTRL_pushedDispBtnEvent(ButtonKey_t *key)
|
|||||||
void CTRL_pushedChanBtnEvent(ButtonKey_t *key)
|
void CTRL_pushedChanBtnEvent(ButtonKey_t *key)
|
||||||
{
|
{
|
||||||
ULOG_TRACE("Chan btn: %d", key->instance);
|
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)
|
void CTRL_longPushedChanBtnEvent(ButtonKey_t *key)
|
||||||
{
|
{
|
||||||
ULOG_TRACE("Chan btn(long): %d", key->instance);
|
ULOG_TRACE("Chan btn(long): %d", key->instance);
|
||||||
GEN_fg_t *dds_ch0 = generators[key->instance].gen;
|
GEN_channel_t channel = btn_ch_to_chan[key->instance];
|
||||||
if (dds_ch0->enabled)
|
|
||||||
|
switch (signal_gen[channel].type)
|
||||||
{
|
{
|
||||||
dds_ch0->enabled = FALSE;
|
case GEN_FG_TYPE:
|
||||||
setEnabled(&generators[CHANNEL1], CHANNEL1);
|
|
||||||
HAL_GPIO_WritePin(LED_CH1_GPIO_Port, LED_CH1_Pin, GPIO_PIN_SET);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
dds_ch0->enabled = TRUE;
|
GEN_fg_t *gen = signal_gen[channel].gen;
|
||||||
setEnabled(&generators[CHANNEL1], CHANNEL1);
|
gen->enabled = gen->enabled ? FALSE : TRUE;
|
||||||
HAL_GPIO_WritePin(LED_CH1_GPIO_Port, LED_CH1_Pin, GPIO_PIN_RESET);
|
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)
|
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)
|
switch (_app_data->curr_state_lay)
|
||||||
{
|
{
|
||||||
@@ -121,7 +143,7 @@ static void _changeValueFunGen(int8_t dir)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gen->frequency = new_freq;
|
gen->frequency = new_freq;
|
||||||
setFreq(&generators[CHANNEL1], CHANNEL1);
|
setFreq(&signal_gen[CHANNEL1], CHANNEL1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LAY_AMPL:
|
case LAY_AMPL:
|
||||||
@@ -133,7 +155,7 @@ static void _changeValueFunGen(int8_t dir)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gen->amplitude = new_ampl;
|
gen->amplitude = new_ampl;
|
||||||
setAmplitude(&generators[CHANNEL1], CHANNEL1);
|
setAmplitude(&signal_gen[CHANNEL1], CHANNEL1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LAY_OFFS:
|
case LAY_OFFS:
|
||||||
@@ -145,7 +167,7 @@ static void _changeValueFunGen(int8_t dir)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gen->offset = new_offs;
|
gen->offset = new_offs;
|
||||||
setOfsset(&generators[CHANNEL1], CHANNEL1);
|
setOfsset(&signal_gen[CHANNEL1], CHANNEL1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LAY_PHAS:
|
case LAY_PHAS:
|
||||||
@@ -170,7 +192,7 @@ static void _changeValueFunGen(int8_t dir)
|
|||||||
|
|
||||||
static void _changeValuePwmGen(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)
|
switch (_app_data->curr_state_lay)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ typedef struct
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
GEN_type_t gen_type;
|
GEN_type_t type;
|
||||||
void *const gen;
|
void *const gen;
|
||||||
} GENERATOR_t;
|
} GEN_sig_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -39,7 +39,7 @@ typedef struct
|
|||||||
uint8_t duty_focus_digit;
|
uint8_t duty_focus_digit;
|
||||||
|
|
||||||
GEN_type_t curr_gen_type;
|
GEN_type_t curr_gen_type;
|
||||||
void *generator;
|
void *curr_gen;
|
||||||
|
|
||||||
GEN_channel_t curr_channel;
|
GEN_channel_t curr_channel;
|
||||||
STATE_layout_t curr_state_lay;
|
STATE_layout_t curr_state_lay;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#define FUN_GEN_FOCUS_MAX 6U
|
#define FUN_GEN_FOCUS_MAX 6U
|
||||||
#define PWM_GEN_FOCUS_MAX 4U
|
#define PWM_GEN_FOCUS_MAX 4U
|
||||||
#define MAX_FREQ 1000000U
|
#define MAX_FREQ 1000000U
|
||||||
#define MAX_VOLT_POS 330
|
#define MAX_VOLT_POS 360
|
||||||
#define MAX_VOLT_NEG 0
|
#define MAX_VOLT_NEG 0
|
||||||
#define MAX_PHAS 360
|
#define MAX_PHAS 360
|
||||||
#define MAX_DUTY 100
|
#define MAX_DUTY 100
|
||||||
|
|||||||
@@ -9,12 +9,19 @@
|
|||||||
|
|
||||||
typedef struct FG_handle_s FG_handle_t;
|
typedef struct FG_handle_s FG_handle_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
GPIO_TypeDef *port;
|
||||||
|
uint16_t pin;
|
||||||
|
} GEN_led_t;
|
||||||
|
|
||||||
struct FG_handle_s
|
struct FG_handle_s
|
||||||
{
|
{
|
||||||
ad9833_handle_t hdds;
|
ad9833_handle_t hdds;
|
||||||
ltc2631_handle_t hoffs;
|
ltc2631_handle_t hoffs;
|
||||||
mcp41x_handle_t hampl;
|
mcp41x_handle_t hampl;
|
||||||
FG_handle_t *link[2];
|
FG_handle_t *link[2];
|
||||||
|
GEN_led_t hled;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef uint8_t timer_handle_t;
|
typedef uint8_t timer_handle_t;
|
||||||
@@ -23,6 +30,7 @@ typedef struct
|
|||||||
timer_handle_t hpwm;
|
timer_handle_t hpwm;
|
||||||
ltc2631_handle_t hoffs;
|
ltc2631_handle_t hoffs;
|
||||||
mcp41x_handle_t hampl;
|
mcp41x_handle_t hampl;
|
||||||
|
GEN_led_t hled;
|
||||||
} PWM_handle_t;
|
} PWM_handle_t;
|
||||||
|
|
||||||
typedef enum
|
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 AMP1_CS_PIN GPIO_PIN_0
|
||||||
// #define AMP2_CS_PIN GPIO_PIN_0
|
// #define AMP2_CS_PIN GPIO_PIN_0
|
||||||
// #define AMP3_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()
|
void gen_init()
|
||||||
{
|
{
|
||||||
ad9833_init(&dds_gen[FG_CHAN1].hdds, &hspi2, DDS1_CS_GPIO_Port, DDS1_CS_Pin);
|
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_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);
|
// 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);
|
// 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_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_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);
|
// 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)
|
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);
|
ULOG_DEBUG("(%d:_setAmplitude) phase: %d", __LINE__, gen->enabled);
|
||||||
switch (gen->enabled)
|
switch (gen->enabled)
|
||||||
{
|
{
|
||||||
case FALSE:
|
case FALSE:
|
||||||
ad9833_setMode(hdds, MODE_OFF);
|
ad9833_setMode(&hfg->hdds, MODE_OFF);
|
||||||
|
led_off(&hfg->hled);
|
||||||
break;
|
break;
|
||||||
case TRUE:
|
case TRUE:
|
||||||
_setWaveDdsGen(hdds, gen->wave);
|
_setWaveDdsGen(&hfg->hdds, gen->wave);
|
||||||
|
led_on(&hfg->hled);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
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:
|
case GEN_FG_TYPE:
|
||||||
_setFreqDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->frequency);
|
_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;
|
break;
|
||||||
|
|
||||||
default:
|
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;
|
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:
|
case GEN_FG_TYPE:
|
||||||
_setAmpliude(&dds_gen[ch_to_gen_ch[channel]].hampl, ((GEN_fg_t *)gen->gen)->amplitude);
|
_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;
|
break;
|
||||||
|
|
||||||
default:
|
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;
|
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:
|
case GEN_FG_TYPE:
|
||||||
_setOffset(&dds_gen[ch_to_gen_ch[channel]].hoffs, ((GEN_fg_t *)gen->gen)->offset);
|
_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;
|
break;
|
||||||
|
|
||||||
default:
|
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;
|
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:
|
case GEN_FG_TYPE:
|
||||||
_setPhaseDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->phase);
|
_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;
|
break;
|
||||||
|
|
||||||
default:
|
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;
|
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:
|
case GEN_FG_TYPE:
|
||||||
_setWaveDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->wave);
|
_setWaveDdsGen(&dds_gen[ch_to_gen_ch[channel]].hdds, ((GEN_fg_t *)gen->gen)->wave);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
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;
|
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:
|
case GEN_PWM_TYPE:
|
||||||
_setDutyPwmGen(&pwm_gen[ch_to_gen_ch[channel]].hpwm, ((GEN_pwm_t *)gen->gen)->duty);
|
_setDutyPwmGen(&pwm_gen[ch_to_gen_ch[channel]].hpwm, ((GEN_pwm_t *)gen->gen)->duty);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
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;
|
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:
|
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;
|
break;
|
||||||
case GEN_PWM_TYPE:
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
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;
|
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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "ctrl_app.h"
|
#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 setLink(GEN_sig_t *source_gen, GEN_channel_t source_ch, GEN_sig_t *dest_gen, GEN_channel_t dest_ch);
|
||||||
void setEnabled(GENERATOR_t *gen, GEN_channel_t channel);
|
void setEnabled(GEN_sig_t *gen, GEN_channel_t channel);
|
||||||
void setDuty(GENERATOR_t *gen, GEN_channel_t channel);
|
void setDuty(GEN_sig_t *gen, GEN_channel_t channel);
|
||||||
void setWave(GENERATOR_t *gen, GEN_channel_t channel);
|
void setWave(GEN_sig_t *gen, GEN_channel_t channel);
|
||||||
void setPhase(GENERATOR_t *gen, GEN_channel_t channel);
|
void setPhase(GEN_sig_t *gen, GEN_channel_t channel);
|
||||||
void setOfsset(GENERATOR_t *gen, GEN_channel_t channel);
|
void setOfsset(GEN_sig_t *gen, GEN_channel_t channel);
|
||||||
void setAmplitude(GENERATOR_t *gen, GEN_channel_t channel);
|
void setAmplitude(GEN_sig_t *gen, GEN_channel_t channel);
|
||||||
void setFreq(GENERATOR_t *gen, GEN_channel_t channel);
|
void setFreq(GEN_sig_t *gen, GEN_channel_t channel);
|
||||||
void gen_init();
|
void gen_init();
|
||||||
@@ -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)
|
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)
|
switch (app_data->curr_state_lay)
|
||||||
{
|
{
|
||||||
case LAY_FREQ:
|
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)
|
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)
|
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)
|
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);
|
DISP_clearRegion(disp, 3, 12, 57, 40);
|
||||||
|
|
||||||
switch (fun_gen->wave)
|
switch (fun_gen->wave)
|
||||||
|
|||||||
Reference in New Issue
Block a user