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

VxWorks

开发平台:

C/C++

  1. /* shSciSio.h - header file for Hitachi SH on-chip SCI serial driver */
  2. /* Copyright 1996-2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01p,15feb01,hk   add #ifdef SCI_TYPE_SH7604 to adjust baud rate for SH7604.
  7. 01o,09nov00,csi  modification to optimize SMR  and BRR define
  8. 01n,30aug00,zl   added 30MHz PCLK support for SH7600
  9. 01m,20aug00,hk   merged SH7040 to SH7600.
  10. 01l,04aug00,rsh  Add frequency defines for sh7729
  11. 01k,31may00,frf  SH7751 for T2
  12. 01j,29dec98,hk   merged for SH7750,SH7729,SH7700,SH7600,SH7410,SH7040,SH7000.
  13. 01i,10aug98,jmb  add 57600 baud for Manta-DSP.
  14. 01h,09jul98,jmb  add support for Manta-SH3 frequencies.
  15. 01g,01jun98,jmb  added "options" to support SIO_HW_OPTS_GET.
  16. 01f,19may98,jmc  added support for SH-DSP and SH3-DSP.
  17. 01g,18sep98,hk   fixed SH7750 support for 33.33MHz PCLK.
  18. 01f,02jul98,st   added SH7750 support.
  19. 01e,14jan98,jmc  added baud rate table entries for 20/10/5MHz.
  20. 01d,25apr97,hk   changed SH704X to SH7040.
  21. 01c,21mar97,hk   added SCI_BAUD typedef. enhanced defs for smr and brr.
  22. 01b,10mar97,hk   renamed this header as shSciSio.h from shSio.h. changed 
  23.                  SH_CHAN to SCI_CHAN. deleted SH_DUSART. changed function
  24.                  prototype names to shSciXyz. changed definition layout.
  25. 01a,16dec96,kn   derived from templateSio.h
  26. */
  27. #ifndef __INCshSciSioh
  28. #define __INCshSciSioh
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32. #include "sioLib.h"
  33. /* device channel structure */
  34. typedef struct
  35.     {
  36.     /* always goes first */
  37.     SIO_DRV_FUNCS * pDrvFuncs; /* driver functions */
  38.     /* callbacks */
  39.     STATUS (*getTxChar) ();
  40.     STATUS (*putRcvChar) ();
  41.     void * getTxArg;
  42.     void * putRcvArg;
  43.     /* register addresses */
  44.     volatile UINT8 * smr; /* serial mode register */
  45.     volatile UINT8 * brr; /* bit rate register */
  46.     volatile UINT8 * scr; /* serial control register */
  47.     volatile UINT8 * tdr; /* transmit data register */
  48.     volatile UINT8 * ssr; /* serial status register */
  49.     volatile UINT8 * rdr; /* receive data register */
  50.     int mode; /* current mode (interrupt or poll) */
  51.     int baud; /* baud rate */
  52.     UINT             options;           /* data format */
  53.     } SCI_CHAN;
  54. /* entry structure for baud-rate table */
  55. typedef struct
  56.     {
  57.     int   rate; /* baud-rate to be set */
  58.     UINT8 cksVal; /* clock select bits for smr */
  59.     UINT8 brrVal; /* value to set in brr */
  60.     } SCI_BAUD;
  61. /* bit values for smr (serial mode register) */
  62. #define SCI_SMR_ASYNC 0x00 /* async mode */
  63. #define SCI_SMR_SYNC 0x80 /* synchronous mode */
  64. #define SCI_SMR_8_BITS 0x00 /* 8 bits data */
  65. #define SCI_SMR_7_BITS 0x40 /* 7 bits data */
  66. #define SCI_SMR_PAR_DIS 0x00 /* parity disable */
  67. #define SCI_SMR_PAR_EN 0x20 /* parity enable */
  68. #define SCI_SMR_PAR_EVEN 0x00 /* even parity */
  69. #define SCI_SMR_PAR_ODD 0x10 /* odd parity  */
  70. #define SCI_SMR_1_STOP 0x00 /* 1 stop bit */
  71. #define SCI_SMR_2_STOP 0x08 /* 2 stop bit */
  72. #define SCI_SMR_MP_DIS 0x00 /* multiprocessor format disable */
  73. #define SCI_SMR_MP_EN 0x04 /* multiprocessor format enable */
  74. #define SCI_SMR_CKS_MASK 0xfc /* mask for clock select bits */
  75. #ifdef SYS_PCLK_FREQ
  76. #  define SCI_FREQ SYS_PCLK_FREQ
  77. #else
  78. #  ifdef SCI_TYPE_SH7604
  79. #    define SCI_FREQ (SYS_CPU_FREQ / 4)
  80. #  else /* SH704x, SH705x */
  81. #    define SCI_FREQ SYS_CPU_FREQ
  82. #  endif
  83. #endif
  84. /*
  85.  * To calculate BRR value, the following formula used. 
  86.  *   BRR = (FREQ / (32 * 4^n) * BaudRate)) - 1 
  87.  *
  88.  * In the following macros are used
  89.  *    SMR_VALUE is n
  90.  *    CLK_DIVIDE(y) 4^n
  91.  *
  92.  * In the BRR_VALUE macro the extra mutiplication, division and addition 
  93.  * is used to get correct rounding.
  94.  */
  95. #define SMR_VALUE(x) (((SCI_FREQ/(64*32*(x))) >= 64) ? 3 :        
  96.    ((SCI_FREQ/(64*32*(x))) >= 16) ? 2 :        
  97.    ((SCI_FREQ/(64*32*(x))) >=  4) ? 1 : 0)
  98. #define CLK_DIVIDE(y) (((SCI_FREQ/(64*32*(y))) >= 64) ? 64 :       
  99.    ((SCI_FREQ/(64*32*(y))) >= 16) ? 16 :       
  100.    ((SCI_FREQ/(64*32*(y))) >=  4) ?  4 : 1)
  101. #define BRR_FORMULA(s) (((10*SCI_FREQ)/(32*CLK_DIVIDE(s)*(s))-5)/10)
  102. #define BRR_VALUE(z) ((BRR_FORMULA(z) > 255) ? 0 : BRR_FORMULA(z))
  103. #define SCI_SMR_CKS_50          SMR_VALUE(50)
  104. #define SCI_SMR_CKS_75          SMR_VALUE(75)
  105. #define SCI_SMR_CKS_110         SMR_VALUE(110)
  106. #define SCI_SMR_CKS_134         SMR_VALUE(134)
  107. #define SCI_SMR_CKS_150         SMR_VALUE(150)
  108. #define SCI_SMR_CKS_200         SMR_VALUE(200)
  109. #define SCI_SMR_CKS_300         SMR_VALUE(300)
  110. #define SCI_SMR_CKS_600         SMR_VALUE(600)
  111. #define SCI_SMR_CKS_1200        SMR_VALUE(1200)
  112. #define SCI_SMR_CKS_1800        SMR_VALUE(1800)
  113. #define SCI_SMR_CKS_2400        SMR_VALUE(2400)
  114. #define SCI_SMR_CKS_3600        SMR_VALUE(3600)
  115. #define SCI_SMR_CKS_4800        SMR_VALUE(4800)
  116. #define SCI_SMR_CKS_7200        SMR_VALUE(7200)
  117. #define SCI_SMR_CKS_9600        SMR_VALUE(9600)
  118. #define SCI_SMR_CKS_19200       SMR_VALUE(19200)
  119. #define SCI_SMR_CKS_31250       SMR_VALUE(31250)
  120. #define SCI_SMR_CKS_38400       SMR_VALUE(38400)
  121. #define SCI_SMR_CKS_57600       SMR_VALUE(57600)
  122. #define SCI_SMR_CKS_115200      SMR_VALUE(115200)
  123. #define SCI_SMR_CKS_500000      SMR_VALUE(500000)
  124. /* bit values for brr (bit rate register) */
  125. #define SCI_BRR_50       BRR_VALUE(50)
  126. #define SCI_BRR_75       BRR_VALUE(75)
  127. #define SCI_BRR_110      BRR_VALUE(110)
  128. #define SCI_BRR_134      BRR_VALUE(134)
  129. #define SCI_BRR_150      BRR_VALUE(150)
  130. #define SCI_BRR_200      BRR_VALUE(200)
  131. #define SCI_BRR_300    BRR_VALUE(300) 
  132. #define SCI_BRR_600    BRR_VALUE(600) 
  133. #define SCI_BRR_1200   BRR_VALUE(1200) 
  134. #define SCI_BRR_1800   BRR_VALUE(1800) 
  135. #define SCI_BRR_2400   BRR_VALUE(2400) 
  136. #define SCI_BRR_3600   BRR_VALUE(3600) 
  137. #define SCI_BRR_4800   BRR_VALUE(4800) 
  138. #define SCI_BRR_7200   BRR_VALUE(9600) 
  139. #define SCI_BRR_9600   BRR_VALUE(9600) 
  140. #define SCI_BRR_19200  BRR_VALUE(19200) 
  141. #define SCI_BRR_31250  BRR_VALUE(31250) 
  142. #define SCI_BRR_38400  BRR_VALUE(38400) 
  143. #define SCI_BRR_57600    BRR_VALUE(57600) 
  144. #define SCI_BRR_115200    BRR_VALUE(115200) 
  145. #define SCI_BRR_500000    BRR_VALUE(500000) 
  146. /* bit values for scr (serial control register) */
  147. #define SCI_SCR_TIE 0x80 /* transmit interrupt enable  */
  148. #define SCI_SCR_RIE 0x40 /* receive interrupt enable  */
  149. #define SCI_SCR_TXE 0x20 /* transmit enable */
  150. #define SCI_SCR_RXE 0x10 /* receive enable */
  151. #ifdef JMC_NEVER  /* JMC Can this be removed ! */
  152. #define SCI_SCR_MPIE 0x08 /* multiprocessor interrupt enable */
  153. #endif
  154. #define SCI_SCR_TEIE 0x04 /* transmit end interrupt enable */
  155. /* bit values for ssr (serial status register) */
  156. #define SCI_SSR_TDRE 0x80 /* transmit data register empty */
  157. #define SCI_SSR_RDRF 0x40 /* receive data register full */
  158. #define SCI_SSR_ORER 0x20 /* overrun error */
  159. #define SCI_SSR_FER 0x10 /* framing error */
  160. #define SCI_SSR_PER 0x08 /* parity error */
  161. #define SCI_SSR_TEND 0x04 /* transmit end */
  162. #ifdef JMC_NEVER /* JMC Can this be removed ! */
  163. #define SCI_SSR_MPB 0x02 /* multiprocessor bit */
  164. #define SCI_SSR_MPBT 0x01 /* multiprocessor bit transfer */
  165. #endif
  166. /* function prototypes */
  167. #if defined(__STDC__)
  168. extern void shSciDevInit (SCI_CHAN *pChan); 
  169. extern void shSciIntRcv (SCI_CHAN *pChan);
  170. extern void shSciIntTx (SCI_CHAN *pChan);
  171. extern void shSciIntErr (SCI_CHAN *pChan);
  172. #else /* __STDC__ */
  173. extern void shSciDevInit ();
  174. extern void shSciIntRcv ();
  175. extern void shSciIntTx ();
  176. extern void shSciIntErr ();
  177. #endif /* __STDC__ */
  178. #ifdef __cplusplus
  179. }
  180. #endif /* __cplusplus */
  181. #endif  /* __INCshSciSioh */