Compare commits

...

5 Commits

Author SHA1 Message Date
527585217c {wip} test timer clock source 2023-08-01 11:04:16 +02:00
d3d896a419 [fix] modify calc freq/phase and correct bugs 2023-07-31 21:01:49 +02:00
a690f3a209 [wip] channels added 2023-07-31 14:04:45 +02:00
d7e25af8bf [fix] dds off on startup 2023-07-30 07:09:05 +02:00
40e0ca1d0c initialize ad9833 and mcp41 2023-05-21 21:09:07 +02:00
22 changed files with 687 additions and 347 deletions

View File

@@ -1 +1 @@
[] [{"node":"ADC1","expanded":true,"format":0,"pinned":false}]

View File

@@ -18,5 +18,6 @@
"ulog.h": "c", "ulog.h": "c",
"ctrl_generator.h": "c", "ctrl_generator.h": "c",
"type_traits": "c" "type_traits": "c"
} },
"cortex-debug.variableUseNaturalFormat": true
} }

View File

@@ -23,8 +23,7 @@
#define __MAIN_H #define __MAIN_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C" {
{
#endif #endif
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
@@ -61,38 +60,52 @@ extern "C"
/* Private defines -----------------------------------------------------------*/ /* Private defines -----------------------------------------------------------*/
#define B1_Pin GPIO_PIN_13 #define B1_Pin GPIO_PIN_13
#define B1_GPIO_Port GPIOC #define B1_GPIO_Port GPIOC
#define BTN1_Pin GPIO_PIN_0
#define BTN1_GPIO_Port GPIOA
#define BTN2_Pin GPIO_PIN_1
#define BTN2_GPIO_Port GPIOA
#define USART_TX_Pin GPIO_PIN_2 #define USART_TX_Pin GPIO_PIN_2
#define USART_TX_GPIO_Port GPIOA #define USART_TX_GPIO_Port GPIOA
#define USART_RX_Pin GPIO_PIN_3 #define USART_RX_Pin GPIO_PIN_3
#define USART_RX_GPIO_Port GPIOA #define USART_RX_GPIO_Port GPIOA
#define LD2_Pin GPIO_PIN_5 #define BTN3_Pin GPIO_PIN_4
#define LD2_GPIO_Port GPIOA #define BTN3_GPIO_Port GPIOA
#define BTN1_Pin GPIO_PIN_1 #define BTN4_Pin GPIO_PIN_5
#define BTN1_GPIO_Port GPIOB #define BTN4_GPIO_Port GPIOA
#define BTN2_Pin GPIO_PIN_2 #define DDS2_CS_Pin GPIO_PIN_10
#define BTN2_GPIO_Port GPIOB #define DDS2_CS_GPIO_Port GPIOB
#define BTN3_Pin GPIO_PIN_11 #define AMP1_CS_Pin GPIO_PIN_11
#define BTN3_GPIO_Port GPIOB #define AMP1_CS_GPIO_Port GPIOB
#define BTN4_Pin GPIO_PIN_12 #define DDS1_CS_Pin GPIO_PIN_12
#define BTN4_GPIO_Port GPIOB #define DDS1_CS_GPIO_Port GPIOB
#define BTN5_Pin GPIO_PIN_11 #define ST7565_RST_Pin GPIO_PIN_8
#define ST7565_RST_GPIO_Port GPIOC
#define ST7565_A0_Pin GPIO_PIN_9
#define ST7565_A0_GPIO_Port GPIOC
#define BTN5_Pin GPIO_PIN_8
#define BTN5_GPIO_Port GPIOA #define BTN5_GPIO_Port GPIOA
#define BTN_CH1_Pin GPIO_PIN_9
#define BTN_CH1_GPIO_Port GPIOA
#define LED_CH1_Pin GPIO_PIN_10
#define LED_CH1_GPIO_Port GPIOA
#define BTN_CH2_Pin GPIO_PIN_11
#define BTN_CH2_GPIO_Port GPIOA
#define LED_CH2_Pin GPIO_PIN_12
#define LED_CH2_GPIO_Port GPIOA
#define TMS_Pin GPIO_PIN_13 #define TMS_Pin GPIO_PIN_13
#define TMS_GPIO_Port GPIOA #define TMS_GPIO_Port GPIOA
#define TCK_Pin GPIO_PIN_14 #define TCK_Pin GPIO_PIN_14
#define TCK_GPIO_Port GPIOA #define TCK_GPIO_Port GPIOA
#define ST7565_CS_Pin GPIO_PIN_15
#define ST7565_CS_GPIO_Port GPIOA
#define ST7565_SCK_Pin GPIO_PIN_10 #define ST7565_SCK_Pin GPIO_PIN_10
#define ST7565_SCK_GPIO_Port GPIOC #define ST7565_SCK_GPIO_Port GPIOC
#define ST7565_RST_Pin GPIO_PIN_11 #define ST7565_CS_Pin GPIO_PIN_11
#define ST7565_RST_GPIO_Port GPIOC #define ST7565_CS_GPIO_Port GPIOC
#define ST7565_MOSI_Pin GPIO_PIN_12 #define ST7565_MOSI_Pin GPIO_PIN_12
#define ST7565_MOSI_GPIO_Port GPIOC #define ST7565_MOSI_GPIO_Port GPIOC
#define ST7565_A0_Pin GPIO_PIN_2
#define ST7565_A0_GPIO_Port GPIOD
#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 */

View File

@@ -36,12 +36,17 @@ extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3; extern TIM_HandleTypeDef htim3;
extern TIM_HandleTypeDef htim17;
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */ /* USER CODE END Private defines */
void MX_TIM2_Init(void); void MX_TIM2_Init(void);
void MX_TIM3_Init(void); void MX_TIM3_Init(void);
void MX_TIM17_Init(void);
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
/* USER CODE BEGIN Prototypes */ /* USER CODE BEGIN Prototypes */

View File

@@ -49,16 +49,15 @@ void MX_GPIO_Init(void)
__HAL_RCC_GPIOF_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOA, LD2_Pin|ST7565_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(ST7565_RST_GPIO_Port, ST7565_RST_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOC, ST7565_RST_Pin|ST7565_A0_Pin|ST7565_CS_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(ST7565_A0_GPIO_Port, ST7565_A0_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, LED_CH1_Pin|LED_CH2_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : PtPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = B1_Pin; GPIO_InitStruct.Pin = B1_Pin;
@@ -66,39 +65,35 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : PAPin PAPin PAPin PAPin
PAPin PAPin PAPin */
GPIO_InitStruct.Pin = BTN1_Pin|BTN2_Pin|BTN3_Pin|BTN4_Pin
|BTN5_Pin|BTN_CH1_Pin|BTN_CH2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*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;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : PCPin PCPin PCPin */
GPIO_InitStruct.Pin = ST7565_RST_Pin|ST7565_A0_Pin|ST7565_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : PAPin PAPin */ /*Configure GPIO pins : PAPin PAPin */
GPIO_InitStruct.Pin = LD2_Pin|ST7565_CS_Pin; GPIO_InitStruct.Pin = LED_CH1_Pin|LED_CH2_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;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/*Configure GPIO pins : PBPin PBPin PBPin PBPin */
GPIO_InitStruct.Pin = BTN1_Pin|BTN2_Pin|BTN3_Pin|BTN4_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = BTN5_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(BTN5_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = ST7565_RST_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(ST7565_RST_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = ST7565_A0_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(ST7565_A0_GPIO_Port, &GPIO_InitStruct);
} }
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */

View File

@@ -100,11 +100,11 @@ int main(void)
MX_SPI3_Init(); MX_SPI3_Init();
MX_TIM2_Init(); MX_TIM2_Init();
MX_TIM3_Init(); MX_TIM3_Init();
MX_TIM17_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
ulog_init(); ulog_init();
ulog_subscribe(RTT_console_logger, ULOG_DEBUG_LEVEL); ulog_subscribe(RTT_console_logger, ULOG_TRACE_LEVEL);
APP_init(&app_data);
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL); HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
// SEGGER_RTT_WriteString(0, "App start...\n"); // SEGGER_RTT_WriteString(0, "App start...\n");
ULOG_INFO("start app..."); ULOG_INFO("start app...");
@@ -124,8 +124,9 @@ int main(void)
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN WHILE */
DISP_clearScreen(&disp); DISP_clearScreen(&disp);
ST7565_DisplayAll(&hst7565); ST7565_DisplayAll(&hst7565);
HAL_Delay(1000);
uint32_t last_tick = HAL_GetTick(); uint32_t last_tick = HAL_GetTick();
APP_init(&app_data);
while (1) while (1)
{ {
CTRL_buttonsHandler(); CTRL_buttonsHandler();
@@ -169,7 +170,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,9 +181,12 @@ 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_TIM17|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.Tim17ClockSelection = RCC_TIM17CLK_HCLK;
PeriphClkInit.Tim2ClockSelection = RCC_TIM2CLK_HCLK; PeriphClkInit.Tim2ClockSelection = RCC_TIM2CLK_HCLK;
PeriphClkInit.Tim34ClockSelection = RCC_TIM34CLK_HCLK; PeriphClkInit.Tim34ClockSelection = RCC_TIM34CLK_HCLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

View File

@@ -42,7 +42,7 @@ void MX_SPI2_Init(void)
hspi2.Init.Mode = SPI_MODE_MASTER; hspi2.Init.Mode = SPI_MODE_MASTER;
hspi2.Init.Direction = SPI_DIRECTION_2LINES; hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT; hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.NSS = SPI_NSS_SOFT; hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;

View File

@@ -26,6 +26,7 @@
TIM_HandleTypeDef htim2; TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim3; TIM_HandleTypeDef htim3;
TIM_HandleTypeDef htim17;
/* TIM2 init function */ /* TIM2 init function */
void MX_TIM2_Init(void) void MX_TIM2_Init(void)
@@ -110,6 +111,64 @@ void MX_TIM3_Init(void)
/* USER CODE END TIM3_Init 2 */ /* USER CODE END TIM3_Init 2 */
}
/* TIM17 init function */
void MX_TIM17_Init(void)
{
/* USER CODE BEGIN TIM17_Init 0 */
/* USER CODE END TIM17_Init 0 */
TIM_OC_InitTypeDef sConfigOC = {0};
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
/* USER CODE BEGIN TIM17_Init 1 */
/* USER CODE END TIM17_Init 1 */
htim17.Instance = TIM17;
htim17.Init.Prescaler = 0;
htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
htim17.Init.Period = 2;
htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim17.Init.RepetitionCounter = 0;
htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim17) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim17) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 1;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel(&htim17, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.DeadTime = 0;
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.BreakFilter = 0;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_TIMEx_ConfigBreakDeadTime(&htim17, &sBreakDeadTimeConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM17_Init 2 */
/* USER CODE END TIM17_Init 2 */
HAL_TIM_MspPostInit(&htim17);
} }
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
@@ -126,6 +185,17 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */
} }
else if(tim_baseHandle->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspInit 0 */
/* USER CODE END TIM17_MspInit 0 */
/* TIM17 clock enable */
__HAL_RCC_TIM17_CLK_ENABLE();
/* USER CODE BEGIN TIM17_MspInit 1 */
/* USER CODE END TIM17_MspInit 1 */
}
} }
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle) void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle)
@@ -157,6 +227,33 @@ void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle)
/* USER CODE END TIM3_MspInit 1 */ /* USER CODE END TIM3_MspInit 1 */
} }
} }
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(timHandle->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspPostInit 0 */
/* USER CODE END TIM17_MspPostInit 0 */
__HAL_RCC_GPIOB_CLK_ENABLE();
/**TIM17 GPIO Configuration
PB5 ------> TIM17_CH1
*/
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF10_TIM17;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN TIM17_MspPostInit 1 */
/* USER CODE END TIM17_MspPostInit 1 */
}
}
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
{ {
@@ -172,6 +269,17 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM2_MspDeInit 1 */ /* USER CODE END TIM2_MspDeInit 1 */
} }
else if(tim_baseHandle->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspDeInit 0 */
/* USER CODE END TIM17_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM17_CLK_DISABLE();
/* USER CODE BEGIN TIM17_MspDeInit 1 */
/* USER CODE END TIM17_MspDeInit 1 */
}
} }
void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* tim_encoderHandle) void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* tim_encoderHandle)

