UI led
This commit is contained in:
@@ -50,6 +50,7 @@ I2C_HandleTypeDef hi2c1;
|
||||
|
||||
TIM_HandleTypeDef htim2;
|
||||
TIM_HandleTypeDef htim3;
|
||||
TIM_HandleTypeDef htim8;
|
||||
|
||||
UART_HandleTypeDef huart1;
|
||||
DMA_HandleTypeDef hdma_usart1_rx;
|
||||
@@ -69,6 +70,7 @@ static void MX_TIM3_Init(void);
|
||||
static void MX_ADC1_Init(void);
|
||||
static void MX_ADC2_Init(void);
|
||||
static void MX_USART1_UART_Init(void);
|
||||
static void MX_TIM8_Init(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
/* USER CODE END PFP */
|
||||
@@ -114,11 +116,13 @@ int main(void)
|
||||
MX_ADC1_Init();
|
||||
MX_ADC2_Init();
|
||||
MX_USART1_UART_Init();
|
||||
MX_TIM8_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
HAL_UARTEx_ReceiveToIdle_DMA(&huart1, (uint8_t *)&UART_RX_buf, UART_RX_BUF_SIZE);
|
||||
// HAL_Delay(50);
|
||||
// HAL_UARTEx_ReceiveToIdle_DMA(&huart1, (uint8_t *)&UART_RX_buf, UART_RX_BUF_SIZE);
|
||||
|
||||
// ADC1 audio
|
||||
// ADC1 audio
|
||||
HAL_ADC_Start_IT(&hadc1);
|
||||
|
||||
// timer audio e pwm
|
||||
@@ -132,16 +136,32 @@ int main(void)
|
||||
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
|
||||
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
|
||||
|
||||
// timer led
|
||||
HAL_TIM_Base_Start_IT(&htim8);
|
||||
HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_3);
|
||||
// serve, lo start nonfa partire i CHN
|
||||
TIM_CCxChannelCmd(htim8.Instance, TIM_CHANNEL_3, TIM_CCxN_ENABLE);
|
||||
|
||||
squeow_init();
|
||||
squeow_ui_init();
|
||||
// prima lettura
|
||||
|
||||
/*
|
||||
#ifdef SQUEOW_SYNTH
|
||||
squeow_synth_init();
|
||||
squeow_synth_set(DEFAULT_SYNTH_FREQUENCY);
|
||||
squeow_synth_on();
|
||||
#endif
|
||||
*/
|
||||
|
||||
#ifdef SQUEOW_UI_SERIOW
|
||||
seriow_stab_dump();
|
||||
#endif
|
||||
|
||||
// prima lettura
|
||||
HAL_ADC_Start_DMA(&hadc2, adc2_valori, 4);
|
||||
|
||||
squeow_synth_init();
|
||||
// HAL_Delay(50);
|
||||
squeow_synth_set(DEFAULT_SYNTH_FREQUENCY);
|
||||
squeow_synth_on();
|
||||
|
||||
if (UART_TX_buf_lenght)
|
||||
serial_write(UART_TX_buf, UART_TX_buf_lenght);
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
@@ -151,20 +171,42 @@ int main(void)
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
if (sys_tick) {
|
||||
|
||||
// 100hz
|
||||
if (adc2_done) {
|
||||
adc_rileva_soglie(adc2_valori);
|
||||
HAL_ADC_Start_DMA(&hadc2, adc2_valori, 4);
|
||||
adc2_done = 0;
|
||||
}
|
||||
|
||||
if ((sys_tick_prescale > SYS_TICK_PRESCALE_1HZ) && (uart_sent||1)) {
|
||||
seriow_var_dump();
|
||||
sys_tick_prescale = 0;
|
||||
squeow_synth_set(DEFAULT_SYNTH_FREQUENCY);
|
||||
squeow_synth_on();
|
||||
}
|
||||
#ifdef SQUEOW_UI_LED
|
||||
// visualizza LED volume con valore aggiornato da vu_meter
|
||||
led_pwm_duty(ui_volume >> 3);
|
||||
processa_blocco();
|
||||
|
||||
sys_tick_prescale++;
|
||||
if (codice_allarme)
|
||||
led_blocco(codice_allarme);
|
||||
#endif
|
||||
|
||||
// eventi lenti
|
||||
if (sys_tick_prescale > SYS_TICK_PRESCALE_10HZ) {
|
||||
sys_tick_prescale = 0;
|
||||
|
||||
#ifdef SQUEOW_UI_TOSTA
|
||||
tosta_var_bars();
|
||||
#endif
|
||||
#ifdef SQUEOW_UI_SERIOW
|
||||
seriow_var_dump();
|
||||
#endif
|
||||
|
||||
if (HAL_GPIO_ReadPin(G1_GPIO_Port, G1_Pin) == GPIO_PIN_RESET) {
|
||||
blocco = 0;
|
||||
}
|
||||
|
||||
if (UART_TX_buf_lenght)
|
||||
serial_write(UART_TX_buf, UART_TX_buf_lenght);
|
||||
} else {
|
||||
sys_tick_prescale++;
|
||||
}
|
||||
sys_tick = 0;
|
||||
}
|
||||
}
|
||||
@@ -192,7 +234,7 @@ void SystemClock_Config(void)
|
||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||
RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV2;
|
||||
RCC_OscInitStruct.PLL.PLLN = 54;
|
||||
RCC_OscInitStruct.PLL.PLLN = 28;
|
||||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||||
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV4;
|
||||
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
|
||||
@@ -214,7 +256,7 @@ void SystemClock_Config(void)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
HAL_RCC_MCOConfig(RCC_MCO_PG10, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);
|
||||
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -343,7 +385,7 @@ static void MX_ADC2_Init(void)
|
||||
|
||||
/** Configure Regular Channel
|
||||
*/
|
||||
sConfig.Channel = ADC_CHANNEL_3;
|
||||
sConfig.Channel = ADC_CHANNEL_4;
|
||||
sConfig.Rank = ADC_REGULAR_RANK_1;
|
||||
sConfig.SamplingTime = ADC_SAMPLETIME_247CYCLES_5;
|
||||
sConfig.SingleDiff = ADC_SINGLE_ENDED;
|
||||
@@ -356,7 +398,7 @@ static void MX_ADC2_Init(void)
|
||||
|
||||
/** Configure Regular Channel
|
||||
*/
|
||||
sConfig.Channel = ADC_CHANNEL_4;
|
||||
sConfig.Channel = ADC_CHANNEL_3;
|
||||
sConfig.Rank = ADC_REGULAR_RANK_2;
|
||||
if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
|
||||
{
|
||||
@@ -402,7 +444,7 @@ static void MX_I2C1_Init(void)
|
||||
|
||||
/* USER CODE END I2C1_Init 1 */
|
||||
hi2c1.Instance = I2C1;
|
||||
hi2c1.Init.Timing = 0x40B282BD;
|
||||
hi2c1.Init.Timing = 0x50916E9F;
|
||||
hi2c1.Init.OwnAddress1 = 0;
|
||||
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
||||
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
||||
@@ -527,9 +569,9 @@ static void MX_TIM3_Init(void)
|
||||
|
||||
/* USER CODE END TIM3_Init 1 */
|
||||
htim3.Instance = TIM3;
|
||||
htim3.Init.Prescaler = 41471;
|
||||
htim3.Init.Prescaler = 16799;
|
||||
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim3.Init.Period = 399;
|
||||
htim3.Init.Period = 99;
|
||||
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
|
||||
@@ -553,6 +595,88 @@ static void MX_TIM3_Init(void)
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM8 Initialization Function
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void MX_TIM8_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM8_Init 0 */
|
||||
|
||||
/* USER CODE END TIM8_Init 0 */
|
||||
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM8_Init 1 */
|
||||
|
||||
/* USER CODE END TIM8_Init 1 */
|
||||
htim8.Instance = TIM8;
|
||||
htim8.Init.Prescaler = 1679;
|
||||
htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim8.Init.Period = 255;
|
||||
htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim8.Init.RepetitionCounter = 0;
|
||||
htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_TIM_PWM_Init(&htim8) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 0;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
|
||||
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
||||
if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_3) != 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.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
|
||||
sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
|
||||
sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
|
||||
sBreakDeadTimeConfig.Break2Filter = 0;
|
||||
sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
|
||||
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
|
||||
if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, &sBreakDeadTimeConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM8_Init 2 */
|
||||
htim8.Instance->BDTR |= 0x8000;
|
||||
/* USER CODE END TIM8_Init 2 */
|
||||
HAL_TIM_MspPostInit(&htim8);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USART1 Initialization Function
|
||||
* @param None
|
||||
@@ -569,7 +693,7 @@ static void MX_USART1_UART_Init(void)
|
||||
|
||||
/* USER CODE END USART1_Init 1 */
|
||||
huart1.Instance = USART1;
|
||||
huart1.Init.BaudRate = 115200;
|
||||
huart1.Init.BaudRate = 38400;
|
||||
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
||||
huart1.Init.StopBits = UART_STOPBITS_1;
|
||||
huart1.Init.Parity = UART_PARITY_NONE;
|
||||
@@ -632,46 +756,48 @@ static void MX_DMA_Init(void)
|
||||
static void MX_GPIO_Init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||
/* USER CODE END MX_GPIO_Init_1 */
|
||||
/* USER CODE BEGIN MX_GPIO_Init_1 */
|
||||
/* USER CODE END MX_GPIO_Init_1 */
|
||||
|
||||
/* GPIO Ports Clock Enable */
|
||||
__HAL_RCC_GPIOF_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOG_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
|
||||
/*Configure GPIO pin Output Level */
|
||||
HAL_GPIO_WritePin(GPIOB, AUDIO_OL_Pin|RESET_BTN_Pin|TEMP_OL_Pin|REFL_OL_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GPIOB, G2_Pin|G4_Pin, GPIO_PIN_RESET);
|
||||
|
||||
/*Configure GPIO pin : PG10 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_10;
|
||||
/*Configure GPIO pin : PA8 */
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_8;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
|
||||
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : AUDIO_OL_Pin RESET_BTN_Pin TEMP_OL_Pin REFL_OL_Pin */
|
||||
GPIO_InitStruct.Pin = AUDIO_OL_Pin|RESET_BTN_Pin|TEMP_OL_Pin|REFL_OL_Pin;
|
||||
/*Configure GPIO pin : G1_Pin */
|
||||
GPIO_InitStruct.Pin = G1_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
HAL_GPIO_Init(G1_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : G2_Pin G4_Pin */
|
||||
GPIO_InitStruct.Pin = G2_Pin|G4_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);
|
||||
|
||||
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||
/* USER CODE END MX_GPIO_Init_2 */
|
||||
/* USER CODE BEGIN MX_GPIO_Init_2 */
|
||||
/* USER CODE END MX_GPIO_Init_2 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 4 */
|
||||
void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef *hadc) {
|
||||
// analog_wd_status = 3;
|
||||
// analog_wd_status = 3;
|
||||
}
|
||||
|
||||
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {
|
||||
adc2_done = 1;
|
||||
// TIM2->CCR1
|
||||
}
|
||||
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { adc2_done = 1; }
|
||||
|
||||
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t offset) {
|
||||
static uint16_t last_offset = 0;
|
||||
@@ -689,9 +815,11 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t offset) {
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){
|
||||
uart_sent = 1;
|
||||
}
|
||||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { uart_sent = 1; }
|
||||
|
||||
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart) { uart_sent = 1; }
|
||||
|
||||
void UART_DMATransmitCplt(UART_HandleTypeDef *huart) { uart_sent = 1; }
|
||||
|
||||
/* USER CODE END 4 */
|
||||
|
||||
|
||||
@@ -1,182 +0,0 @@
|
||||
#include "main.h"
|
||||
#include "stm32g4xx_hal.h"
|
||||
#include <math.h>
|
||||
#include "si5351.h"
|
||||
|
||||
uint8_t oeb;
|
||||
|
||||
void si5351_write8 (uint8_t reg, uint8_t value){
|
||||
while (HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t)(SI5351_ADDRESS<<1), 3, 100) != HAL_OK) { }
|
||||
HAL_I2C_Mem_Write(&hi2c1, (uint8_t)(SI5351_ADDRESS<<1), (uint8_t)reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)(&value), 1, 100);
|
||||
}
|
||||
|
||||
uint8_t si5351_read8(uint8_t reg, uint8_t *value){
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
while (HAL_I2C_IsDeviceReady(&hi2c1, (uint16_t)(SI5351_ADDRESS<<1), 3, 100) != HAL_OK) { }
|
||||
status = HAL_I2C_Mem_Read(&hi2c1, // i2c handle
|
||||
(uint8_t)(SI5351_ADDRESS<<1), // i2c address, left aligned
|
||||
(uint8_t)reg, // register address
|
||||
I2C_MEMADD_SIZE_8BIT, // si5351 uses 8bit register addresses
|
||||
(uint8_t*)(&value), // write returned data to this variable
|
||||
1, // how many bytes to expect returned
|
||||
100); // timeout
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
void CalcRegisters(uint32_t fout, uint8_t *regs){
|
||||
// uint32_t fref = SI5351_CRYSTAL_FREQ; // The reference frequency
|
||||
|
||||
// Calc Output Multisynth Divider and R with e = 0 and f = 1 => msx_p2 = 0 and msx_p3 = 1
|
||||
uint32_t d = 4;
|
||||
uint32_t msx_p1 = 0; // If fout > 150 MHz then MSx_P1 = 0 and MSx_DIVBY4 = 0xC0, see datasheet 4.1.3
|
||||
int msx_divby4 = 0;
|
||||
int rx_div = 0;
|
||||
int r = 1;
|
||||
|
||||
if (fout > 150e6)
|
||||
msx_divby4 = 0x0C; // MSx_DIVBY4[1:0] = 0b11, see datasheet 4.1.3
|
||||
else if (fout < 292969UL) // If fout < 500 kHz then use R divider, see datasheet 4.2.2. In reality this means > 292 968,75 Hz when d = 2048
|
||||
{
|
||||
int rd = 0;
|
||||
while ((r < 128) && (r * fout < 292969UL))
|
||||
{
|
||||
r <<= 1;
|
||||
rd++;
|
||||
}
|
||||
rx_div = rd << 4;
|
||||
|
||||
d = 600e6 / (r * fout); // Use lowest VCO frequency but handle d minimum
|
||||
if (d % 2) // Make d even to reduce spurious and phase noise/jitter, see datasheet 4.1.2.1.
|
||||
d++;
|
||||
|
||||
if (d * r * fout < 600e6) // VCO frequency to low check and maintain an even d value
|
||||
d += 2;
|
||||
}
|
||||
else // 292968 Hz <= fout <= 150 MHz
|
||||
{
|
||||
d = 600e6 / fout; // Use lowest VCO frequency but handle d minimum
|
||||
if (d < 6)
|
||||
d = 6;
|
||||
else if (d % 2) // Make d even to reduce phase noise/jitter, see datasheet 4.1.2.1.
|
||||
d++;
|
||||
|
||||
if (d * fout < 600e6) // VCO frequency to low check and maintain an even d value
|
||||
d += 2;
|
||||
}
|
||||
msx_p1 = 128 * d - 512;
|
||||
|
||||
uint32_t fvco = (uint32_t) d * r * fout;
|
||||
|
||||
// Calc Feedback Multisynth Divider
|
||||
double fmd = (double)fvco / SI5351_CRYSTAL_FREQ; // The FMD value has been found
|
||||
int a = fmd; // a is the integer part of the FMD value
|
||||
|
||||
double b_c = (double)fmd - a; // Get b/c
|
||||
uint32_t c = 1048575UL;
|
||||
uint32_t b = (double)b_c * c;
|
||||
if (b > 0)
|
||||
{
|
||||
c = (double)b / b_c + 0.5; // Improves frequency precision in some cases
|
||||
if (c > 1048575UL)
|
||||
c = 1048575UL;
|
||||
}
|
||||
|
||||
uint32_t msnx_p1 = 128 * a + 128 * b / c - 512; // See datasheet 3.2
|
||||
uint32_t msnx_p2 = 128 * b - c * (128 * b / c);
|
||||
uint32_t msnx_p3 = c;
|
||||
|
||||
// Feedback Multisynth Divider registers
|
||||
regs[0] = (msnx_p3 >> 8) & 0xFF;
|
||||
regs[1] = msnx_p3 & 0xFF;
|
||||
regs[2] = (msnx_p1 >> 16) & 0x03;
|
||||
regs[3] = (msnx_p1 >> 8) & 0xFF;
|
||||
regs[4] = msnx_p1 & 0xFF;
|
||||
regs[5] = ((msnx_p3 >> 12) & 0xF0) + ((msnx_p2 >> 16) & 0x0F);
|
||||
regs[6] = (msnx_p2 >> 8) & 0xFF;
|
||||
regs[7] = msnx_p2 & 0xFF;
|
||||
|
||||
// Output Multisynth Divider registers
|
||||
regs[8] = 0; // (msx_p3 >> 8) & 0xFF
|
||||
regs[9] = 1; // msx_p3 & 0xFF
|
||||
regs[10] = rx_div + msx_divby4 + ((msx_p1 >> 16) & 0x03);
|
||||
regs[11] = (msx_p1 >> 8) & 0xFF;
|
||||
regs[12] = msx_p1 & 0xFF;
|
||||
regs[13] = 0; // ((msx_p3 >> 12) & 0xF0) + (msx_p2 >> 16) & 0x0F
|
||||
regs[14] = 0; // (msx_p2 >> 8) & 0xFF
|
||||
regs[15] = 0; // msx_p2 & 0xFF
|
||||
|
||||
// HAL_I2C_Master_Transmit(&hi2c2, Si5351_ConfigStruct->HW_I2C_Address, reg_data, sizeof(reg_data), HAL_MAX_DELAY);
|
||||
return;
|
||||
}
|
||||
|
||||
void si5351_initialize(){
|
||||
uint8_t dummy;
|
||||
// Initialize Si5351A
|
||||
while (si5351_read8(0,dummy) & 0x80); // Wait for Si5351A to initialize
|
||||
oeb = 0xFF;
|
||||
|
||||
si5351_write8(SI5351_OUT_ENABLE, oeb); // Output Enable Control, disable all
|
||||
|
||||
si5351_write8(SI5351_INPUT_SOURCE, 0x00); // PLL Input Source, select the XTAL input as the reference clock for PLLA and PLLB
|
||||
si5351_write8(SI5351_OUT_DIS_STATE, 0x00); // stato bassa Z giu se disabilitati
|
||||
|
||||
// Output MultisynthN, e = 0, f = 1, MS0_P2 and MSO_P3
|
||||
si5351_write8(SI5351_MULTISYNTH0, 0x00);
|
||||
si5351_write8(SI5351_MULTISYNTH0+1, 0x01);
|
||||
si5351_write8(SI5351_MULTISYNTH0+5, 0x00);
|
||||
si5351_write8(SI5351_MULTISYNTH0+6, 0x00);
|
||||
si5351_write8(SI5351_MULTISYNTH0+7, 0x00);
|
||||
|
||||
si5351_write8(SI5351_MULTISYNTH1, 0x00);
|
||||
si5351_write8(SI5351_MULTISYNTH1+1, 0x01);
|
||||
si5351_write8(SI5351_MULTISYNTH1+5, 0x00);
|
||||
si5351_write8(SI5351_MULTISYNTH1+6, 0x00);
|
||||
si5351_write8(SI5351_MULTISYNTH1+7, 0x00);
|
||||
|
||||
si5351_write8(SI5351_MULTISYNTH2, 0x00);
|
||||
si5351_write8(SI5351_MULTISYNTH2+1, 0x01);
|
||||
si5351_write8(SI5351_MULTISYNTH2+5, 0x00);
|
||||
si5351_write8(SI5351_MULTISYNTH2+6, 0x00);
|
||||
si5351_write8(SI5351_MULTISYNTH2+7, 0x00);
|
||||
|
||||
si5351_write8(SI5351_CLK0_CONTROL, 0x4F); // Power up CLK0, PLLA, MS0 operates in integer mode, Output Clock 0 is not inverted, Select MultiSynth 0 as the source for CLK0 and 8 mA
|
||||
si5351_write8(SI5351_CLK1_CONTROL, 0x5F); // Power up CLK1, PLLA, MS0 operates in integer mode, Output Clock 1 is inverted, Select MultiSynth 1 as the source for CLK1 and 8 mA
|
||||
si5351_write8(SI5351_CLK2_CONTROL, 0x6F); // Power up CLK2, PLLB, int, non inv, multisynth 2, 8 ma
|
||||
|
||||
// Reference load configuration
|
||||
si5351_write8(SI5351_CRYSTAL_LOAD, 0x12); // Set reference load C: 6 pF = 0x12, 8 pF = 0x92, 10 pF = 0xD2
|
||||
}
|
||||
|
||||
void si5351_set_frequency(uint32_t freq, uint8_t pll){
|
||||
uint8_t regs[16];
|
||||
CalcRegisters(freq, regs);
|
||||
|
||||
// Load Output Multisynth0 with d (e and f already set during init. and never changed)
|
||||
if(pll == 0){
|
||||
for (int i = 0; i < 8; i++)
|
||||
si5351_write8(SI5351_PLLA + i, regs[i]);
|
||||
for (int i = 10; i < 13; i++)
|
||||
si5351_write8(34 + i, regs[i]);
|
||||
} else if(pll == 1){
|
||||
for (int i = 0; i < 8; i++)
|
||||
si5351_write8(SI5351_PLLB + i, regs[i]);
|
||||
for (int i = 10; i < 13; i++)
|
||||
si5351_write8(42 + i, regs[i]);
|
||||
}
|
||||
|
||||
// Reset PLLA
|
||||
// delayMicroseconds(500); // Allow registers to settle before resetting the PLL
|
||||
si5351_write8(SI5351_RESET, 0x20);
|
||||
}
|
||||
|
||||
void si5351_off_clk(uint8_t clk){
|
||||
oeb |= 1U << clk;
|
||||
si5351_write8(SI5351_OUT_ENABLE, oeb);
|
||||
}
|
||||
|
||||
void si5351_on_clk(uint8_t clk){
|
||||
oeb &= ~(1U << clk);
|
||||
si5351_write8(SI5351_OUT_ENABLE, oeb);
|
||||
}
|
||||
1
squeow_sw/Src/si5351.c
Symbolic link
1
squeow_sw/Src/si5351.c
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../uC_driver/synth/si5351/si5351.c
|
||||
@@ -9,56 +9,58 @@
|
||||
|
||||
/* SQUEOW
|
||||
|
||||
TIM3 eventi 98304000/(49152×200) 10hz
|
||||
TIM2 PWM 98304000/2048 48khz
|
||||
TIM2 PWM 168000000/4096 = 41015,625 Hz
|
||||
TIM3 sys_tick 168000000/(16800×100) 100hz
|
||||
|
||||
risoluzione PWM 4*2048 -> 8192 (13bit)
|
||||
risoluzione PWM 4096 (12bit)
|
||||
|
||||
ADC1 agganciato a TIM2, valore passato attraverso TIM2_IRQHandler a TIM2->CCR1
|
||||
ADC2 lanciato da software, quando completo adc2_done viene settato in HAL_ADC_ConvCpltCallback
|
||||
|
||||
*/
|
||||
|
||||
extern I2C_HandleTypeDef hi2c1;
|
||||
|
||||
// SYS
|
||||
uint8_t sys_tick, sys_tick_prescale, pwm_tick;
|
||||
volatile uint8_t sys_tick, sys_tick_prescale;
|
||||
|
||||
// UART
|
||||
uint8_t UART_RX_buf[UART_RX_BUF_SIZE];
|
||||
|
||||
uint8_t UART_TX_buf[UART_TX_BUF_SIZE];
|
||||
uint8_t UART_TX_buf_lenght;
|
||||
|
||||
// SYNTH
|
||||
uint32_t freq;
|
||||
|
||||
// ADC1
|
||||
uint16_t adc1_valore;
|
||||
// ADC2 (16 o 32?) per usare buffer da 32 settare WORD nel canale DMA
|
||||
uint32_t adc2_valori[4];
|
||||
uint8_t adc2_done, blocco, blocco_fatto, codice_allarme;
|
||||
|
||||
// ADC2
|
||||
uint16_t adc2_valori[4];
|
||||
uint8_t adc2_done, adc_blocco, adc_allarmi[4];
|
||||
|
||||
// audio
|
||||
uint16_t sample_value;
|
||||
uint8_t stato_audio;
|
||||
double sine_increment;
|
||||
uint16_t samples_ringbuf[SAMPLES_BUFFER_SIZE]; ///< buffer ad anello dei dati RX
|
||||
uint32_t samples_ringbuf_input_index, samples_ringbuf_output_index;
|
||||
uint8_t usb_audio_tick;
|
||||
|
||||
// VU
|
||||
uint8_t analog_wd_status;
|
||||
|
||||
// MOD
|
||||
uint16_t pwm_value1, pwm_value2, pwm_value3, pwm_value4;
|
||||
uint8_t rails_number;
|
||||
|
||||
// ###################################
|
||||
|
||||
int serial_write(char *ptr, size_t len) {
|
||||
// todo sia dma che it corrompono (vedi sotto, static)
|
||||
HAL_UART_Transmit_DMA(&huart1, ptr, len);
|
||||
// HAL_UART_Transmit_IT(&huart1, ptr, len);
|
||||
// HAL_UART_Transmit(&huart1, ptr, len, 1000);
|
||||
// uart_sent = 0;
|
||||
UART_TX_buf_lenght = 0;
|
||||
return len;
|
||||
}
|
||||
|
||||
void squeow_init(void) {
|
||||
seriow_log(2, "squeow init");
|
||||
sine_increment = 0.4;
|
||||
samples_ringbuf_input_index = 0;
|
||||
samples_ringbuf_output_index = 0;
|
||||
freq = DEFAULT_SYNTH_FREQUENCY;
|
||||
adc2_valori[0] = 10;
|
||||
adc2_valori[1] = 20;
|
||||
adc2_valori[2] = 30;
|
||||
adc2_valori[3] = 40;
|
||||
blocco = 0;
|
||||
adc2_valori[0] = 0;
|
||||
adc2_valori[1] = 0;
|
||||
adc2_valori[2] = 0;
|
||||
adc2_valori[3] = 0;
|
||||
codice_allarme = 0;
|
||||
}
|
||||
|
||||
uint32_t sat_sub(uint16_t x, uint16_t y) {
|
||||
@@ -67,121 +69,165 @@ uint32_t sat_sub(uint16_t x, uint16_t y) {
|
||||
return res;
|
||||
}
|
||||
|
||||
uint16_t u12_sine(void) {
|
||||
static double angle;
|
||||
angle += sine_increment;
|
||||
if (angle >= 6.28)
|
||||
angle = 0;
|
||||
return (uint16_t)((sin(angle) * 0x7ff) + 0x7ff);
|
||||
}
|
||||
|
||||
/*
|
||||
uint16_t get_adc_sample(void) {
|
||||
uint16_t adc_sample_value;
|
||||
// stato_audio == STATO_AUDIO_ADC;
|
||||
HAL_ADC_Start(&hadc1);
|
||||
if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
|
||||
// store_sample(HAL_ADC_GetValue(&hadc1) << 4);
|
||||
adc_sample_value = HAL_ADC_GetValue(&hadc1);
|
||||
}
|
||||
HAL_ADC_Stop(&hadc1);
|
||||
return adc_sample_value;
|
||||
}
|
||||
*/
|
||||
|
||||
void store_samples(uint16_t *data, uint32_t size) {
|
||||
for (uint32_t i = 0; i < size; ++i) {
|
||||
store_sample(data[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void store_sample(uint16_t sample) {
|
||||
samples_ringbuf[samples_ringbuf_input_index] = sample;
|
||||
ringbuf_increment(&samples_ringbuf_input_index, SAMPLES_BUFFER_SIZE_MASK);
|
||||
}
|
||||
|
||||
uint16_t get_sample(void) {
|
||||
ringbuf_increment(&samples_ringbuf_output_index, SAMPLES_BUFFER_SIZE_MASK);
|
||||
return samples_ringbuf[samples_ringbuf_output_index];
|
||||
}
|
||||
|
||||
uint32_t ringbuf_increment(uint32_t *index, uint32_t buff_size_mask) {
|
||||
(*index)++;
|
||||
*index &= buff_size_mask;
|
||||
return *index;
|
||||
}
|
||||
|
||||
void store_buffer(uint8_t *buf, uint32_t size) {
|
||||
for (uint32_t s = 0; s < size / 4; s++) {
|
||||
uint16_t LL = buf[s * 2];
|
||||
uint16_t RR = buf[(s * 2) + 1];
|
||||
store_sample(RR);
|
||||
}
|
||||
}
|
||||
|
||||
int vu_meter(uint16_t sample) {
|
||||
#define ZEROD 2047
|
||||
#define ZEROU 2048
|
||||
uint16_t abs_sample;
|
||||
uint8_t scaled_abs_sample;
|
||||
abs_sample = (sample > ZEROD) ? sample - ZEROU : ZEROD - sample;
|
||||
scaled_abs_sample = abs_sample >> 3;
|
||||
|
||||
if (scaled_abs_sample >= vu_tmp_value)
|
||||
return scaled_abs_sample;
|
||||
else {
|
||||
return vu_tmp_value;
|
||||
}
|
||||
}
|
||||
|
||||
// adc
|
||||
|
||||
void adc_rileva_soglie(uint16_t *adc_valori) {
|
||||
if (adc_valori[0] > SOGLIA_TEMPERATURA) {
|
||||
seriow_log(1, "ADC0 threshold detect");
|
||||
HAL_GPIO_WritePin(TEMP_OL_GPIO_Port, TEMP_OL_Pin, 1);
|
||||
adc_allarmi[0] = 1;
|
||||
adc_blocco = 1;
|
||||
}
|
||||
if (adc_valori[1] > SOGLIA_CORRENTE) {
|
||||
seriow_log(1, "ADC1 threshold detect");
|
||||
adc_allarmi[1] = 1;
|
||||
adc_blocco = 1;
|
||||
}
|
||||
if (adc_valori[3] > SOGLIA_RIFLESSA) {
|
||||
seriow_log(1, "ADC3 threshold detect");
|
||||
HAL_GPIO_WritePin(REFL_OL_GPIO_Port, REFL_OL_Pin, 1);
|
||||
adc_allarmi[3] = 1;
|
||||
adc_blocco = 1;
|
||||
void adc_rileva_soglie(uint32_t *adc_valori) {
|
||||
if (!blocco) {
|
||||
#ifdef SQUEOW_SONDA_CORRENTE
|
||||
if (adc_valori[SQUEOW_ADC_CORRENTE] > SOGLIA_CORRENTE) {
|
||||
codice_allarme = SQUEOW_CODICE_CORRENTE;
|
||||
blocco = 1;
|
||||
}
|
||||
#endif
|
||||
#ifdef SQUEOW_SONDA_TEMPERATURA
|
||||
if (adc_valori[SQUEOW_ADC_TEMPERATURA] > SOGLIA_TEMPERATURA) {
|
||||
codice_allarme = SQUEOW_CODICE_TEMPERATURA;
|
||||
blocco = 1;
|
||||
}
|
||||
#endif
|
||||
#ifdef SQUEOW_SONDA_DIRETTA
|
||||
if (adc_valori[SQUEOW_ADC_DIRETTA] > SOGLIA_DIRETTA) {
|
||||
codice_allarme = SQUEOW_CODICE_DIRETTA;
|
||||
blocco = 1;
|
||||
}
|
||||
#endif
|
||||
#ifdef SQUEOW_SONDA_RIFLESSA
|
||||
if (adc_valori[SQUEOW_ADC_RIFLESSA] > SOGLIA_RIFLESSA) {
|
||||
codice_allarme = SQUEOW_CODICE_RIFLESSA;
|
||||
blocco = 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void array_values_mean(uint16_t *valori, uint16_t *medie, uint8_t dimensione){
|
||||
void processa_blocco(void) {
|
||||
static uint8_t vecchio_stato_blocco;
|
||||
static uint16_t timer_blocco;
|
||||
|
||||
// è appena stato impostato blocco
|
||||
if (blocco && !vecchio_stato_blocco) {
|
||||
// è appena stato impostato blocco
|
||||
#ifdef SQUEOW_UI_SERIOW
|
||||
seriow_log('E', "LOCK!");
|
||||
#endif
|
||||
#ifdef SQUEOW_UI_TOSTA
|
||||
tosta_log('E', "LOCK!");
|
||||
#endif
|
||||
#ifdef MODALITA_BLOCCO_PERMANENTE
|
||||
|
||||
#endif
|
||||
#ifdef MODALITA_BLOCCO_BASSA_POTENZA
|
||||
|
||||
#endif
|
||||
#ifdef MODALITA_BLOCCO_TEMPORANEO
|
||||
timer_blocco = 0;
|
||||
#endif
|
||||
|
||||
vecchio_stato_blocco = blocco;
|
||||
} else if (!blocco && vecchio_stato_blocco) {
|
||||
// è appena stato disinserito il blocco
|
||||
#ifdef SQUEOW_UI_SERIOW
|
||||
seriow_log('I', "UNLOCK");
|
||||
#endif
|
||||
#ifdef SQUEOW_UI_TOSTA
|
||||
tosta_log('I', "UNLOCK");
|
||||
#endif
|
||||
codice_allarme = 0;
|
||||
led_blocco(codice_allarme);
|
||||
vecchio_stato_blocco = blocco;
|
||||
}
|
||||
|
||||
#ifdef MODALITA_BLOCCO_TEMPORANEO
|
||||
else {
|
||||
// solo temporaneo
|
||||
if (timer_blocco > TEMPO_BLOCCO_TEMPORANEO) {
|
||||
timer_blocco = 0;
|
||||
blocco = 0;
|
||||
} else {
|
||||
timer_blocco++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// synth
|
||||
|
||||
void squeow_synth_init(void) {
|
||||
// occhio che blocca!
|
||||
seriow_log(2, "synth init");
|
||||
// occhio che blocca!
|
||||
#ifdef SQUEOW_UI_SERIOW
|
||||
seriow_log('I', "synth init");
|
||||
#endif
|
||||
|
||||
#ifdef SQUEOW_UI_TOSTA
|
||||
tosta_log('I', "synth init");
|
||||
#endif
|
||||
si5351_initialize();
|
||||
}
|
||||
|
||||
void squeow_synth_set(freq) {
|
||||
seriow_log(2, "synth set freq");
|
||||
void squeow_synth_set(uint32_t freq) {
|
||||
#ifdef SQUEOW_UI_SERIOW
|
||||
// seriow_log('I', "synth set freq");
|
||||
#endif
|
||||
|
||||
#ifdef SQUEOW_UI_TOSTA
|
||||
// tosta_log('I', "synth set freq");
|
||||
#endif
|
||||
|
||||
si5351_set_frequency(freq, 0);
|
||||
si5351_set_frequency(freq, 1);
|
||||
}
|
||||
|
||||
void squeow_synth_on(void) {
|
||||
seriow_log(2, "synth on");
|
||||
#ifdef SQUEOW_UI_SERIOW
|
||||
seriow_log('I', "synth on");
|
||||
#endif
|
||||
|
||||
#ifdef SQUEOW_UI_TOSTA
|
||||
tosta_log('I', "synth on");
|
||||
#endif
|
||||
|
||||
si5351_on_clk(0);
|
||||
si5351_on_clk(1);
|
||||
}
|
||||
|
||||
void squeow_synth_off(void) {
|
||||
seriow_log(2, "synth off");
|
||||
#ifdef SQUEOW_UI_SERIOW
|
||||
#endif
|
||||
|
||||
#ifdef SQUEOW_UI_TOSTA
|
||||
tosta_log('I', "synth off");
|
||||
#endif
|
||||
|
||||
si5351_off_clk(0);
|
||||
si5351_off_clk(1);
|
||||
}
|
||||
|
||||
void i2c_write8(I2C_HandleTypeDef handler, uint8_t address, uint8_t reg, uint8_t value) {
|
||||
while (HAL_I2C_IsDeviceReady(&handler, (uint16_t)(address << 1), 3, 100) != HAL_OK) {
|
||||
}
|
||||
HAL_I2C_Mem_Write(&handler, (uint8_t)(address << 1), (uint8_t)reg, I2C_MEMADD_SIZE_8BIT, (uint8_t *)(&value), 1, 100);
|
||||
}
|
||||
|
||||
uint8_t i2c_read8(I2C_HandleTypeDef handler, uint8_t address, uint8_t reg, uint8_t *value) {
|
||||
HAL_StatusTypeDef status = HAL_OK;
|
||||
while (HAL_I2C_IsDeviceReady(&handler, (uint16_t)(address << 1), 3, 100) != HAL_OK) {
|
||||
}
|
||||
status = HAL_I2C_Mem_Read(&handler, // i2c handle
|
||||
(uint8_t)(address << 1), // i2c address, left aligned
|
||||
(uint8_t)reg, // register address
|
||||
I2C_MEMADD_SIZE_8BIT, // 8bit register addresses
|
||||
(uint8_t *)(&value), // write returned data to this variable
|
||||
1, // how many bytes to expect returned
|
||||
100); // timeout
|
||||
return status;
|
||||
}
|
||||
|
||||
void si5351_write8(uint8_t reg, uint8_t value) { i2c_write8(hi2c1, SI5351_ADDRESS, reg, value); }
|
||||
|
||||
uint8_t si5351_read8(uint8_t reg, uint8_t *value) { return i2c_read8(hi2c1, SI5351_ADDRESS, reg, value); }
|
||||
|
||||
@@ -9,51 +9,186 @@
|
||||
|
||||
/* SQUEOW UI
|
||||
|
||||
|
||||
su tosta (8x16 caratteri)
|
||||
F: stringa frequenza
|
||||
V: barra volume
|
||||
D: barra diretta
|
||||
R: barra riflessa
|
||||
T: barra temperatura
|
||||
S: stringa stato
|
||||
*/
|
||||
|
||||
// VU
|
||||
uint8_t vu_on, vu_value, vu_tmp_value;
|
||||
uint8_t adc_stampa;
|
||||
uint16_t ui_volume;
|
||||
|
||||
uint8_t uart_sent;
|
||||
volatile uint8_t uart_sent;
|
||||
|
||||
// ################
|
||||
|
||||
void squeow_ui_init(void) {
|
||||
vu_on = 1;
|
||||
adc_stampa = 1;
|
||||
#ifdef SQUEOW_UI_SERIOW
|
||||
seriow_log('I', "seriow UI init");
|
||||
#endif
|
||||
|
||||
#ifdef SQUEOW_UI_TOSTA
|
||||
tosta_log('I', "UI init");
|
||||
#endif
|
||||
}
|
||||
|
||||
// seriow
|
||||
// https://git.lattuga.net/boyska/seriow
|
||||
|
||||
// 10hz
|
||||
void seriow_var_dump(void) {
|
||||
char buf[64];
|
||||
snprintf(buf, 64, "\e[3dDMP V=%lu T=%u C=%u D=%u R=%u\n", vu_value, adc2_valori[0], adc2_valori[1], adc2_valori[2], adc2_valori[3]);
|
||||
serial_write(buf, strlen(buf));
|
||||
vu_tmp_value = 0;
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "DMP V=%u ", riscala_valori(ui_volume, 0, 2048, 0, 100));
|
||||
#ifdef SQUEOW_SONDA_CORRENTE
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "C=%u ", riscala_valori(adc2_valori[SQUEOW_ADC_CORRENTE], 0, 4095, 0, 100));
|
||||
#endif
|
||||
#ifdef SQUEOW_SONDA_TEMPERATURA
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "T=%u ", riscala_valori(adc2_valori[SQUEOW_ADC_TEMPERATURA], 0, 4095, 0, 100));
|
||||
#endif
|
||||
#ifdef SQUEOW_SONDA_DIRETTA
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "D=%u ", riscala_valori(adc2_valori[SQUEOW_ADC_DIRETTA], 0, 4095, 0, 100));
|
||||
#endif
|
||||
#ifdef SQUEOW_SONDA_RIFLESSA
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "R=%u ", riscala_valori(adc2_valori[SQUEOW_ADC_RIFLESSA], 0, 4095, 0, 100));
|
||||
#endif
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "\n");
|
||||
}
|
||||
|
||||
// ogni 5sec
|
||||
void seriow_stab_dump(void) {
|
||||
char buf[64];
|
||||
snprintf(buf, 64, "DMP F=%lu\n", freq);
|
||||
serial_write(buf, strlen(buf));
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "DMP F=%lu ", freq);
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "VPK=%u ", VU_METER_SOGLIA_PICCO);
|
||||
|
||||
#ifdef SQUEOW_SONDA_CORRENTE
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "SC=%u ", SOGLIA_CORRENTE);
|
||||
#endif
|
||||
|
||||
#ifdef SQUEOW_SONDA_TEMPERATURA
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "ST=%u ", SOGLIA_TEMPERATURA);
|
||||
#endif
|
||||
|
||||
#ifdef SQUEOW_SONDA_DIRETTA
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "SD=%u ", SOGLIA_DIRETTA);
|
||||
#endif
|
||||
|
||||
#ifdef SQUEOW_SONDA_RIFLESSA
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "SR=%u ", SOGLIA_RIFLESSA);
|
||||
#endif
|
||||
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "\n");
|
||||
}
|
||||
|
||||
void seriow_log(uint8_t sev, char *msg) {
|
||||
char buf[64];
|
||||
snprintf(buf, 64, "\e[2dLOG %u %s\n", sev, msg);
|
||||
serial_write(buf, strlen(buf));
|
||||
void seriow_log(uint8_t sev, char *msg) { UART_TX_buf_lenght = snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "LOG %c %s\n", sev, msg); }
|
||||
|
||||
// tosta
|
||||
|
||||
void tosta_freq(void) {
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "\e[1d\e[0GF: %lu", freq);
|
||||
}
|
||||
|
||||
int serial_write(char *ptr, int len) {
|
||||
// todo sia dma che it corrompono
|
||||
// HAL_UART_Transmit_DMA(&huart1, ptr, len);
|
||||
// HAL_UART_Transmit_IT(&huart1, ptr, len);
|
||||
HAL_UART_Transmit(&huart1, ptr, len, 1000);
|
||||
uart_sent = 0;
|
||||
return len;
|
||||
void tosta_var_bars(void) {
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "\f\e[2d\e[0GV:\e[%ub\n", ui_volume);
|
||||
|
||||
#ifdef SQUEOW_SONDA_CORRENTE
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "C:\e[%ub\nu", riscala_valori(adc2_valori[SQUEOW_ADC_CORRENTE], 0, 4095, 0, 50));
|
||||
#endif
|
||||
#ifdef SQUEOW_SONDA_TEMPERATURA
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "T:\e[%ub\n", riscala_valori(adc2_valori[SQUEOW_ADC_TEMPERATURA], 0, 4095, 0, 50));
|
||||
#endif
|
||||
#ifdef SQUEOW_SONDA_DIRETTA
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "D:\e[%ub\n", riscala_valori(adc2_valori[SQUEOW_ADC_DIRETTA], 0, 4095, 0, 50));
|
||||
#endif
|
||||
#ifdef SQUEOW_SONDA_RIFLESSA
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "R:\e[%ub\n", riscala_valori(adc2_valori[SQUEOW_ADC_RIFLESSA], 0, 4095, 0, 50));
|
||||
#endif
|
||||
}
|
||||
|
||||
void tosta_log(uint8_t sev, char *msg) {
|
||||
UART_TX_buf_lenght += snprintf(UART_TX_buf + UART_TX_buf_lenght, UART_TX_BUF_SIZE, "\e[8d\e[0GLOG: %c %s", sev, msg);
|
||||
}
|
||||
|
||||
// LED
|
||||
|
||||
void led_blocco(uint8_t led_blocco_lampi) {
|
||||
// fasi
|
||||
// 0 lampo acceso
|
||||
// 1 lampo spento
|
||||
// 2 pausa
|
||||
static uint16_t led_blocco_timer;
|
||||
static uint8_t led_blocco_fase = 0, led_blocco_lampi_fatti = 0;
|
||||
if (led_blocco_lampi > 0) {
|
||||
if (led_blocco_fase == 0 && led_blocco_timer == 0) {
|
||||
// inizio lampo acceso
|
||||
HAL_GPIO_WritePin(G2_GPIO_Port, G2_Pin, GPIO_PIN_SET);
|
||||
led_blocco_timer = 1;
|
||||
} else if (led_blocco_fase == 0 && led_blocco_timer >= SQUEOW_LED_BLOCCO_LAMPO) {
|
||||
// fine lampo acceso, inizio lampo spento
|
||||
HAL_GPIO_WritePin(G2_GPIO_Port, G2_Pin, GPIO_PIN_RESET);
|
||||
led_blocco_fase = 1;
|
||||
led_blocco_timer = 0;
|
||||
} else if (led_blocco_fase == 1 && led_blocco_timer >= SQUEOW_LED_BLOCCO_LAMPO) {
|
||||
// fine lampo spento
|
||||
if (led_blocco_lampi_fatti >= (led_blocco_lampi - 1)) {
|
||||
// fine lampi, inizio pausa
|
||||
led_blocco_fase = 2;
|
||||
led_blocco_lampi_fatti = 0;
|
||||
HAL_GPIO_WritePin(G2_GPIO_Port, G2_Pin, GPIO_PIN_RESET);
|
||||
} else {
|
||||
led_blocco_lampi_fatti++;
|
||||
led_blocco_fase = 0;
|
||||
}
|
||||
led_blocco_timer = 0;
|
||||
} else if (led_blocco_fase == 2 && led_blocco_timer >= SQUEOW_LED_BLOCCO_PAUSA) {
|
||||
// fine pausa
|
||||
led_blocco_fase = 0;
|
||||
led_blocco_timer = 0;
|
||||
} else {
|
||||
led_blocco_timer++;
|
||||
}
|
||||
} else {
|
||||
HAL_GPIO_WritePin(G2_GPIO_Port, G2_Pin, GPIO_PIN_RESET);
|
||||
}
|
||||
}
|
||||
|
||||
void led_pwm_duty(uint8_t duty) { TIM8->CCR3 = duty; }
|
||||
|
||||
uint16_t vu_meter(uint16_t campione) {
|
||||
#define ZEROD 2047
|
||||
#define ZEROU 2048
|
||||
static uint16_t vu_valore_temp, vu_timer_picco;
|
||||
uint16_t abs_campione;
|
||||
// se è sopra lo zero analogico, sottrailo, se no inverti
|
||||
abs_campione = (campione > ZEROD) ? campione - ZEROU : ZEROD - campione;
|
||||
|
||||
#ifdef SQUEOW_UI_LED
|
||||
// gestione picco
|
||||
if (abs_campione > VU_METER_SOGLIA_PICCO) {
|
||||
vu_timer_picco = 0;
|
||||
HAL_GPIO_WritePin(G4_GPIO_Port, G4_Pin, GPIO_PIN_SET);
|
||||
} else if (vu_timer_picco >= VU_METER_TEMPO_PICCO) {
|
||||
HAL_GPIO_WritePin(G4_GPIO_Port, G4_Pin, GPIO_PIN_RESET);
|
||||
vu_timer_picco = 0;
|
||||
} else {
|
||||
vu_timer_picco++;
|
||||
}
|
||||
#endif
|
||||
|
||||
// vu meter
|
||||
if (abs_campione >= vu_valore_temp) {
|
||||
vu_valore_temp = abs_campione;
|
||||
} else {
|
||||
vu_valore_temp -= VU_METER_RILASCIO;
|
||||
}
|
||||
|
||||
return vu_valore_temp;
|
||||
}
|
||||
|
||||
uint16_t riscala_valori(uint16_t valore_in, uint16_t valore_in_minimo, uint16_t valore_in_massimo, uint16_t valore_out_minimo, uint16_t valore_out_massimo) {
|
||||
uint16_t range_in, range_out, valore_in_limitato;
|
||||
float scala;
|
||||
range_in = valore_in_massimo - valore_in_minimo;
|
||||
range_out = valore_out_massimo - valore_out_minimo;
|
||||
scala = range_in / range_out;
|
||||
valore_in_limitato = (((valore_in) < (valore_in_massimo)) ? (valore_in) : (valore_in_massimo));
|
||||
return valore_out_minimo + ((valore_in_limitato - valore_in_minimo) / scala);
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ extern DMA_HandleTypeDef hdma_usart1_tx;
|
||||
/* USER CODE END 0 */
|
||||
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||
/**
|
||||
/**
|
||||
* Initializes the Global MSP.
|
||||
*/
|
||||
void HAL_MspInit(void)
|
||||
@@ -91,20 +91,20 @@ void HAL_MspInit(void)
|
||||
static uint32_t HAL_RCC_ADC12_CLK_ENABLED=0;
|
||||
|
||||
/**
|
||||
* @brief ADC MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param hadc: ADC handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
* @brief ADC MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param hadc: ADC handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||
if(hadc->Instance==ADC1)
|
||||
{
|
||||
/* USER CODE BEGIN ADC1_MspInit 0 */
|
||||
/* USER CODE BEGIN ADC1_MspInit 0 */
|
||||
|
||||
/* USER CODE END ADC1_MspInit 0 */
|
||||
/* USER CODE END ADC1_MspInit 0 */
|
||||
|
||||
/** Initializes the peripherals clocks
|
||||
*/
|
||||
@@ -125,23 +125,23 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
|
||||
/**ADC1 GPIO Configuration
|
||||
PB0 ------> ADC1_IN15
|
||||
*/
|
||||
GPIO_InitStruct.Pin = AUDIO_IN_Pin;
|
||||
GPIO_InitStruct.Pin = A1_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(AUDIO_IN_GPIO_Port, &GPIO_InitStruct);
|
||||
HAL_GPIO_Init(A1_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/* ADC1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
|
||||
/* USER CODE BEGIN ADC1_MspInit 1 */
|
||||
/* USER CODE BEGIN ADC1_MspInit 1 */
|
||||
|
||||
/* USER CODE END ADC1_MspInit 1 */
|
||||
/* USER CODE END ADC1_MspInit 1 */
|
||||
}
|
||||
else if(hadc->Instance==ADC2)
|
||||
{
|
||||
/* USER CODE BEGIN ADC2_MspInit 0 */
|
||||
/* USER CODE BEGIN ADC2_MspInit 0 */
|
||||
|
||||
/* USER CODE END ADC2_MspInit 0 */
|
||||
/* USER CODE END ADC2_MspInit 0 */
|
||||
|
||||
/** Initializes the peripherals clocks
|
||||
*/
|
||||
@@ -165,7 +165,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
|
||||
PA6 ------> ADC2_IN3
|
||||
PA7 ------> ADC2_IN4
|
||||
*/
|
||||
GPIO_InitStruct.Pin = TEMPERATURA_Pin|CORRENTE_Pin|DIRETTA_Pin|RIFLESSA_Pin;
|
||||
GPIO_InitStruct.Pin = A5_Pin|A4_Pin|A3_Pin|A2_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
@@ -177,8 +177,8 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
|
||||
hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||
hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||
hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
|
||||
hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
||||
hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
||||
hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
|
||||
hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
|
||||
hdma_adc2.Init.Mode = DMA_NORMAL;
|
||||
hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
|
||||
if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
|
||||
@@ -191,26 +191,26 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
|
||||
/* ADC2 interrupt Init */
|
||||
HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
|
||||
/* USER CODE BEGIN ADC2_MspInit 1 */
|
||||
/* USER CODE BEGIN ADC2_MspInit 1 */
|
||||
|
||||
/* USER CODE END ADC2_MspInit 1 */
|
||||
/* USER CODE END ADC2_MspInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief ADC MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param hadc: ADC handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
* @brief ADC MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param hadc: ADC handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
|
||||
{
|
||||
if(hadc->Instance==ADC1)
|
||||
{
|
||||
/* USER CODE BEGIN ADC1_MspDeInit 0 */
|
||||
/* USER CODE BEGIN ADC1_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END ADC1_MspDeInit 0 */
|
||||
/* USER CODE END ADC1_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
HAL_RCC_ADC12_CLK_ENABLED--;
|
||||
if(HAL_RCC_ADC12_CLK_ENABLED==0){
|
||||
@@ -220,26 +220,26 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
|
||||
/**ADC1 GPIO Configuration
|
||||
PB0 ------> ADC1_IN15
|
||||
*/
|
||||
HAL_GPIO_DeInit(AUDIO_IN_GPIO_Port, AUDIO_IN_Pin);
|
||||
HAL_GPIO_DeInit(A1_GPIO_Port, A1_Pin);
|
||||
|
||||
/* ADC1 interrupt DeInit */
|
||||
/* USER CODE BEGIN ADC1:ADC1_2_IRQn disable */
|
||||
/* USER CODE BEGIN ADC1:ADC1_2_IRQn disable */
|
||||
/**
|
||||
* Uncomment the line below to disable the "ADC1_2_IRQn" interrupt
|
||||
* Be aware, disabling shared interrupt may affect other IPs
|
||||
*/
|
||||
/* HAL_NVIC_DisableIRQ(ADC1_2_IRQn); */
|
||||
/* USER CODE END ADC1:ADC1_2_IRQn disable */
|
||||
/* USER CODE END ADC1:ADC1_2_IRQn disable */
|
||||
|
||||
/* USER CODE BEGIN ADC1_MspDeInit 1 */
|
||||
/* USER CODE BEGIN ADC1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END ADC1_MspDeInit 1 */
|
||||
/* USER CODE END ADC1_MspDeInit 1 */
|
||||
}
|
||||
else if(hadc->Instance==ADC2)
|
||||
{
|
||||
/* USER CODE BEGIN ADC2_MspDeInit 0 */
|
||||
/* USER CODE BEGIN ADC2_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END ADC2_MspDeInit 0 */
|
||||
/* USER CODE END ADC2_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
HAL_RCC_ADC12_CLK_ENABLED--;
|
||||
if(HAL_RCC_ADC12_CLK_ENABLED==0){
|
||||
@@ -252,42 +252,42 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
|
||||
PA6 ------> ADC2_IN3
|
||||
PA7 ------> ADC2_IN4
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, TEMPERATURA_Pin|CORRENTE_Pin|DIRETTA_Pin|RIFLESSA_Pin);
|
||||
HAL_GPIO_DeInit(GPIOA, A5_Pin|A4_Pin|A3_Pin|A2_Pin);
|
||||
|
||||
/* ADC2 DMA DeInit */
|
||||
HAL_DMA_DeInit(hadc->DMA_Handle);
|
||||
|
||||
/* ADC2 interrupt DeInit */
|
||||
/* USER CODE BEGIN ADC2:ADC1_2_IRQn disable */
|
||||
/* USER CODE BEGIN ADC2:ADC1_2_IRQn disable */
|
||||
/**
|
||||
* Uncomment the line below to disable the "ADC1_2_IRQn" interrupt
|
||||
* Be aware, disabling shared interrupt may affect other IPs
|
||||
*/
|
||||
/* HAL_NVIC_DisableIRQ(ADC1_2_IRQn); */
|
||||
/* USER CODE END ADC2:ADC1_2_IRQn disable */
|
||||
/* USER CODE END ADC2:ADC1_2_IRQn disable */
|
||||
|
||||
/* USER CODE BEGIN ADC2_MspDeInit 1 */
|
||||
/* USER CODE BEGIN ADC2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END ADC2_MspDeInit 1 */
|
||||
/* USER CODE END ADC2_MspDeInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief I2C MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param hi2c: I2C handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
* @brief I2C MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param hi2c: I2C handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||
if(hi2c->Instance==I2C1)
|
||||
{
|
||||
/* USER CODE BEGIN I2C1_MspInit 0 */
|
||||
/* USER CODE BEGIN I2C1_MspInit 0 */
|
||||
|
||||
/* USER CODE END I2C1_MspInit 0 */
|
||||
/* USER CODE END I2C1_MspInit 0 */
|
||||
|
||||
/** Initializes the peripherals clocks
|
||||
*/
|
||||
@@ -320,27 +320,27 @@ void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)
|
||||
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_I2C1_CLK_ENABLE();
|
||||
/* USER CODE BEGIN I2C1_MspInit 1 */
|
||||
/* USER CODE BEGIN I2C1_MspInit 1 */
|
||||
|
||||
/* USER CODE END I2C1_MspInit 1 */
|
||||
/* USER CODE END I2C1_MspInit 1 */
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief I2C MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param hi2c: I2C handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
* @brief I2C MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param hi2c: I2C handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c)
|
||||
{
|
||||
if(hi2c->Instance==I2C1)
|
||||
{
|
||||
/* USER CODE BEGIN I2C1_MspDeInit 0 */
|
||||
/* USER CODE BEGIN I2C1_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END I2C1_MspDeInit 0 */
|
||||
/* USER CODE END I2C1_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_I2C1_CLK_DISABLE();
|
||||
|
||||
@@ -352,48 +352,59 @@ void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c)
|
||||
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7);
|
||||
|
||||
/* USER CODE BEGIN I2C1_MspDeInit 1 */
|
||||
/* USER CODE BEGIN I2C1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END I2C1_MspDeInit 1 */
|
||||
/* USER CODE END I2C1_MspDeInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM_Base MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param htim_base: TIM_Base handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
* @brief TIM_Base MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param htim_base: TIM_Base handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||
{
|
||||
if(htim_base->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspInit 0 */
|
||||
/* USER CODE BEGIN TIM2_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspInit 0 */
|
||||
/* USER CODE END TIM2_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_TIM2_CLK_ENABLE();
|
||||
/* TIM2 interrupt Init */
|
||||
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM2_IRQn);
|
||||
/* USER CODE BEGIN TIM2_MspInit 1 */
|
||||
/* USER CODE BEGIN TIM2_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspInit 1 */
|
||||
/* USER CODE END TIM2_MspInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM3)
|
||||
{
|
||||
/* USER CODE BEGIN TIM3_MspInit 0 */
|
||||
/* USER CODE BEGIN TIM3_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM3_MspInit 0 */
|
||||
/* USER CODE END TIM3_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_TIM3_CLK_ENABLE();
|
||||
/* TIM3 interrupt Init */
|
||||
HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM3_IRQn);
|
||||
/* USER CODE BEGIN TIM3_MspInit 1 */
|
||||
/* USER CODE BEGIN TIM3_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM3_MspInit 1 */
|
||||
/* USER CODE END TIM3_MspInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM8)
|
||||
{
|
||||
/* USER CODE BEGIN TIM8_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM8_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_TIM8_CLK_ENABLE();
|
||||
/* USER CODE BEGIN TIM8_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM8_MspInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
@@ -403,10 +414,9 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(htim->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspPostInit 0 */
|
||||
/* USER CODE BEGIN TIM2_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspPostInit 0 */
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
/**TIM2 GPIO Configuration
|
||||
PA0 ------> TIM2_CH1
|
||||
@@ -421,66 +431,98 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN TIM2_MspPostInit 1 */
|
||||
/* USER CODE BEGIN TIM2_MspPostInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspPostInit 1 */
|
||||
/* USER CODE END TIM2_MspPostInit 1 */
|
||||
}
|
||||
else if(htim->Instance==TIM8)
|
||||
{
|
||||
/* USER CODE BEGIN TIM8_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM8_MspPostInit 0 */
|
||||
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
/**TIM8 GPIO Configuration
|
||||
PB5 ------> TIM8_CH3N
|
||||
*/
|
||||
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_AF3_TIM8;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN TIM8_MspPostInit 1 */
|
||||
|
||||
/* USER CODE END TIM8_MspPostInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* @brief TIM_Base MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param htim_base: TIM_Base handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
* @brief TIM_Base MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param htim_base: TIM_Base handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
||||
{
|
||||
if(htim_base->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 0 */
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspDeInit 0 */
|
||||
/* USER CODE END TIM2_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM2_CLK_DISABLE();
|
||||
|
||||
/* TIM2 interrupt DeInit */
|
||||
HAL_NVIC_DisableIRQ(TIM2_IRQn);
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 1 */
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspDeInit 1 */
|
||||
/* USER CODE END TIM2_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM3)
|
||||
{
|
||||
/* USER CODE BEGIN TIM3_MspDeInit 0 */
|
||||
/* USER CODE BEGIN TIM3_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM3_MspDeInit 0 */
|
||||
/* USER CODE END TIM3_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM3_CLK_DISABLE();
|
||||
|
||||
/* TIM3 interrupt DeInit */
|
||||
HAL_NVIC_DisableIRQ(TIM3_IRQn);
|
||||
/* USER CODE BEGIN TIM3_MspDeInit 1 */
|
||||
/* USER CODE BEGIN TIM3_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM3_MspDeInit 1 */
|
||||
/* USER CODE END TIM3_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM8)
|
||||
{
|
||||
/* USER CODE BEGIN TIM8_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM8_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM8_CLK_DISABLE();
|
||||
/* USER CODE BEGIN TIM8_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM8_MspDeInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief UART MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param huart: UART handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
* @brief UART MSP Initialization
|
||||
* This function configures the hardware resources used in this example
|
||||
* @param huart: UART handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||
if(huart->Instance==USART1)
|
||||
{
|
||||
/* USER CODE BEGIN USART1_MspInit 0 */
|
||||
/* USER CODE BEGIN USART1_MspInit 0 */
|
||||
|
||||
/* USER CODE END USART1_MspInit 0 */
|
||||
/* USER CODE END USART1_MspInit 0 */
|
||||
|
||||
/** Initializes the peripherals clocks
|
||||
*/
|
||||
@@ -544,27 +586,27 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
||||
/* USART1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(USART1_IRQn);
|
||||
/* USER CODE BEGIN USART1_MspInit 1 */
|
||||
/* USER CODE BEGIN USART1_MspInit 1 */
|
||||
|
||||
/* USER CODE END USART1_MspInit 1 */
|
||||
/* USER CODE END USART1_MspInit 1 */
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief UART MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param huart: UART handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
* @brief UART MSP De-Initialization
|
||||
* This function freeze the hardware resources used in this example
|
||||
* @param huart: UART handle pointer
|
||||
* @retval None
|
||||
*/
|
||||
void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
|
||||
{
|
||||
if(huart->Instance==USART1)
|
||||
{
|
||||
/* USER CODE BEGIN USART1_MspDeInit 0 */
|
||||
/* USER CODE BEGIN USART1_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END USART1_MspDeInit 0 */
|
||||
/* USER CODE END USART1_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_USART1_CLK_DISABLE();
|
||||
|
||||
@@ -580,9 +622,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
|
||||
|
||||
/* USART1 interrupt DeInit */
|
||||
HAL_NVIC_DisableIRQ(USART1_IRQn);
|
||||
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
||||
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END USART1_MspDeInit 1 */
|
||||
/* USER CODE END USART1_MspDeInit 1 */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file stm32g4xx_it.c
|
||||
* @brief Interrupt Service Routines.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2022 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
******************************************************************************
|
||||
* @file stm32g4xx_it.c
|
||||
* @brief Interrupt Service Routines.
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* Copyright (c) 2022 STMicroelectronics.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This software is licensed under terms that can be found in the LICENSE file
|
||||
* in the root directory of this software component.
|
||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
@@ -81,9 +81,8 @@ void NMI_Handler(void)
|
||||
|
||||
/* USER CODE END NonMaskableInt_IRQn 0 */
|
||||
/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
|
||||
while (1)
|
||||
{
|
||||
}
|
||||
while (1) {
|
||||
}
|
||||
/* USER CODE END NonMaskableInt_IRQn 1 */
|
||||
}
|
||||
|
||||
@@ -274,11 +273,22 @@ void TIM2_IRQHandler(void)
|
||||
/* USER CODE END TIM2_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim2);
|
||||
/* USER CODE BEGIN TIM2_IRQn 1 */
|
||||
uint16_t adc_val;
|
||||
adc_val = HAL_ADC_GetValue(&hadc1);
|
||||
vu_value = vu_meter(adc_val);
|
||||
TIM2->CCR1 = adc_val;
|
||||
TIM2->CCR2 = adc_val;
|
||||
uint16_t adc_val;
|
||||
adc_val = HAL_ADC_GetValue(&hadc1);
|
||||
if (blocco) {
|
||||
#ifdef MODALITA_BLOCCO_PERMANENTE
|
||||
TIM2->CCR1 = 0;
|
||||
TIM2->CCR2 = 0;
|
||||
#endif
|
||||
#ifdef MODALITA_BLOCCO_BASSA_POTENZA
|
||||
TIM2->CCR1 = adc_val >> DIVISORE_BLOCCO_BASSA_POTENZA;
|
||||
TIM2->CCR2 = adc_val >> DIVISORE_BLOCCO_BASSA_POTENZA;
|
||||
#endif
|
||||
} else {
|
||||
TIM2->CCR1 = adc_val;
|
||||
TIM2->CCR2 = adc_val; // ???
|
||||
}
|
||||
ui_volume = vu_meter(adc_val);
|
||||
/* USER CODE END TIM2_IRQn 1 */
|
||||
}
|
||||
|
||||
@@ -292,7 +302,8 @@ void TIM3_IRQHandler(void)
|
||||
/* USER CODE END TIM3_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim3);
|
||||
/* USER CODE BEGIN TIM3_IRQn 1 */
|
||||
sys_tick = 1;
|
||||
// base tempi
|
||||
sys_tick = 1;
|
||||
/* USER CODE END TIM3_IRQn 1 */
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user