📄 clock.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 + -