View File

@@ -1,5 +1,5 @@
########################################################################################################################## ##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.17.1] date: [Fri Apr 21 19:03:25 CEST 2023] # File automatically-generated by tool: [projectgenerator] version: [3.17.1] date: [Tue Aug 01 10:57:07 CEST 2023]
########################################################################################################################## ##########################################################################################################################
# ------------------------------------------------ # ------------------------------------------------

View File

@@ -15,41 +15,51 @@ Mcu.IP4=SPI3
Mcu.IP5=SYS Mcu.IP5=SYS
Mcu.IP6=TIM2 Mcu.IP6=TIM2
Mcu.IP7=TIM3 Mcu.IP7=TIM3
Mcu.IP8=USART2 Mcu.IP8=TIM17
Mcu.IPNb=9 Mcu.IP9=USART2
Mcu.IPNb=10
Mcu.Name=STM32F303R(D-E)Tx Mcu.Name=STM32F303R(D-E)Tx
Mcu.Package=LQFP64 Mcu.Package=LQFP64
Mcu.Pin0=PC13 Mcu.Pin0=PC13
Mcu.Pin1=PC14-OSC32_IN Mcu.Pin1=PC14-OSC32_IN
Mcu.Pin10=PB1 Mcu.Pin10=PA5
Mcu.Pin11=PB2 Mcu.Pin11=PA6
Mcu.Pin12=PB11 Mcu.Pin12=PA7
Mcu.Pin13=PB12 Mcu.Pin13=PB10
Mcu.Pin14=PB13 Mcu.Pin14=PB11
Mcu.Pin15=PB14 Mcu.Pin15=PB12
Mcu.Pin16=PB15 Mcu.Pin16=PB13
Mcu.Pin17=PA11 Mcu.Pin17=PB14
Mcu.Pin18=PA13 Mcu.Pin18=PB15
Mcu.Pin19=PA14 Mcu.Pin19=PC8
Mcu.Pin2=PC15-OSC32_OUT Mcu.Pin2=PC15-OSC32_OUT
Mcu.Pin20=PA15 Mcu.Pin20=PC9
Mcu.Pin21=PC10 Mcu.Pin21=PA8
Mcu.Pin22=PC11 Mcu.Pin22=PA9
Mcu.Pin23=PC12 Mcu.Pin23=PA10
Mcu.Pin24=PD2 Mcu.Pin24=PA11
Mcu.Pin25=PB3 Mcu.Pin25=PA12
Mcu.Pin26=PB6 Mcu.Pin26=PA13
Mcu.Pin27=PB7 Mcu.Pin27=PA14
Mcu.Pin28=VP_SYS_VS_Systick Mcu.Pin28=PC10
Mcu.Pin29=VP_TIM2_VS_ClockSourceINT Mcu.Pin29=PC11
Mcu.Pin3=PF0-OSC_IN Mcu.Pin3=PF0-OSC_IN
Mcu.Pin30=PC12
Mcu.Pin31=PB3
Mcu.Pin32=PB5
Mcu.Pin33=PB6
Mcu.Pin34=PB7
Mcu.Pin35=PB9
Mcu.Pin36=VP_SYS_VS_Systick
Mcu.Pin37=VP_TIM2_VS_ClockSourceINT
Mcu.Pin38=VP_TIM17_VS_ClockSourceINT
Mcu.Pin4=PF1-OSC_OUT Mcu.Pin4=PF1-OSC_OUT
Mcu.Pin5=PA2 Mcu.Pin5=PA0
Mcu.Pin6=PA3 Mcu.Pin6=PA1
Mcu.Pin7=PA5 Mcu.Pin7=PA2
Mcu.Pin8=PA6 Mcu.Pin8=PA3
Mcu.Pin9=PA7 Mcu.Pin9=PA4
Mcu.PinsNb=30 Mcu.PinsNb=39
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32F303RETx Mcu.UserName=STM32F303RETx
@@ -66,10 +76,26 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_0
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:true\:true\:true\:false NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:true\:true\:true\:false
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:true\:false\:false
PA0.GPIOParameters=GPIO_Label
PA0.GPIO_Label=BTN1
PA0.Locked=true
PA0.Signal=GPIO_Input
PA1.GPIOParameters=GPIO_Label
PA1.GPIO_Label=BTN2
PA1.Locked=true
PA1.Signal=GPIO_Input
PA10.GPIOParameters=GPIO_Label
PA10.GPIO_Label=LED_CH1
PA10.Locked=true
PA10.Signal=GPIO_Output
PA11.GPIOParameters=GPIO_Label PA11.GPIOParameters=GPIO_Label
PA11.GPIO_Label=BTN5 PA11.GPIO_Label=BTN_CH2
PA11.Locked=true PA11.Locked=true
PA11.Signal=GPIO_Input PA11.Signal=GPIO_Input
PA12.GPIOParameters=GPIO_Label
PA12.GPIO_Label=LED_CH2
PA12.Locked=true
PA12.Signal=GPIO_Output
PA13.GPIOParameters=GPIO_Label PA13.GPIOParameters=GPIO_Label
PA13.GPIO_Label=TMS PA13.GPIO_Label=TMS
PA13.Locked=true PA13.Locked=true
@@ -80,10 +106,6 @@ PA14.GPIO_Label=TCK
PA14.Locked=true PA14.Locked=true
PA14.Mode=Serial_Wire PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK PA14.Signal=SYS_JTCK-SWCLK
PA15.GPIOParameters=GPIO_Label
PA15.GPIO_Label=ST7565_CS
PA15.Locked=true
PA15.Signal=GPIO_Output
PA2.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode PA2.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode
PA2.GPIO_Label=USART_TX PA2.GPIO_Label=USART_TX
PA2.GPIO_Mode=GPIO_MODE_AF_PP PA2.GPIO_Mode=GPIO_MODE_AF_PP
@@ -100,54 +122,64 @@ PA3.GPIO_Speed=GPIO_SPEED_FREQ_LOW
PA3.Locked=true PA3.Locked=true
PA3.Mode=Asynchronous PA3.Mode=Asynchronous
PA3.Signal=USART2_RX PA3.Signal=USART2_RX
PA5.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode PA4.GPIOParameters=GPIO_Label
PA5.GPIO_Label=LD2 [Green Led] PA4.GPIO_Label=BTN3
PA5.GPIO_Mode=GPIO_MODE_OUTPUT_PP PA4.Locked=true
PA5.GPIO_PuPd=GPIO_NOPULL PA4.Signal=GPIO_Input
PA5.GPIO_Speed=GPIO_SPEED_FREQ_LOW PA5.GPIOParameters=GPIO_Label
PA5.GPIO_Label=BTN4
PA5.Locked=true PA5.Locked=true
PA5.Signal=GPIO_Output PA5.Signal=GPIO_Input
PA6.Signal=S_TIM3_CH1 PA6.Signal=S_TIM3_CH1
PA7.Locked=true PA7.Locked=true
PA7.Signal=S_TIM3_CH2 PA7.Signal=S_TIM3_CH2
PB1.GPIOParameters=GPIO_Label PA8.GPIOParameters=GPIO_Label
PB1.GPIO_Label=BTN1 PA8.GPIO_Label=BTN5
PB1.Locked=true PA8.Locked=true
PB1.Signal=GPIO_Input PA8.Signal=GPIO_Input
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.GPIOParameters=GPIO_Label
PB11.GPIO_Label=BTN3 PB11.GPIO_Label=AMP1_CS
PB11.Locked=true PB11.Locked=true
PB11.Signal=GPIO_Input PB11.Signal=GPIO_Output
PB12.GPIOParameters=GPIO_Label PB12.GPIOParameters=GPIO_Label
PB12.GPIO_Label=BTN4 PB12.GPIO_Label=DDS1_CS
PB12.Locked=true PB12.Locked=true
PB12.Signal=GPIO_Input PB12.Signal=GPIO_Output
PB13.Mode=Full_Duplex_Master PB13.Mode=Full_Duplex_Master
PB13.Signal=SPI2_SCK PB13.Signal=SPI2_SCK
PB14.Mode=Full_Duplex_Master PB14.Mode=Full_Duplex_Master
PB14.Signal=SPI2_MISO PB14.Signal=SPI2_MISO
PB15.Mode=Full_Duplex_Master PB15.Mode=Full_Duplex_Master
PB15.Signal=SPI2_MOSI PB15.Signal=SPI2_MOSI
PB2.GPIOParameters=GPIO_Label
PB2.GPIO_Label=BTN2
PB2.Locked=true
PB2.Signal=GPIO_Input
PB3.GPIOParameters=GPIO_Label PB3.GPIOParameters=GPIO_Label
PB3.GPIO_Label=SWO PB3.GPIO_Label=SWO
PB3.Locked=true PB3.Locked=true
PB3.Signal=SYS_JTDO-TRACESWO PB3.Signal=SYS_JTDO-TRACESWO
PB5.Signal=S_TIM17_CH1
PB6.Locked=true PB6.Locked=true
PB6.Mode=I2C 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
PC10.Mode=Simplex_Bidirectional_Master PC10.Mode=Simplex_Bidirectional_Master
PC10.Signal=SPI3_SCK PC10.Signal=SPI3_SCK
PC11.GPIOParameters=GPIO_Label PC11.GPIOParameters=GPIO_Label
PC11.GPIO_Label=ST7565_RST PC11.GPIO_Label=ST7565_CS
PC11.Locked=true PC11.Locked=true
PC11.Signal=GPIO_Output PC11.Signal=GPIO_Output
PC12.GPIOParameters=GPIO_Label PC12.GPIOParameters=GPIO_Label
@@ -165,10 +197,14 @@ PC14-OSC32_IN.Signal=RCC_OSC32_IN
PC15-OSC32_OUT.Locked=true PC15-OSC32_OUT.Locked=true
PC15-OSC32_OUT.Mode=LSE-External-Oscillator PC15-OSC32_OUT.Mode=LSE-External-Oscillator
PC15-OSC32_OUT.Signal=RCC_OSC32_OUT PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
PD2.GPIOParameters=GPIO_Label PC8.GPIOParameters=GPIO_Label
PD2.GPIO_Label=ST7565_A0 PC8.GPIO_Label=ST7565_RST
PD2.Locked=true PC8.Locked=true
PD2.Signal=GPIO_Output PC8.Signal=GPIO_Output
PC9.GPIOParameters=GPIO_Label
PC9.GPIO_Label=ST7565_A0
PC9.Locked=true
PC9.Signal=GPIO_Output
PF0-OSC_IN.Locked=true PF0-OSC_IN.Locked=true
PF0-OSC_IN.Mode=HSE-External-Clock-Source PF0-OSC_IN.Mode=HSE-External-Clock-Source
PF0-OSC_IN.Signal=RCC_OSC_IN PF0-OSC_IN.Signal=RCC_OSC_IN
@@ -202,7 +238,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 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
@@ -221,9 +257,9 @@ RCC.I2C1Freq_Value=8000000
RCC.I2C2Freq_Value=8000000 RCC.I2C2Freq_Value=8000000
RCC.I2C3Freq_Value=8000000 RCC.I2C3Freq_Value=8000000
RCC.I2SClocksFreq_Value=72000000 RCC.I2SClocksFreq_Value=72000000
RCC.IPParameters=ADC12outputFreq_Value,ADC34outputFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SClocksFreq_Value,LSI_VALUE,MCOFreq_Value,PLLCLKFreq_Value,PLLM,PLLMCOFreq_Value,PLLMUL,PLLN,PLLP,PLLQ,RCC_PLLsource_Clock_Source_FROM_HSE,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSourceVirtual,TIM15Freq_Value,TIM16Freq_Value,TIM17Freq_Value,TIM1Freq_Value,TIM20Freq_Value,TIM2Freq_Value,TIM3Freq_Value,TIM8Freq_Value,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOOutput2Freq_Value RCC.IPParameters=ADC12outputFreq_Value,ADC34outputFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SClocksFreq_Value,LSI_VALUE,MCOFreq_Value,PLLCLKFreq_Value,PLLM,PLLMCOFreq_Value,PLLMUL,PLLN,PLLP,PLLQ,RCC_MCODiv,RCC_MCOSource,RCC_PLLsource_Clock_Source_FROM_HSE,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSourceVirtual,TIM15Freq_Value,TIM16Freq_Value,TIM17Freq_Value,TIM1Freq_Value,TIM20Freq_Value,TIM2Freq_Value,TIM3Freq_Value,TIM8Freq_Value,UART4Freq_Value,UART5Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOOutput2Freq_Value
RCC.LSI_VALUE=40000 RCC.LSI_VALUE=40000
RCC.MCOFreq_Value=72000000 RCC.MCOFreq_Value=9000000
RCC.PLLCLKFreq_Value=72000000 RCC.PLLCLKFreq_Value=72000000
RCC.PLLM=8 RCC.PLLM=8
RCC.PLLMCOFreq_Value=72000000 RCC.PLLMCOFreq_Value=72000000
@@ -231,6 +267,8 @@ RCC.PLLMUL=RCC_PLL_MUL9
RCC.PLLN=336 RCC.PLLN=336
RCC.PLLP=RCC_PLLP_DIV4 RCC.PLLP=RCC_PLLP_DIV4
RCC.PLLQ=7 RCC.PLLQ=7
RCC.RCC_MCODiv=RCC_MCODIV_8
RCC.RCC_MCOSource=RCC_MCO1SOURCE_PLLCLK
RCC.RCC_PLLsource_Clock_Source_FROM_HSE=RCC_HSE_PREDIV_DIV2 RCC.RCC_PLLsource_Clock_Source_FROM_HSE=RCC_HSE_PREDIV_DIV2
RCC.RTCFreq_Value=40000 RCC.RTCFreq_Value=40000
RCC.RTCHSEDivFreq_Value=250000 RCC.RTCHSEDivFreq_Value=250000
@@ -253,15 +291,18 @@ RCC.USBFreq_Value=72000000
RCC.VCOOutput2Freq_Value=8000000 RCC.VCOOutput2Freq_Value=8000000
SH.GPXTI13.0=GPIO_EXTI13 SH.GPXTI13.0=GPIO_EXTI13
SH.GPXTI13.ConfNb=1 SH.GPXTI13.ConfNb=1
SH.S_TIM17_CH1.0=TIM17_CH1,PWM Generation1 CH1
SH.S_TIM17_CH1.ConfNb=1
SH.S_TIM3_CH1.0=TIM3_CH1,Encoder_Interface SH.S_TIM3_CH1.0=TIM3_CH1,Encoder_Interface
SH.S_TIM3_CH1.ConfNb=1 SH.S_TIM3_CH1.ConfNb=1
SH.S_TIM3_CH2.0=TIM3_CH2,Encoder_Interface SH.S_TIM3_CH2.0=TIM3_CH2,Encoder_Interface
SH.S_TIM3_CH2.ConfNb=1 SH.S_TIM3_CH2.ConfNb=1
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32 SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32
SPI2.CLKPolarity=SPI_POLARITY_HIGH
SPI2.CalculateBaudRate=1.125 MBits/s SPI2.CalculateBaudRate=1.125 MBits/s
SPI2.DataSize=SPI_DATASIZE_8BIT SPI2.DataSize=SPI_DATASIZE_8BIT
SPI2.Direction=SPI_DIRECTION_2LINES SPI2.Direction=SPI_DIRECTION_2LINES
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,NSSPMode,BaudRatePrescaler SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,NSSPMode,BaudRatePrescaler,CLKPolarity
SPI2.Mode=SPI_MODE_MASTER SPI2.Mode=SPI_MODE_MASTER
SPI2.NSSPMode=SPI_NSS_PULSE_ENABLE SPI2.NSSPMode=SPI_NSS_PULSE_ENABLE
SPI2.VirtualType=VM_MASTER SPI2.VirtualType=VM_MASTER
@@ -272,6 +313,12 @@ SPI3.Direction=SPI_DIRECTION_1LINE
SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,DataSize SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,DataSize
SPI3.Mode=SPI_MODE_MASTER SPI3.Mode=SPI_MODE_MASTER
SPI3.VirtualType=VM_MASTER SPI3.VirtualType=VM_MASTER
TIM17.Channel=TIM_CHANNEL_1
TIM17.IPParameters=Channel,Period,OCFastMode_PWM,OCIdleState_1,Pulse
TIM17.OCFastMode_PWM=TIM_OCFAST_ENABLE
TIM17.OCIdleState_1=TIM_OCIDLESTATE_RESET
TIM17.Period=2
TIM17.Pulse=1
TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE
TIM2.IPParameters=AutoReloadPreload TIM2.IPParameters=AutoReloadPreload
TIM3.IC1Filter=15 TIM3.IC1Filter=15
@@ -282,6 +329,8 @@ USART2.IPParameters=VirtualMode-Asynchronous
USART2.VirtualMode-Asynchronous=VM_ASYNC USART2.VirtualMode-Asynchronous=VM_ASYNC
VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT
VP_TIM2_VS_ClockSourceINT.Mode=Internal VP_TIM2_VS_ClockSourceINT.Mode=Internal
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
board=NUCLEO-F303RE board=NUCLEO-F303RE

