/*FUNCTION********************************************************************** * * Function Name : CLOCK_SYS_GetUsbFreq * Description : Gets the clock frequency for USB FS OTG module. * This function gets the clock frequency for USB FS OTG moudle. * *END**************************************************************************/ uint32_t CLOCK_SYS_GetUsbFreq(uint32_t instance) { (void) instance; uint32_t freq = 0; uint8_t setting; clock_names_t clockName; uint32_t frac = 0; uint32_t divider = 0; /* get the sim clock source setting*/ if (CLOCK_HAL_GetSource(g_simBaseAddr[0], kClockUsbSrc, &setting) != kSimHalSuccess) { return freq; } switch ((sim_usb_clock_source_t)setting) { case kSimUsbSrcClkIn: /* Core/system clock */ clockName = kUSB_CLKIN; break; case kSimUsbSrcPllFllSel: /* clock as selected by SOPT2[PLLFLLSEL]. */ /* get the sim clock source setting*/ if (CLOCK_HAL_GetSource(g_simBaseAddr[0], kClockPllfllSel, &setting) != kSimHalSuccess) { return freq; } switch ((sim_pllfll_clock_sel_t)setting) { case kSimPllFllSelFll: /* Fll clock */ clockName = kMcgFllClock; break; case kSimPllFllSelPll: /* Pll0 clock */ clockName = kMcgPll0Clock; break; default: clockName = kReserved; break; } break; default: clockName = kReserved; break; } /* Get ref clock freq */ CLOCK_SYS_GetFreq(clockName, &freq); /* Get divider and frac */ CLOCK_HAL_GetDivider(g_simBaseAddr[0], kClockDividerUsbDiv, ÷r); CLOCK_HAL_GetDivider(g_simBaseAddr[0], kClockDividerUsbFrac, &frac); /* Divider output clock = Divider input clock � [ (FRAC+1) / (DIV+1) ]*/ freq = (freq) * (frac + 1) / (divider + 1); return freq; }
/*FUNCTION********************************************************************** * * Function Name : CLOCK_SYS_GetLpuartFreq * Description : Gets the clock frequency for LPUART module. * This function gets the clock frequency for LPUART moudle. * *END**************************************************************************/ uint32_t CLOCK_SYS_GetLpuartFreq(uint32_t instance) { uint32_t freq = 0; uint8_t setting; uint8_t setting1; clock_names_t clockName; uint32_t divider = 0; /* get the sim clock source setting*/ if (CLOCK_HAL_GetSource(g_simBaseAddr[0], kClockLpuartSrc, &setting) != kSimHalSuccess) { return freq; } switch ((sim_lpuart_clock_source_t)setting) { case kSimLpuartSrcPllFllSel: /* clock as selected by SOPT2[PLLFLLSEL]. */ /* get the sim clock source setting*/ if (CLOCK_HAL_GetSource(g_simBaseAddr[0], kClockPllfllSel, &setting1) != kSimHalSuccess) { return freq; } switch ((sim_pllfll_clock_sel_t)setting1) { case kSimPllFllSelFll: /* Fll clock */ clockName = kMcgFllClock; break; case kSimPllFllSelIrc: /* Irc 48Mhz clock */ clockName = kIrc48mClock; break; default: clockName = kReserved; break; } break; case kSimLpuartSrcOscErclk: /* OscErClk with divider */ clockName = kOsc0ErClock; break; case kSimLpuartSrcMcgIrclk: /* MCGIRCLK */ clockName = kMcgIrClock; break; default: clockName = kReserved; break; } /* Get ref clock freq */ CLOCK_SYS_GetFreq(clockName, &freq); if ((sim_lpuart_clock_source_t)setting == kSimLpuartSrcOscErclk) { divider = OSC_HAL_GetExternalRefClkDivCmd(g_oscBaseAddr[0]); freq = freq >> divider; /* 2 bits divider, divide by 1/2/4/8 */ }
/*FUNCTION********************************************************************** * * Function Name : CLOCK_SYS_GetSdhcFreq * Description : Gets the clock frequency for SDHC module * This function gets the clock frequency for SDHC moudle * *END**************************************************************************/ uint32_t CLOCK_SYS_GetSdhcFreq(uint32_t instance) { (void) instance; uint32_t freq = 0; uint8_t setting; clock_names_t clockName; /* get the sim clock source setting*/ if (CLOCK_HAL_GetSource(g_simBaseAddr[0], kClockSdhcSrc, &setting) != kSimHalSuccess) { return freq; } switch ((sim_sdhc_clock_source_t)setting) { case kSimSdhcSrcCoreSysClk: /* Core/system clock */ clockName = kCoreClock; break; case kSimSdhcSrcPllFllSel: /* clock as selected by SOPT2[PLLFLLSEL]. */ /* get the sim clock source setting*/ if (CLOCK_HAL_GetSource(g_simBaseAddr[0], kClockPllfllSel, &setting) != kSimHalSuccess) { return freq; } switch ((sim_pllfll_clock_sel_t)setting) { case kSimPllFllSelFll: /* Fll clock */ clockName = kMcgFllClock; break; case kSimPllFllSelPll: /* Pll0 clock */ clockName = kMcgPll0Clock; break; default: clockName = kReserved; break; } break; case kSimSdhcSrcOscerclk: /* OSCERCLK clock */ clockName = kOsc0ErClock; break; case kSimSdhcSrcExt: /* SDHC CLKIN clock */ clockName = kSDHC0_CLKIN; break; default: clockName = kReserved; break; } /* Get ref clock freq */ CLOCK_SYS_GetFreq(clockName, &freq); return freq; }
/*FUNCTION********************************************************************** * * Function Name : CLOCK_SYS_GetEnetRmiiFreq * Description : Gets the clock frequency for ENET module RMII clock. * This function gets the clock frequency for ENET moudle RMII clock. * *END**************************************************************************/ uint32_t CLOCK_SYS_GetEnetRmiiFreq(uint32_t instance) { (void) instance; uint32_t freq = 0; uint8_t setting; clock_names_t clockName; /* get the sim clock source setting*/ if (CLOCK_HAL_GetSource(g_simBaseAddr[0], kClockRmiiSrc, &setting) != kSimHalSuccess) { return freq; } if ((sim_rmii_clock_source_t)setting == kSimRmiiSrcExtalClk) { clockName = kEXTAL_Clock; } else { clockName = kENET_1588_CLKIN; } CLOCK_SYS_GetFreq(clockName, &freq); return freq; }