time.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/arch/arm/mach-clps711x/time.c
  3.  *
  4.  *  Copyright (C) 2001 Deep Blue Solutions Ltd.
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  */
  19. #include <linux/sched.h>
  20. #include <linux/init.h>
  21. #include <asm/hardware.h>
  22. #include <asm/io.h>
  23. #include <asm/hardware/clps7111.h>
  24. extern unsigned long (*gettimeoffset)(void);
  25. /*
  26.  * gettimeoffset() returns time since last timer tick, in usecs.
  27.  *
  28.  * 'LATCH' is hwclock ticks (see CLOCK_TICK_RATE in timex.h) per jiffy.
  29.  * 'tick' is usecs per jiffy.
  30.  */
  31. static unsigned long clps711x_gettimeoffset(void)
  32. {
  33. unsigned long hwticks;
  34. hwticks = LATCH - (clps_readl(TC2D) & 0xffff); /* since last underflow */
  35. return (hwticks * tick) / LATCH;
  36. }
  37. void __init clps711x_setup_timer(void)
  38. {
  39. unsigned int syscon;
  40. gettimeoffset = clps711x_gettimeoffset;
  41. syscon = clps_readl(SYSCON1);
  42. syscon |= SYSCON1_TC2S | SYSCON1_TC2M;
  43. clps_writel(syscon, SYSCON1);
  44. clps_writel(LATCH-1, TC2D); /* 512kHz / 100Hz - 1 */
  45. xtime.tv_sec = clps_readl(RTCDR);
  46. }