View File

@@ -1,8 +1,10 @@
#include "main.h" #include "main.h"
#include "tim.h"
#include "hw_button.h" #include "hw_button.h"
#include "ctrl_bottom_button.h" #include "ctrl_bottom_button.h"
#include "ctrl_channel_button.h" #include "ctrl_channel_button.h"
#include "ctrl_encoder.h" #include "ctrl_encoder.h"
#include "ctrl_generator.h"
#include "ctrl_app.h" #include "ctrl_app.h"
@@ -19,20 +21,66 @@ 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 const 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 _signalGenDefaultValues(void)
{
for (GEN_channel_t channel = 0; channel < CHANNEL_MAX; channel++)
{
switch (signal_gen[channel].type)
{
case GEN_FG_TYPE:
{
GEN_fg_t *gen = signal_gen[channel].gen;
gen->frequency = 1000;
gen->amplitude = 100;
gen->offset = 165;
gen->phase = 0;
gen->wave = GEN_SIN;
gen->enabled = FALSE;
gen->link = 0;
break;
}
case GEN_PWM_TYPE:
{
GEN_pwm_t *gen = signal_gen[channel].gen;
gen->frequency = 1000;
gen->amplitude = 0;
gen->offset = 0;
gen->phase = 0;
gen->duty = 50;
gen->enabled = FALSE;
break;
}
default:
break;
}
}
}
void _setGenInitailState(GEN_channel_t channel)
{
setFreq(&signal_gen[channel], channel);
setWave(&signal_gen[channel], channel);
setPhase(&signal_gen[channel], channel);
setAmplitude(&signal_gen[channel], channel);
setEnabled(&signal_gen[channel], channel);
// setOfsset(&signal_gen[channel], channel);
}
void APP_init(APP_data_t *app_data) void APP_init(APP_data_t *app_data)
{ {
_app_data = app_data; _app_data = app_data;
@@ -42,11 +90,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;
@@ -54,14 +103,18 @@ void APP_init(APP_data_t *app_data)
_app_data->isButtonChange = 1; _app_data->isButtonChange = 1;
_app_data->isButtonBlink = 1; _app_data->isButtonBlink = 1;
_signalGenDefaultValues();
CTRL_buttonsInit(); CTRL_buttonsInit();
gen_init();
_setGenInitailState(CHANNEL1);
_setGenInitailState(CHANNEL2);
} }
void CTRL_buttonsInit(void) void CTRL_buttonsInit(void)
{ {
CTRL_bottomButtonInit(); CTRL_bottomButtonInit();
// CTRL_channelButtonInit(); CTRL_channelButtonInit();
} }
void CTRL_buttonsHandler(void) void CTRL_buttonsHandler(void)
@@ -81,12 +134,59 @@ 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)
{
ULOG_TRACE("Chan btn(long): %d", key->instance);
GEN_channel_t channel = btn_ch_to_chan[key->instance];
if (channel == CHANNEL2)
{
if (HAL_TIM_Base_Start(&htim17) == HAL_ERROR)
{
HAL_TIM_Base_Stop(&htim17);
}
}
switch (signal_gen[channel].type)
{
case GEN_FG_TYPE:
{
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;
}
} }
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)
{ {
@@ -99,6 +199,7 @@ static void _changeValueFunGen(int8_t dir)
return; return;
} }
gen->frequency = new_freq; gen->frequency = new_freq;
setFreq(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
break; break;
} }
case LAY_AMPL: case LAY_AMPL:
@@ -110,6 +211,7 @@ static void _changeValueFunGen(int8_t dir)
return; return;
} }
gen->amplitude = new_ampl; gen->amplitude = new_ampl;
setAmplitude(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
break; break;
} }
case LAY_OFFS: case LAY_OFFS:
@@ -121,6 +223,7 @@ static void _changeValueFunGen(int8_t dir)
return; return;
} }
gen->offset = new_offs; gen->offset = new_offs;
setOfsset(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
break; break;
} }
case LAY_PHAS: case LAY_PHAS:
@@ -132,6 +235,7 @@ static void _changeValueFunGen(int8_t dir)
return; return;
} }
gen->phase = new_phas; gen->phase = new_phas;
setPhase(&signal_gen[_app_data->curr_channel], _app_data->curr_channel);
break; break;
} }
default: default:
@@ -145,7 +249,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)
{ {
@@ -158,6 +262,7 @@ static void _changeValuePwmGen(int8_t dir)
return; return;
} }
gen->frequency = new_freq; gen->frequency = new_freq;
break; break;
} }
case LAY_AMPL: case LAY_AMPL:
@@ -169,6 +274,7 @@ static void _changeValuePwmGen(int8_t dir)
return; return;
} }
gen->amplitude = new_ampl; gen->amplitude = new_ampl;
break; break;
} }
case LAY_OFFS: case LAY_OFFS:
@@ -180,6 +286,7 @@ static void _changeValuePwmGen(int8_t dir)
return; return;
} }
gen->offset = new_offs; gen->offset = new_offs;
break; break;
} }
case LAY_PHAS: case LAY_PHAS:

