clock.c

来自「jz4730 北京群正出品」· C语言 代码 · 共 52 行

C
52
字号
/* * 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 + =
减小字号Ctrl + -
显示快捷键?