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

📄 clock.c

📁 jz4730 北京群正出品
💻 C
字号:
/* * clock.c * * Detect PLL out clk frequency and implement a udelay routine. * * Author: Seeger Chin * e-mail: seeger.chin@gmail.com * * Copyright (C) 2006 Ingenic Semiconductor Inc. *  * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */#include <regs.h>#include <ops.h>#define EXTAL_CLK      12000000const static int FR2n[] = {	1, 2, 3, 4, 6, 8, 12, 16, 24, 32};static unsigned int iclk; void detect_clock(void){	unsigned int cfcr, plcr1, pllout;	cfcr = REG_CPM_CFCR;	plcr1 = REG_CPM_PLCR1;	pllout = ((((plcr1 & CPM_PLCR1_PLL1FD_MASK) >> CPM_PLCR1_PLL1FD_BIT) + 2) * EXTAL_CLK) / (((plcr1 & CPM_PLCR1_PLL1RD_MASK) >> CPM_PLCR1_PLL1RD_BIT) + 2);	iclk = pllout / FR2n[(cfcr & CPM_CFCR_IFR_MASK) >> CPM_CFCR_IFR_BIT];}void udelay(unsigned int usec){	unsigned int i = usec * (iclk / 2000000);	__asm__ __volatile__ (		"\t.set noreorder\n"		"1:\n\t"		"bne\t%0, $0, 1b\n\t"		"addi\t%0, %0, -1\n\t"		".set reorder\n"		: "=r" (i)		: "0" (i)	);}

⌨️ 快捷键说明

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