View File

@@ -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;

View File

@@ -3,8 +3,8 @@
#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 500 #define MAX_VOLT_POS 360
#define MAX_VOLT_NEG -500 #define MAX_VOLT_NEG 0
#define MAX_PHAS 360 #define MAX_PHAS 360
#define MAX_DUTY 100 #define MAX_DUTY 100

View File

@@ -11,31 +11,31 @@ void CTRL_bottomButtonInit(void)
bottom_buttons[BTN_BOT_1].buttonPressed = CTRL_pushedDispBtnEvent; bottom_buttons[BTN_BOT_1].buttonPressed = CTRL_pushedDispBtnEvent;
bottom_buttons[BTN_BOT_1].gpio_port = BTN1_GPIO_Port; bottom_buttons[BTN_BOT_1].gpio_port = BTN1_GPIO_Port;
bottom_buttons[BTN_BOT_1].gpio_pin = BTN1_Pin; bottom_buttons[BTN_BOT_1].gpio_pin = BTN1_Pin;
bottom_buttons[BTN_BOT_1].pushed_state = GPIO_PIN_SET; bottom_buttons[BTN_BOT_1].pushed_state = GPIO_PIN_RESET;
bottom_buttons[BTN_BOT_2].instance = BTN_BOT_2; bottom_buttons[BTN_BOT_2].instance = BTN_BOT_2;
bottom_buttons[BTN_BOT_2].buttonPressed = CTRL_pushedDispBtnEvent; bottom_buttons[BTN_BOT_2].buttonPressed = CTRL_pushedDispBtnEvent;
bottom_buttons[BTN_BOT_2].gpio_port = BTN2_GPIO_Port; bottom_buttons[BTN_BOT_2].gpio_port = BTN2_GPIO_Port;
bottom_buttons[BTN_BOT_2].gpio_pin = BTN2_Pin; bottom_buttons[BTN_BOT_2].gpio_pin = BTN2_Pin;
bottom_buttons[BTN_BOT_2].pushed_state = GPIO_PIN_SET; bottom_buttons[BTN_BOT_2].pushed_state = GPIO_PIN_RESET;
bottom_buttons[BTN_BOT_3].instance = BTN_BOT_3; bottom_buttons[BTN_BOT_3].instance = BTN_BOT_3;
bottom_buttons[BTN_BOT_3].buttonPressed = CTRL_pushedDispBtnEvent; bottom_buttons[BTN_BOT_3].buttonPressed = CTRL_pushedDispBtnEvent;
bottom_buttons[BTN_BOT_3].gpio_port = BTN3_GPIO_Port; bottom_buttons[BTN_BOT_3].gpio_port = BTN3_GPIO_Port;
bottom_buttons[BTN_BOT_3].gpio_pin = BTN3_Pin; bottom_buttons[BTN_BOT_3].gpio_pin = BTN3_Pin;
bottom_buttons[BTN_BOT_3].pushed_state = GPIO_PIN_SET; bottom_buttons[BTN_BOT_3].pushed_state = GPIO_PIN_RESET;
bottom_buttons[BTN_BOT_4].instance = BTN_BOT_4; bottom_buttons[BTN_BOT_4].instance = BTN_BOT_4;
bottom_buttons[BTN_BOT_4].buttonPressed = CTRL_pushedDispBtnEvent; bottom_buttons[BTN_BOT_4].buttonPressed = CTRL_pushedDispBtnEvent;
bottom_buttons[BTN_BOT_4].gpio_port = BTN4_GPIO_Port; bottom_buttons[BTN_BOT_4].gpio_port = BTN4_GPIO_Port;
bottom_buttons[BTN_BOT_4].gpio_pin = BTN4_Pin; bottom_buttons[BTN_BOT_4].gpio_pin = BTN4_Pin;
bottom_buttons[BTN_BOT_4].pushed_state = GPIO_PIN_SET; bottom_buttons[BTN_BOT_4].pushed_state = GPIO_PIN_RESET;
bottom_buttons[BTN_BOT_5].instance = BTN_BOT_5; bottom_buttons[BTN_BOT_5].instance = BTN_BOT_5;
bottom_buttons[BTN_BOT_5].buttonPressed = CTRL_pushedDispBtnEvent; bottom_buttons[BTN_BOT_5].buttonPressed = CTRL_pushedDispBtnEvent;
bottom_buttons[BTN_BOT_5].gpio_port = BTN5_GPIO_Port; bottom_buttons[BTN_BOT_5].gpio_port = BTN5_GPIO_Port;
bottom_buttons[BTN_BOT_5].gpio_pin = BTN5_Pin; bottom_buttons[BTN_BOT_5].gpio_pin = BTN5_Pin;
bottom_buttons[BTN_BOT_5].pushed_state = GPIO_PIN_SET; bottom_buttons[BTN_BOT_5].pushed_state = GPIO_PIN_RESET;
for (HW_BotBtnName_t btn_key = BTN_BOT_1; btn_key < BTN_BOT_MAX; btn_key++) for (HW_BotBtnName_t btn_key = BTN_BOT_1; btn_key < BTN_BOT_MAX; btn_key++)
{ {

View File

@@ -2,8 +2,8 @@
#include "hw_button.h" #include "hw_button.h"
#include "ctrl_channel_button.h" #include "ctrl_channel_button.h"
#define DUMMY_GPIO_Port GPIOA #define DUMMY_GPIO_Port B1_GPIO_Port
#define DUMMY_GPIO_Pin GPIO_PIN_0 #define DUMMY_GPIO_Pin B1_Pin
static ButtonKey_t channel_buttons[BTN_CH_MAX]; static ButtonKey_t channel_buttons[BTN_CH_MAX];
@@ -11,39 +11,41 @@ void CTRL_channelButtonInit(void)
{ {
channel_buttons[BTN_CH_1].instance = BTN_CH_1; channel_buttons[BTN_CH_1].instance = BTN_CH_1;
channel_buttons[BTN_CH_1].buttonPressed = CTRL_pushedChanBtnEvent; channel_buttons[BTN_CH_1].buttonPressed = CTRL_pushedChanBtnEvent;
channel_buttons[BTN_CH_1].gpio_port = DUMMY_GPIO_Port; channel_buttons[BTN_CH_1].buttonLongPressed = CTRL_longPushedChanBtnEvent;
channel_buttons[BTN_CH_1].gpio_pin = DUMMY_GPIO_Pin; channel_buttons[BTN_CH_1].gpio_port = BTN_CH1_GPIO_Port;
channel_buttons[BTN_CH_1].pushed_state = GPIO_PIN_SET; channel_buttons[BTN_CH_1].gpio_pin = BTN_CH1_Pin;
channel_buttons[BTN_CH_1].pushed_state = GPIO_PIN_RESET;
channel_buttons[BTN_CH_2].instance = BTN_CH_2; channel_buttons[BTN_CH_2].instance = BTN_CH_2;
channel_buttons[BTN_CH_2].buttonPressed = CTRL_pushedChanBtnEvent; channel_buttons[BTN_CH_2].buttonPressed = CTRL_pushedChanBtnEvent;
channel_buttons[BTN_CH_2].gpio_port = DUMMY_GPIO_Port; channel_buttons[BTN_CH_2].buttonLongPressed = CTRL_longPushedChanBtnEvent;
channel_buttons[BTN_CH_2].gpio_pin = DUMMY_GPIO_Pin; channel_buttons[BTN_CH_2].gpio_port = BTN_CH2_GPIO_Port;
channel_buttons[BTN_CH_2].pushed_state = GPIO_PIN_SET; channel_buttons[BTN_CH_2].gpio_pin = BTN_CH2_Pin;
channel_buttons[BTN_CH_2].pushed_state = GPIO_PIN_RESET;
channel_buttons[BTN_CH_3].instance = BTN_CH_3; channel_buttons[BTN_CH_3].instance = BTN_CH_3;
channel_buttons[BTN_CH_3].buttonPressed = CTRL_pushedChanBtnEvent; channel_buttons[BTN_CH_3].buttonPressed = CTRL_pushedChanBtnEvent;
channel_buttons[BTN_CH_3].gpio_port = DUMMY_GPIO_Port; channel_buttons[BTN_CH_3].gpio_port = DUMMY_GPIO_Port;
channel_buttons[BTN_CH_3].gpio_pin = DUMMY_GPIO_Pin; channel_buttons[BTN_CH_3].gpio_pin = DUMMY_GPIO_Pin;
channel_buttons[BTN_CH_3].pushed_state = GPIO_PIN_SET; channel_buttons[BTN_CH_3].pushed_state = GPIO_PIN_RESET;
channel_buttons[BTN_CH_4].instance = BTN_CH_4; channel_buttons[BTN_CH_4].instance = BTN_CH_4;
channel_buttons[BTN_CH_4].buttonPressed = CTRL_pushedChanBtnEvent; channel_buttons[BTN_CH_4].buttonPressed = CTRL_pushedChanBtnEvent;
channel_buttons[BTN_CH_4].gpio_port = DUMMY_GPIO_Port; channel_buttons[BTN_CH_4].gpio_port = DUMMY_GPIO_Port;
channel_buttons[BTN_CH_4].gpio_pin = DUMMY_GPIO_Pin; channel_buttons[BTN_CH_4].gpio_pin = DUMMY_GPIO_Pin;
channel_buttons[BTN_CH_4].pushed_state = GPIO_PIN_SET; channel_buttons[BTN_CH_4].pushed_state = GPIO_PIN_RESET;
channel_buttons[BTN_CH_5].instance = BTN_CH_5; channel_buttons[BTN_CH_5].instance = BTN_CH_5;
channel_buttons[BTN_CH_5].buttonPressed = CTRL_pushedChanBtnEvent; channel_buttons[BTN_CH_5].buttonPressed = CTRL_pushedChanBtnEvent;
channel_buttons[BTN_CH_5].gpio_port = DUMMY_GPIO_Port; channel_buttons[BTN_CH_5].gpio_port = DUMMY_GPIO_Port;
channel_buttons[BTN_CH_5].gpio_pin = DUMMY_GPIO_Pin; channel_buttons[BTN_CH_5].gpio_pin = DUMMY_GPIO_Pin;
channel_buttons[BTN_CH_5].pushed_state = GPIO_PIN_SET; channel_buttons[BTN_CH_5].pushed_state = GPIO_PIN_RESET;
channel_buttons[BTN_CH_6].instance = BTN_CH_6; channel_buttons[BTN_CH_6].instance = BTN_CH_6;
channel_buttons[BTN_CH_6].buttonPressed = CTRL_pushedChanBtnEvent; channel_buttons[BTN_CH_6].buttonPressed = CTRL_pushedChanBtnEvent;
channel_buttons[BTN_CH_6].gpio_port = DUMMY_GPIO_Port; channel_buttons[BTN_CH_6].gpio_port = DUMMY_GPIO_Port;
channel_buttons[BTN_CH_6].gpio_pin = DUMMY_GPIO_Pin; channel_buttons[BTN_CH_6].gpio_pin = DUMMY_GPIO_Pin;
channel_buttons[BTN_CH_6].pushed_state = GPIO_PIN_SET; channel_buttons[BTN_CH_6].pushed_state = GPIO_PIN_RESET;
for (HW_chanBtnName_t btn_key = BTN_CH_1; btn_key < BTN_CH_MAX; btn_key++) for (HW_chanBtnName_t btn_key = BTN_CH_1; btn_key < BTN_CH_MAX; btn_key++)
{ {
@@ -66,3 +68,8 @@ __weak void CTRL_pushedChanBtnEvent(ButtonKey_t *key)
{ {
UNUSED(key); UNUSED(key);
} }
__weak void CTRL_longPushedChanBtnEvent(ButtonKey_t *key)
{
UNUSED(key);
}

View File

@@ -14,3 +14,4 @@ typedef enum
void CTRL_channelButtonInit(void); void CTRL_channelButtonInit(void);
void CTRL_channelButtonsHandler(void); void CTRL_channelButtonsHandler(void);
void CTRL_pushedChanBtnEvent(ButtonKey_t *key); void CTRL_pushedChanBtnEvent(ButtonKey_t *key);
void CTRL_longPushedChanBtnEvent(ButtonKey_t *key);

View File

@@ -2,7 +2,6 @@
#include "spi.h" #include "spi.h"
#include "i2c.h" #include "i2c.h"
#include "ctrl_app_types.h" #include "ctrl_app_types.h"
#include "ctrl_app.h"
#include "ad9833.h" #include "ad9833.h"
#include "ltc2631.h" #include "ltc2631.h"
#include "mcp41x.h" #include "mcp41x.h"
@@ -10,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;
@@ -24,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
@@ -47,35 +54,55 @@ PWM_handle_t pwm_gen[PWM_CHAN_MAX];
uint8_t ch_to_gen_ch[CHANNEL_MAX] = {FG_CHAN1, FG_CHAN2, FG_CHAN3, PWM_CHAN1, PWM_CHAN2, PWM_CHAN3}; uint8_t ch_to_gen_ch[CHANNEL_MAX] = {FG_CHAN1, FG_CHAN2, FG_CHAN3, PWM_CHAN1, PWM_CHAN2, PWM_CHAN3};
#define DDS1_CS_PORT GPIOC // #define DDS1_CS_PORT GPIOC
#define DDS2_CS_PORT GPIOC // #define DDS2_CS_PORT GPIOC
#define DDS3_CS_PORT GPIOC // #define DDS3_CS_PORT GPIOC
#define DDS1_CS_PIN GPIO_PIN_0 // #define DDS1_CS_PIN GPIO_PIN_0
#define DDS2_CS_PIN GPIO_PIN_0 // #define DDS2_CS_PIN GPIO_PIN_0
#define DDS3_CS_PIN GPIO_PIN_0 // #define DDS3_CS_PIN GPIO_PIN_0
#define AMP1_CS_PORT GPIOC // #define AMP1_CS_PORT GPIOC
#define AMP2_CS_PORT GPIOC // #define AMP2_CS_PORT GPIOC
#define AMP3_CS_PORT GPIOC // #define AMP3_CS_PORT GPIOC
#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_PORT, DDS1_CS_PIN); ad9833_init(&dds_gen[FG_CHAN1].hdds, &hspi2, DDS1_CS_GPIO_Port, DDS1_CS_Pin);
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);
ltc2631_init(&dds_gen[FG_CHAN2].hoffs, &hi2c1, 0x01, LTC2631_8BIT, LTC_REF_2V5); // ltc2631_init(&dds_gen[FG_CHAN2].hoffs, &hi2c1, 0x01, LTC2631_8BIT, LTC_REF_2V5);
ltc2631_init(&dds_gen[FG_CHAN3].hoffs, &hi2c1, 0x02, LTC2631_8BIT, LTC_REF_2V5); // ltc2631_init(&dds_gen[FG_CHAN3].hoffs, &hi2c1, 0x02, LTC2631_8BIT, LTC_REF_2V5);
mcp41x_init(&dds_gen[FG_CHAN1].hampl, &hspi2, AMP1_CS_PORT, AMP1_CS_PIN, MCP41X_10K); 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, AMP2_CS_PORT, AMP2_CS_PIN, MCP41X_10K); mcp41x_init(&dds_gen[FG_CHAN2].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_CHAN3].hampl, &hspi2, AMP3_CS_PORT, AMP3_CS_PIN, MCP41X_10K);
led_init(&dds_gen[FG_CHAN1].hled, LED_CH1_GPIO_Port, LED_CH1_Pin);
led_init(&dds_gen[FG_CHAN2].hled, LED_CH2_GPIO_Port, LED_CH2_Pin);
} }
static void _setAmpliude(mcp41x_handle_t *hampl, uint16_t ampl_x100) static void _setAmpliude(mcp41x_handle_t *hampl, uint16_t ampl_x100)
@@ -88,25 +115,25 @@ static void _setAmpliude(mcp41x_handle_t *hampl, uint16_t ampl_x100)
static void _setOffset(ltc2631_handle_t *hoffs, int16_t offs_x100) static void _setOffset(ltc2631_handle_t *hoffs, int16_t offs_x100)
{ {
uint32_t value = (offs_x100 + MAX_VOLT_POS) * LTC_REF_2V5; uint32_t value = (offs_x100 + MAX_VOLT_POS) * LTC_REF_2V5;
ULOG_DEBUG("(%d:_setAmplitude) offs_x100: %d, value: %d", __LINE__, offs_x100, value); ULOG_DEBUG("(%d:_setOffset) offs_x100: %d, value: %d", __LINE__, offs_x100, value);
ltc2631_setOutputVoltage_u(hoffs, value); ltc2631_setOutputVoltage_u(hoffs, value);
} }
static void _setFreqDdsGen(ad9833_handle_t *hdds, uint32_t freq) static void _setFreqDdsGen(ad9833_handle_t *hdds, uint32_t freq)
{ {
ULOG_DEBUG("(%d:_setAmplitude) freq: %d", __LINE__, freq); ULOG_DEBUG("(%d:_setFreqDdsGen) freq: %d", __LINE__, freq);
ad9833_setFrequency(hdds, CHAN_0, freq); ad9833_setFrequency(hdds, CHAN_0, freq);
} }
static void _setPhaseDdsGen(ad9833_handle_t *hdds, uint32_t phas) static void _setPhaseDdsGen(ad9833_handle_t *hdds, uint32_t phas)
{ {
ULOG_DEBUG("(%d:_setAmplitude) phase: %d", __LINE__, phas); ULOG_DEBUG("(%d:_setPhaseDdsGen) phase: %d", __LINE__, phas);
ad9833_setPhase(hdds, CHAN_0, phas); ad9833_setPhase(hdds, CHAN_0, phas);
} }
static void _setWaveDdsGen(ad9833_handle_t *hdds, GEN_wave_t wave) static void _setWaveDdsGen(ad9833_handle_t *hdds, GEN_wave_t wave)
{ {
ULOG_DEBUG("(%d:_setAmplitude) wave: %d", __LINE__, wave); ULOG_DEBUG("(%d:_setWaveDdsGen) wave: %d", __LINE__, wave);
switch (wave) switch (wave)
{ {
case GEN_SIN: case GEN_SIN:
@@ -125,16 +152,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:_setEnabledDdsGen) enabled: %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:
@@ -155,13 +184,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);
@@ -171,14 +200,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);
@@ -188,14 +217,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);
@@ -205,14 +234,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);
@@ -222,56 +251,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)
{ {
} }

