i8254.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:5k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* i8254.h - intel 8254 timer header */
  2. /*
  3. modification history
  4. --------------------
  5. 01h,25sep98,cdp  added ARM support.
  6. 01g,24feb97,bjl  moved #if CPU_FAMILY==MIPS after #ifdef __cplusplus
  7.  removed first #endif INCi8254h 
  8.  added #endif CPU_FAMILY==MIPS 
  9. 01f,22sep92,rrr  added support for c++
  10. 01e,26may92,rrr  the tree shuffle
  11. 01d,28oct91,wmd  added #pragmas as defined by Intel.
  12. 01c,04oct91,rrr  passed through the ansification filter
  13.   -fixed #else and #endif
  14.   -changed ASMLANGUAGE to _ASMLANGUAGE
  15.   -changed copyright notice
  16. 01b,20apr90,ajm  merged in MIPS BSP version for now, must resolve later.
  17. 01a,20aug91,del  installed.
  18. */
  19. #ifndef __INCi8254h
  20. #define __INCi8254h
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. #if (CPU_FAMILY == MIPS) || (CPU_FAMILY == ARM)
  25. /*
  26. * INTERNAL
  27. * On some BSPs, the output of counter2 drives the input to counters 0
  28. * and 1.  This mandates setup of counter2 before counters 0 and 1 can be
  29. * programmed.  On hkv3500, counter 2's input is being driven at 3.6864Mhz
  30. * by the STAR card.
  31. */
  32. #define PAD 3
  33. #ifndef _ASMLANGUAGE
  34. typedef struct {
  35. unsigned char counter0;unsigned char pad0[PAD];/* counter 0  */
  36. unsigned char counter1;unsigned char pad1[PAD];/* counter 1  */
  37. unsigned char counter2;unsigned char pad2[PAD];/* counter 2  */
  38. unsigned char cntrl_word;unsigned char pad3[PAD];/* control word */
  39. }TIMER;
  40. #endif /* _ASMLANGUAGE */
  41. /*
  42. * control word definitions
  43. */
  44. #define CW_BCDMD 0x1 /* operate in BCD mode */
  45. #define CW_COUNTLCH 0x00 /* counter latch command */
  46. #define CW_LSBYTE 0x10 /* r/w least signif. byte only */
  47. #define CW_MSBYTE 0x20 /* r/w most signif. byte only */
  48. #define CW_BOTHBYTE 0x30 /* r/w 16 bits, lsb then msb */
  49. #define CW_READBK 0xc0 /* read-back command */
  50. #define CW_MODE(x) ((x)<<1) /* set mode to x */
  51. #define CW_SELECT(x) ((x)<<6) /* select counter x */
  52. /*
  53. * Mode defs
  54. */
  55. #define MD_TERMCOUNT 0x0 /* interrupt on terminal count */
  56. #define MD_HWONESHOT 0x1 /* hw retriggerable one shot */
  57. #define MD_RATEGEN 0x2 /* rate generator */
  58. #define MD_SQUAREWV 0x3 /* square wave generator */
  59. #define MD_SWTRIGSB 0x4 /* software triggered strobe */
  60. #define MD_HWTRIGSB 0x5 /* hardware triggered strobe */
  61. #else /* CPU_FAMILY==MIPS */
  62. /******************************************************************/
  63. /*  Copyright (c) 1989, Intel Corporation
  64.    Intel hereby grants you permission to copy, modify, and
  65.    distribute this software and its documentation.  Intel grants
  66.    this permission provided that the above copyright notice
  67.    appears in all copies and that both the copyright notice and
  68.    this permission notice appear in supporting documentation.  In
  69.    addition, Intel grants this permission provided that you
  70.    prominently mark as not part of the original any modifications
  71.    made to this software or documentation, and that the name of
  72.    Intel Corporation not be used in advertising or publicity
  73.    pertaining to distribution of the software or the documentation
  74.    without specific, written prior permission.
  75.    Intel Corporation does not warrant, guarantee or make any
  76.    representations regarding the use of, or the results of the use
  77.    of, the software and documentation in terms of correctness,
  78.    accuracy, reliability, currentness, or otherwise; and you rely
  79.    on the software, documentation and results solely at your own
  80.    risk.   */
  81. /******************************************************************/
  82. /*-------------------------------------------------------------*/
  83. /*
  84.  * i8254.h header for 82c54-2 timer/counter
  85.  *
  86.  */
  87. /*-------------------------------------------------------------*/
  88. #if CPU_FAMILY == I960
  89. #pragma align 1
  90. #endif
  91. typedef volatile struct
  92.     {
  93.     unsigned char counter_0;
  94.     unsigned char counter_1;
  95.     unsigned char counter_2;
  96.     unsigned char control_word;
  97.     } I82C54;
  98. #if CPU_FAMILY == I960
  99. #pragma align 0
  100. #endif
  101. /* Control Word Format */
  102. #define SC(sc) ((sc)<<6)
  103. #define RW(rw) ((rw)<<4)
  104. #define MODE(m) ((m)<<1)
  105. #define BCD (1)
  106. /* Control Words */
  107. #define SEL_CNT_0 0x00
  108. #define SEL_CNT_1 0x40
  109. #define SEL_CNT_2 0x80
  110. #define READ_BACK 0xc0
  111. #define READ_BACK_0 0xc2
  112. #define READ_BACK_1 0xc4
  113. #define READ_BACK_2 0xc8
  114. #define RW_LATCH 0x00
  115. #define RW_LO_BYTE 0x10
  116. #define RW_HI_BYTE 0x20
  117. #define RW_HI_LO_BYTES 0x30
  118. #define WRT_CNT_0_LO (SEL_CNT_0 | RW_LO_BYTE)
  119. #define WRT_CNT_1_LO (SEL_CNT_1 | RW_LO_BYTE)
  120. #define WRT_CNT_2_LO (SEL_CNT_2 | RW_LO_BYTE)
  121. #define WRT_CNT_0_HI (SEL_CNT_0 | RW_HI_BYTE)
  122. #define WRT_CNT_1_HI (SEL_CNT_1 | RW_HI_BYTE)
  123. #define WRT_CNT_2_HI (SEL_CNT_2 | RW_HI_BYTE)
  124. #define WRT_CNT_0_HI_LO (SEL_CNT_0 | RW_HI_LO_BYTES)
  125. #define WRT_CNT_1_HI_LO (SEL_CNT_1 | RW_HI_LO_BYTES)
  126. #define WRT_CNT_2_HI_LO (SEL_CNT_2 | RW_HI_LO_BYTES)
  127. /* Readback Commands */
  128. #define READBACK     (3<<6)
  129. #define LATCH_COUNT  (1<<4)
  130. #define LATCH_STATUS (1<<5)
  131. #define CNT_0        (1<<1)
  132. #define CNT_1        (1<<2)
  133. #define CNT_2        (1<<3)
  134. /* Status Bits */
  135. #define OUTPUT_BIT      (1<<7)
  136. #define NULL_COUNT_BIT  (1<<6)
  137. #define RW1_BIT         (1<<5)
  138. #define RW0_BIT         (1<<4)
  139. #define M2_BIT          (1<<3)
  140. #define M1_BIT          (1<<2)
  141. #define M0_BIT          (1<<1)
  142. #define BCD_BIT         (1<<0)
  143. #endif /* CPU_FAMILY==MIPS */
  144. #ifdef __cplusplus
  145. }
  146. #endif
  147. #endif /* __INCi8254h */