/*============================================================================== * Инициализация тактирования с использованием бибилотеки PLIB035 *------------------------------------------------------------------------------ * ЦНИИ СЭТ, Разваляев Алексей *============================================================================== * ЦНИИ СЭТ *============================================================================== */ //-- Includes ------------------------------------------------------------------ #include "periph_config.h" __IO uint32_t uwTick; // Milliseconds ticks //-- Defines ------------------------------------------------------------------- //-- Peripheral init functions ------------------------------------------------- void sysclk_init(void) { OperationStatus status; status = RCU_PLL_AutoConfig(SYSCLK_CORE_CLOCK_MHZ*__MHZ, SYSCLK_Oscil_Type); if (status == ERROR) { Error_Handler(); } SystemCoreClockUpdate(); RCU_ClkOutConfig(RCU_SysPeriphClk_PLLClk, 1, ENABLE); RCU_ClkOutCmd(ENABLE); /* Прерывание должно быть каждую миллисекунду: Для тактирования N Гц это каждый N / 1000 тик */ SysTick_Config(SYSCLK_CORE_CLOCK_MHZ*__MHZ/1000); } uint32_t millis(void) { return uwTick; } void millis_inc(void) { uwTick++; } uint32_t micros(void) { return 0; } void micros_inc(void) { uwTick++; } OperationStatus rcu_set_clock_adc(RCU_PeriphClk_TypeDef ClkSrc, float ClkMHz, FunctionalState state) { RCU_ADCClkCmd(DISABLE); uint32_t adc_raw_clock = 0; float adc_clock_div = 0; switch(ClkSrc) { case RCU_PeriphClk_OSEClk: adc_raw_clock = RCU_GetOSEClkFreq(); break; case RCU_PeriphClk_OSIClk: adc_raw_clock = RCU_GetOSIClkFreq(); break; case RCU_PeriphClk_PLLClk: adc_raw_clock = RCU_GetPLLClkFreq(); break; case RCU_PeriphClk_PLLDivClk: adc_raw_clock = RCU_GetPLLDivClkFreq(); break; } adc_clock_div = adc_raw_clock/(ClkMHz*__MHZ); if(adc_clock_div < 1) return ERROR; RCU_ADCClkConfig(ClkSrc, 7, ENABLE); //12.5MHz RCU_ADCClkCmd(ENABLE); return OK; }