View File

@@ -1 +1,12 @@
#pragma once #pragma once
#include "ctrl_app.h"
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();

View File

@@ -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)
@@ -249,7 +249,7 @@ static void _drawOffsetLine(GFX_display_t *disp, int16_t offs, uint32_t ampl)
vert_shift = MIN(vert_shift, 20); vert_shift = MIN(vert_shift, 20);
vert_shift = MAX(vert_shift, -19); vert_shift = MAX(vert_shift, -19);
ULOG_TRACE("<OFFSLINE> shift: %i", vert_shift); // ULOG_DEBUG("<OFFSLINE> shift: %i", vert_shift);
DISP_drawHorizontalLine(disp, 2, 31 + vert_shift, 57, GFX_WHITE); DISP_drawHorizontalLine(disp, 2, 31 + vert_shift, 57, GFX_WHITE);
} }
@@ -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)

View File

@@ -4,8 +4,8 @@
#include "ad9833.h" #include "ad9833.h"
// Convenience calculations // Convenience calculations
static uint32_t ad9833_calcFreq(float f); // Calculate AD9833 frequency register from a frequency // static uint32_t ad9833_calcFreq(float f); // Calculate AD9833 frequency register from a frequency
static uint16_t ad9833_calcPhase(float a); // Calculate AD9833 phase register from phase // static uint16_t ad9833_calcPhase(float a); // Calculate AD9833 phase register from phase
static void ad9833_transmit16(ad9833_handle_t *hfg, uint16_t data) static void ad9833_transmit16(ad9833_handle_t *hfg, uint16_t data)
{ {
@@ -51,11 +51,10 @@ void ad9833_init(ad9833_handle_t *hfg, SPI_HandleTypeDef *hspi, GPIO_TypeDef *cs
ad9833_setFrequency(hfg, CHAN_1, AD_DEFAULT_FREQ); ad9833_setFrequency(hfg, CHAN_1, AD_DEFAULT_FREQ);
ad9833_setPhase(hfg, CHAN_0, AD_DEFAULT_PHASE); ad9833_setPhase(hfg, CHAN_0, AD_DEFAULT_PHASE);
ad9833_setPhase(hfg, CHAN_1, AD_DEFAULT_PHASE); ad9833_setPhase(hfg, CHAN_1, AD_DEFAULT_PHASE);
ad9833_reset(hfg, 0); // full transition
ad9833_setMode(hfg, MODE_OFF);
ad9833_setActiveChannelFreq(hfg, CHAN_0);
ad9833_setActiveChannelPhase(hfg, CHAN_0); ad9833_setActiveChannelPhase(hfg, CHAN_0);
ad9833_setActiveChannelFreq(hfg, CHAN_0);
ad9833_setMode(hfg, MODE_OFF);
ad9833_reset(hfg, 0); // full transition
} }
void ad9833_setActiveChannelFreq(ad9833_handle_t *hfg, AD_channel_t chan) void ad9833_setActiveChannelFreq(ad9833_handle_t *hfg, AD_channel_t chan)
@@ -146,26 +145,35 @@ void ad9833_setMode(ad9833_handle_t *hfg, AD_mode_t mode)
ad9833_transmit16(hfg, hfg->_regCtl); ad9833_transmit16(hfg, hfg->_regCtl);
} }
static uint32_t ad9833_calcFreq(float f) // static uint32_t ad9833_calcFreq(float f)
// Calculate register value for AD9833 frequency register from a frequency // // Calculate register value for AD9833 frequency register from a frequency
// {
// return (uint32_t)((f * AD_2POW28 / AD_MCLK) + 0.5f);
// }
static uint32_t ad9833_calcFreq_uint(uint32_t f)
{ {
return (uint32_t)((f * AD_2POW28 / AD_MCLK) + 0.5f); return ((f * AD_2POW28 + AD_MCLK_DIV2) / AD_MCLK); // ((n + d/2)/d)
} }
static uint16_t ad9833_calcPhase(float a) // static uint16_t ad9833_calcPhase(float a)
// Calculate the value for AD9833 phase register from given phase in tenths of a degree // // Calculate the value for AD9833 phase register from given phase in tenths of a degree
{ // {
return (uint16_t)((512.0f * (a / 10) / 45) + 0.5f); // return (uint16_t)((512.0f * (a / 10) / 45) + 0.5f);
} // }
void ad9833_setFrequency(ad9833_handle_t *hfg, AD_channel_t chan, float freq) static uint16_t ad9833_calcPhase_uint(uint16_t p)
{
return ((p * 4096U + 180) / 360);
}
void ad9833_setFrequency(ad9833_handle_t *hfg, AD_channel_t chan, uint32_t freq)
{ {
// PRINT("\nsetFreq CHAN_", chan); // PRINT("\nsetFreq CHAN_", chan);
uint16_t freq_channel = 0; uint16_t freq_channel = 0;
hfg->_freq[chan] = freq; hfg->_freq[chan] = freq;
hfg->_regFreq[chan] = ad9833_calcFreq(freq); hfg->_regFreq[chan] = ad9833_calcFreq_uint(freq);
// select the address mask // select the address mask
@@ -198,7 +206,7 @@ void ad9833_setPhase(ad9833_handle_t *hfg, AD_channel_t chan, uint16_t phase)
uint16_t phase_channel = 0; uint16_t phase_channel = 0;
hfg->_phase[chan] = phase; hfg->_phase[chan] = phase;
hfg->_regPhase[chan] = ad9833_calcPhase(phase); hfg->_regPhase[chan] = ad9833_calcPhase_uint(phase);
// select the address mask // select the address mask
switch (chan) switch (chan)

View File

@@ -2,7 +2,8 @@
#define AD_DEFAULT_FREQ 1000U ///< Default initialisation frequency (Hz) #define AD_DEFAULT_FREQ 1000U ///< Default initialisation frequency (Hz)
#define AD_DEFAULT_PHASE 0 ///< Default initialisation phase angle (degrees) #define AD_DEFAULT_PHASE 0 ///< Default initialisation phase angle (degrees)
#define AD_MCLK 25000000UL ///< Clock speed of the AD9833 reference clock in Hz #define AD_MCLK 25000000U ///< Clock speed of the AD9833 reference clock in Hz
#define AD_MCLK_DIV2 12500000U ///< Clock speed of the AD9833 reference clock in Hz
/** /**
* Channel enumerated type. * Channel enumerated type.
* *
@@ -52,5 +53,5 @@ AD_channel_t ad9833_getActiveChannelFreq(ad9833_handle_t *hfg);
void ad9833_setActiveChannelPhase(ad9833_handle_t *hfg, AD_channel_t chan); void ad9833_setActiveChannelPhase(ad9833_handle_t *hfg, AD_channel_t chan);
AD_channel_t ad9833_getActiveChannelPhase(ad9833_handle_t *hfg); AD_channel_t ad9833_getActiveChannelPhase(ad9833_handle_t *hfg);
void ad9833_setMode(ad9833_handle_t *hfg, AD_mode_t mode); void ad9833_setMode(ad9833_handle_t *hfg, AD_mode_t mode);
void ad9833_setFrequency(ad9833_handle_t *hfg, AD_channel_t chan, float freq); void ad9833_setFrequency(ad9833_handle_t *hfg, AD_channel_t chan, uint32_t freq);
void ad9833_setPhase(ad9833_handle_t *hfg, AD_channel_t chan, uint16_t phase); void ad9833_setPhase(ad9833_handle_t *hfg, AD_channel_t chan, uint16_t phase);

View File

@@ -41,4 +41,4 @@
#define SEL_PHASE1 (1 << AD_FREQ0 | 1 << AD_FREQ1 | 1 << AD_PHASE) #define SEL_PHASE1 (1 << AD_FREQ0 | 1 << AD_FREQ1 | 1 << AD_PHASE)
// AD9833 frequency and phase calculation macros // AD9833 frequency and phase calculation macros
#define AD_2POW28 (1UL << 28) ///< Used when calculating output frequency #define AD_2POW28 (1ULL << 28) ///< Used when calculating output frequency