time.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * linux/include/asm-arm/arch-l7200/time.h
  3.  *
  4.  * Copyright (C) 2000 Rob Scott (rscott@mtrob.fdns.net)
  5.  *                    Steve Hill (sjhill@cotw.com)
  6.  *
  7.  * Changelog:
  8.  *   01-02-2000 RS Created l7200 version, derived from rpc code
  9.  *   05-03-2000 SJH Complete rewrite
  10.  */
  11. #ifndef _ASM_ARCH_TIME_H
  12. #define _ASM_ARCH_TIME_H
  13. #include <asm/arch/irqs.h>
  14. /*
  15.  * RTC base register address
  16.  */
  17. #define RTC_BASE (IO_BASE_2 + 0x2000)
  18. /*
  19.  * RTC registers
  20.  */
  21. #define RTC_RTCDR (*(volatile unsigned char *) (RTC_BASE + 0x000))
  22. #define RTC_RTCMR (*(volatile unsigned char *) (RTC_BASE + 0x004))
  23. #define RTC_RTCS (*(volatile unsigned char *) (RTC_BASE + 0x008))
  24. #define RTC_RTCC (*(volatile unsigned char *) (RTC_BASE + 0x008))
  25. #define RTC_RTCDV (*(volatile unsigned char *) (RTC_BASE + 0x00c))
  26. #define RTC_RTCCR (*(volatile unsigned char *) (RTC_BASE + 0x010))
  27. /*
  28.  * RTCCR register values
  29.  */
  30. #define RTC_RATE_32 0x00      /* 32 Hz tick */
  31. #define RTC_RATE_64 0x10      /* 64 Hz tick */
  32. #define RTC_RATE_128 0x20      /* 128 Hz tick */
  33. #define RTC_RATE_256 0x30      /* 256 Hz tick */
  34. #define RTC_EN_ALARM 0x01      /* Enable alarm */
  35. #define RTC_EN_TIC 0x04      /* Enable counter */
  36. #define RTC_EN_STWDOG 0x08      /* Enable watchdog */
  37. /*
  38.  * Handler for RTC timer interrupt
  39.  */
  40. static irqreturn_t
  41. timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
  42. {
  43. do_timer(regs);
  44. #ifndef CONFIG_SMP
  45. update_process_times(user_mode(regs));
  46. #endif
  47. do_profile(regs);
  48. RTC_RTCC = 0; /* Clear interrupt */
  49. return IRQ_HANDLED;
  50. }
  51. /*
  52.  * Set up RTC timer interrupt, and return the current time in seconds.
  53.  */
  54. void __init time_init(void)
  55. {
  56. RTC_RTCC = 0; /* Clear interrupt */
  57. timer_irq.handler = timer_interrupt;
  58. setup_irq(IRQ_RTC_TICK, &timer_irq);
  59. RTC_RTCCR = RTC_RATE_128 | RTC_EN_TIC; /* Set rate and enable timer */
  60. }
  61. #endif