/* * File : clock.c * This file is part of RT-Thread RTOS * COPYRIGHT (C) 2006, RT-Thread Development Team * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://openlab.rt-thread.com/license/LICENSE * * Change Logs: * Date Author Notes * 2010-03-20 zchong first version */ #include #include "sep4020.h" #define CLK_IN 4000000 /* Fin = 4.00MHz */ #define SYSCLK 72000000 /* system clock we want */ #define CLK_ESRAM 0 #define CLK_LCDC 1 #define CLK_PWM 2 #define CLK_DMAC 3 #define CLK_EMI 4 #define CLK_MMCSD 5 #define CLK_SSI 7 #define CLK_UART0 8 #define CLK_UART1 9 #define CLK_UART2 10 #define CLK_UART3 11 #define CLK_USB 12 #define CLK_MAC 13 #define CLK_SMC 14 #define CLK_I2C 15 #define CLK_GPT 16 static void rt_hw_set_system_clock(void) { rt_uint8_t pv; /* pv value*/ pv = SYSCLK/2/CLK_IN; /* go to normal mode*/ PMC_PMDR = 0x01; /* set the clock */ PMC_PMCR = 0x4000 | pv; /* trige configurate*/ PMC_PMCR = 0xc000 | pv; } static void rt_hw_set_usb_clock(void) { /* set the clock */ PMC_PUCR = 0x000c; /* trige configurate*/ PMC_PMCR = 0x800c; } /** * @brief System Clock Configuration */ void rt_hw_clock_init(void) { /* set system clock */ rt_hw_set_system_clock(); /* set usb clock */ rt_hw_set_usb_clock(); } /** * @brief Get system clock */ rt_uint32_t rt_hw_get_clock(void) { rt_uint32_t val; rt_uint8_t pv, pd, npd; /* get PMCR value */ val = PMC_PMCR; /* get NPD */ npd = (val >> 14) & 0x01; /* get PD */ pd = (val >> 10) & 0x0f; /* get PV */ pv = val & 0x7f; /* caculate the system clock */ if(npd) val = 2 * CLK_IN * pv; else val = CLK_IN * pv / (pd + 1); return(val); } /** * @brief Enable module clock */ void rt_hw_enable_module_clock(rt_uint8_t module) { } /** * @brief Disable module clock */ void rt_hw_disable_module_clock(rt_uint8_t module) { }