#ifndef _MATLAB_RCC_H_
#define _MATLAB_RCC_H_

#include "mcu_wrapper_conf.h"



//#define SYSLCK_Value	((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)
//#define AHB_Prescaler	((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)
//#define AHB_Prescaler	((RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos)

#define HCLK_Value			(double)72000000;
#define ABP1_Value			(double)36000000;
#define ABP1_TIMS_Value		(double)72000000;
#define ABP2_Value			(double)72000000;
#define ABP2_TIMS_Value		(double)72000000;

/* Эти дефайны добавлены в код stm32f4xx_hal_rcc.c, чтобы не попасть в бесконечный цикл */
/* Мб перенести в MCU_Periph_Simulation(), но чет не хочется нагружать симуляцию этой херней*/
#define	_RCC_SET_FLAG(__FLAG__) \
if(((__FLAG__) >> 5U) == 1U) RCC->CR		|= (1U << ((__FLAG__) & RCC_FLAG_MASK));	\
else if(((__FLAG__) >> 5U) == 2U) RCC->BDCR |= (1U << ((__FLAG__) & RCC_FLAG_MASK));	\
else if(((__FLAG__) >> 5U) == 3U) RCC->CSR	|= (1U << ((__FLAG__) & RCC_FLAG_MASK));	\

#define	_RCC_CLEAR_FLAG(__FLAG__) \
if(((__FLAG__) >> 5U) == 1U) RCC->CR		&= ~(1U << ((__FLAG__) & RCC_FLAG_MASK));	\
else if(((__FLAG__) >> 5U) == 2U) RCC->BDCR &= ~(1U << ((__FLAG__) & RCC_FLAG_MASK));	\
else if(((__FLAG__) >> 5U) == 3U) RCC->CSR	&= ~(1U << ((__FLAG__) & RCC_FLAG_MASK));	\

#define Set_Flag_If_Its_Expected(_flag_, _condition_) \
if(_condition_) _RCC_CLEAR_FLAG(_flag_)

#define Clear_Flag_If_Its_Expected(_flag_, _condition_) \
if(_condition_) _RCC_SET_FLAG(_flag_)

#endif // _MATLAB_RCC_H_