1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2010-03-20 zchong first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #include <rtthread.h> 12*10465441SEvalZero #include "sep4020.h" 13*10465441SEvalZero 14*10465441SEvalZero #define CLK_IN 4000000 /* Fin = 4.00MHz */ 15*10465441SEvalZero #define SYSCLK 72000000 /* system clock we want */ 16*10465441SEvalZero 17*10465441SEvalZero #define CLK_ESRAM 0 18*10465441SEvalZero #define CLK_LCDC 1 19*10465441SEvalZero #define CLK_PWM 2 20*10465441SEvalZero #define CLK_DMAC 3 21*10465441SEvalZero #define CLK_EMI 4 22*10465441SEvalZero #define CLK_MMCSD 5 23*10465441SEvalZero #define CLK_SSI 7 24*10465441SEvalZero #define CLK_UART0 8 25*10465441SEvalZero #define CLK_UART1 9 26*10465441SEvalZero #define CLK_UART2 10 27*10465441SEvalZero #define CLK_UART3 11 28*10465441SEvalZero #define CLK_USB 12 29*10465441SEvalZero #define CLK_MAC 13 30*10465441SEvalZero #define CLK_SMC 14 31*10465441SEvalZero #define CLK_I2C 15 32*10465441SEvalZero #define CLK_GPT 16 33*10465441SEvalZero rt_hw_set_system_clock(void)34*10465441SEvalZerostatic void rt_hw_set_system_clock(void) 35*10465441SEvalZero { 36*10465441SEvalZero rt_uint8_t pv; 37*10465441SEvalZero 38*10465441SEvalZero /* pv value*/ 39*10465441SEvalZero pv = SYSCLK/2/CLK_IN; 40*10465441SEvalZero /* go to normal mode*/ 41*10465441SEvalZero *(RP)PMU_PMDR = 0x01; 42*10465441SEvalZero /* set the clock */ 43*10465441SEvalZero *(RP)PMU_PMCR = 0x4000 | pv; 44*10465441SEvalZero /* trige configurate*/ 45*10465441SEvalZero *(RP)PMU_PMCR = 0xc000 | pv; 46*10465441SEvalZero } 47*10465441SEvalZero rt_hw_set_usb_clock(void)48*10465441SEvalZerostatic void rt_hw_set_usb_clock(void) 49*10465441SEvalZero { 50*10465441SEvalZero /* set the clock */ 51*10465441SEvalZero *(RP)PMU_PUCR = 0x000c; 52*10465441SEvalZero /* trige configurate*/ 53*10465441SEvalZero *(RP)PMU_PMCR = 0x800c; 54*10465441SEvalZero 55*10465441SEvalZero } 56*10465441SEvalZero 57*10465441SEvalZero /** 58*10465441SEvalZero * @brief System Clock Configuration 59*10465441SEvalZero */ rt_hw_clock_init(void)60*10465441SEvalZerovoid rt_hw_clock_init(void) 61*10465441SEvalZero { 62*10465441SEvalZero /* set system clock */ 63*10465441SEvalZero rt_hw_set_system_clock(); 64*10465441SEvalZero /* set usb clock */ 65*10465441SEvalZero rt_hw_set_usb_clock(); 66*10465441SEvalZero } 67*10465441SEvalZero 68*10465441SEvalZero /** 69*10465441SEvalZero * @brief Get system clock 70*10465441SEvalZero */ rt_hw_get_clock(void)71*10465441SEvalZerort_uint32_t rt_hw_get_clock(void) 72*10465441SEvalZero { 73*10465441SEvalZero rt_uint32_t val; 74*10465441SEvalZero rt_uint8_t pv, pd, npd; 75*10465441SEvalZero 76*10465441SEvalZero /* get PMCR value */ 77*10465441SEvalZero val =*(RP) PMU_PMCR; 78*10465441SEvalZero /* get NPD */ 79*10465441SEvalZero npd = (val >> 14) & 0x01; 80*10465441SEvalZero /* get PD */ 81*10465441SEvalZero pd = (val >> 10) & 0x0f; 82*10465441SEvalZero /* get PV */ 83*10465441SEvalZero pv = val & 0x7f; 84*10465441SEvalZero /* caculate the system clock */ 85*10465441SEvalZero if(npd) 86*10465441SEvalZero val = 2 * CLK_IN * pv; 87*10465441SEvalZero else 88*10465441SEvalZero val = CLK_IN * pv / (pd + 1); 89*10465441SEvalZero 90*10465441SEvalZero return(val); 91*10465441SEvalZero } 92*10465441SEvalZero 93*10465441SEvalZero /** 94*10465441SEvalZero * @brief Enable module clock 95*10465441SEvalZero */ rt_hw_enable_module_clock(rt_uint8_t module)96*10465441SEvalZero void rt_hw_enable_module_clock(rt_uint8_t module) 97*10465441SEvalZero { 98*10465441SEvalZero 99*10465441SEvalZero } 100*10465441SEvalZero 101*10465441SEvalZero /** 102*10465441SEvalZero * @brief Disable module clock 103*10465441SEvalZero */ rt_hw_disable_module_clock(rt_uint8_t module)104*10465441SEvalZero void rt_hw_disable_module_clock(rt_uint8_t module) 105*10465441SEvalZero { 106*10465441SEvalZero 107*10465441SEvalZero } 108*10465441SEvalZero 109