⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu.c

📁 ucos系统中键盘及LED驱动实验.
💻 C
字号:
/***************************************************************************\
	Copyright (c) 2004-2007 threewater@up-tech.com, All rights reserved.
	by threewter	2005.2.24
\***************************************************************************/
	

/***************************************************************************\
    #说明: s3c2410 cpu 时钟驱动
	----------------------------------  Bug  --------------------------------------

	----------------------------------  TODO list  --------------------------------------

	----------------------------------修正--------------------------------------
	2005-2-24	创建

\***************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

#include "../inc/reg2410.h"
//#include "../inc/drv/serial.h"
//#include "../inc/sys/io.h"
#include "../inc/lib.h"

/* Externl clock frequency used by CPU */
#define FIN	12000000

static __inline unsigned long
cal_bus_clk(unsigned long cpu_clk, unsigned long ratio, int who)
{
	if (!who) {	/* PCLK */
		switch (ratio) {
			case 0:
				return (cpu_clk);
			case 1:
			case 2:
				return (cpu_clk/2);
			case 3:
				return (cpu_clk/4);
			default:
				return 0;
		}
	} else {	/* HCLK */
		switch (ratio) {
			case 0:
			case 1:
				return (cpu_clk);
			case 2:
			case 3:
				return (cpu_clk/2);
			default:
				return 0;
		}
	}
}


/*
 * cpu clock = (((mdiv + 8) * FIN) / ((pdiv + 2) * (1 << sdiv)))
 *  FIN = Input Frequency (to CPU)
 */
unsigned long s3c2410_get_cpu_clk(void)
{
	unsigned long val = rMPLLCON;
	return (((GET_MDIV(val) + 8) * FIN) / \
		((GET_PDIV(val) + 2) * (1 << GET_SDIV(val))));
}

unsigned long s3c2410_get_bus_clk(int who)
{
	unsigned long cpu_clk = s3c2410_get_cpu_clk();
	unsigned long ratio = rCLKDIVN;
	return (cal_bus_clk(cpu_clk, ratio, who));
}

#define MEGA	(1000 * 1000)
int s3c2410_cpu_init(void)
{
	FCLK = s3c2410_get_cpu_clk();
	HCLK = s3c2410_get_bus_clk(GET_HCLK);
	PCLK = s3c2410_get_bus_clk(GET_PCLK);

	printk("CPU clock = %d.%03d Mhz,", FCLK / MEGA, FCLK % MEGA);
	printk(" HCLK = %d.%03d Mhz,", HCLK / MEGA, HCLK % MEGA);
	printk(" PCLK = %d.%03d Mhz\n", PCLK / MEGA, PCLK % MEGA);

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -