/*---------------------------------------------------------------------------------------------------------*/ uint32_t DrvI2S_GetSourceClockFreq(void) { uint8_t u8ClkSrcSel; uint32_t u32Freq = __XTAL; u8ClkSrcSel = SYSCLK->CLKSEL2.I2S_S; switch (u8ClkSrcSel) { case DRVI2S_EXT_12M: u32Freq = __XTAL; break; case DRVI2S_PLL: u32Freq = DrvSYS_GetPLLClockFreq(); break; case DRVI2S_HCLK: u32Freq = SystemCoreClock; break; case DRVI2S_INTERNAL_22M: u32Freq = __IRC22M; break; } return u32Freq; }
/*---------------------------------------------------------------------------- Clock functions This function is used to update the variable SystemCoreClock and must be called whenever the core clock is changed. *----------------------------------------------------------------------------*/ void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */ { uint32_t u32Freq, u32ClkSrc; uint32_t u32HclkDiv; /* Update PLL Clock */ PllClock = DrvSYS_GetPLLClockFreq(); u32ClkSrc = SYSCLK->CLKSEL0 & SYSCLK_CLKSEL0_HCLK_S_Msk; if(u32ClkSrc != SYSCLK_CLKSEL0_HCLK_PLL) { /* Use the clock sources directly */ u32Freq = gau32ClkSrcTbl[u32ClkSrc]; } else { /* Use PLL clock */ u32Freq = PllClock; } u32HclkDiv = (SYSCLK->CLKDIV & SYSCLK_CLKDIV_HCLK_N_Msk) + 1; /* Update System Core Clock */ SystemCoreClock = u32Freq/u32HclkDiv; CyclesPerUs = (SystemCoreClock + 500000) / 1000000; }
/*---------------------------------------------------------------------------------------------------------*/ static uint32_t GetUartClk(void) { uint32_t clk =0 , div; /* Check UART Clock Source Setting */ if(SYSCLK->CLKSEL1.UART_S == 0) { clk = DrvSYS_GetExtClockFreq(); /* Get External Clock From DrvSYS Setting */ } else if(SYSCLK->CLKSEL1.UART_S == 1) { div = SYSCLK->CLKDIV.UART_N; /* According PLL Clock and UART_Divider to get clock */ clk = DrvSYS_GetPLLClockFreq()/ (div+1); } else clk = __IRC22M; /* Clock 22Mhz */ return clk; }