#ifndef INIT_H
#define INIT_H

#include "stm32f4xx.h"
#include <stdint.h>

/* Требования задания */
#define SINE_POINTS         100u
#define SINE_FREQ_HZ        1000u
#define DAC_UPDATE_HZ       (SINE_POINTS * SINE_FREQ_HZ)  /* 100 * 1k = 100 kHz */

#define DAC_MAX_12BIT       4095u
#define ADC_MAX_12BIT       4095u
#define VREF_VOLTS          3.0f

/* Пины (выводы) */
#define DAC_OUT_PIN         GPIO_Pin_4   /* PA4 = DAC Channel 1 */
#define AMP_ADC_PIN         GPIO_Pin_5   /* PA5 = ADC1 Channel 5 */

/* Буфер для DMA->DAC */
extern uint16_t g_dac_buffer[SINE_POINTS];

/* Инициализация периферии */
void GPIO_Init_All(void);
void DAC1_Init_All(void);
void DMA1_For_DAC1_Init(uint16_t *buf, uint32_t n);
void TIM2_TRGO_Init(uint32_t update_hz);
void ADC1_PA5_Init(void);

/* Сервис */
uint16_t ADC1_ReadAverage(uint8_t samples);
uint8_t  ADC_To_Amplitude_0_100(uint16_t adc_raw);

/* Генерация */
void SineBase_Init(void);
void SineBuffer_Update(uint8_t amplitude_0_100);

#endif
