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

VxWorks

开发平台:

C/C++

  1. /* sysSerial.c - IXP425 UART bsp serial device initialization */
  2. /* Copyright 2002 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01a,05jun02,jb  initial version...
  8. */
  9. /*
  10. DESCRIPTION
  11. Serial initialisation routines.
  12. */
  13. #include "vxWorks.h"
  14. #include "iv.h"
  15. #include "intLib.h"
  16. #include "config.h"
  17. #include "sysLib.h"
  18. #include "ixp425.h"
  19. #include "ixp425Sio.h"
  20. #include "ixp425Sio.c"
  21. /* 
  22.  * UART2 should not be used as a very low level debug port therefore only enable it
  23.  * if debug support is turned off.
  24.  */
  25. #ifdef INCLUDE_UART2_SUPPORT
  26.    #ifdef INCLUDE_IXP425_UART_DEBUG
  27.       #undef INCLUDE_UART2_SUPPORT
  28.    #endif
  29. #endif /* INCLUDE_UART2_SUPPORT */
  30. /* local data */
  31. static IXP425_SIO_CHAN ixp425Chan[IXP425_NUM_UARTS];
  32. /******************************************************************************
  33. *
  34. * sysSerialHwInit - initialize the BSP serial devices to a quiesent state
  35. *
  36. * This routine initializes the BSP serial device descriptors and puts the
  37. * devices in a quiesent state.  It is called from sysHwInit() with
  38. * interrupts locked.
  39. *
  40. * RETURNS: N/A
  41. */
  42. void sysSerialHwInit (void)
  43.     {
  44.     /* intialize the chips device descriptors */
  45. #ifdef INCLUDE_UART1_SUPPORT
  46.      ixp425Chan[0].regs = (UINT8 *)IXP425_UART1_BASE;
  47.      ixp425Chan[0].level = INT_VEC_UART1;
  48.      ixp425Chan[0].regDelta = IXP425_UART_REG_DELTA;
  49.      ixp425Chan[0].xtal = IXP425_UART_XTAL;
  50.      ixp425Chan[0].baudRate = UART_DEFAULT_BAUD;
  51.      ixp425Chan[0].options = 0;
  52. #endif
  53. #ifdef INCLUDE_UART2_SUPPORT
  54.      ixp425Chan[1].regs = (UINT8 *)IXP425_UART2_BASE;
  55.      ixp425Chan[1].level = INT_VEC_UART2;
  56.      ixp425Chan[1].regDelta = IXP425_UART_REG_DELTA;
  57.      ixp425Chan[1].xtal = IXP425_UART_XTAL;
  58.      ixp425Chan[1].baudRate = UART_DEFAULT_BAUD;
  59.      ixp425Chan[1].options = 0;
  60. #endif
  61.      /* reset the chips */
  62. #ifdef INCLUDE_UART1_SUPPORT
  63.      ixp425SioDevInit (&ixp425Chan[0]);
  64. #endif
  65. #ifdef INCLUDE_UART2_SUPPORT
  66.      ixp425SioDevInit (&ixp425Chan[1]);
  67. #endif
  68.     }
  69. /******************************************************************************
  70. *
  71. * sysSerialHwInit2 - connect BSP serial device interrupts
  72. *
  73. * This routine connects the BSP serial device interrupts.  It is called from
  74. * sysHwInit2().  Serial device interrupts could not be connected in
  75. * sysSerialHwInit() because the kernel memory allocator was not initialized
  76. * at that point, and intConnect() calls malloc().
  77. *
  78. * RETURNS: N/A
  79. */
  80. void sysSerialHwInit2 (void)
  81.     {
  82.     /* now connect the serial device interrupts */
  83. #ifdef INCLUDE_UART1_SUPPORT
  84.     (void) intConnect ((VOIDFUNCPTR *)((UINT32)ixp425Chan[0].level),
  85.                        (VOIDFUNCPTR) ixp425SioInt, (int)&ixp425Chan[0]);
  86. #endif
  87. #ifdef INCLUDE_UART2_SUPPORT
  88.     (void) intConnect ((VOIDFUNCPTR *)((UINT32)ixp425Chan[1].level),
  89.                        (VOIDFUNCPTR) ixp425SioInt, (int)&ixp425Chan[1]);
  90. #endif
  91. #ifdef INCLUDE_UART1_SUPPORT
  92.     /* Enable the UART interrupt */
  93.     intEnable (ixp425Chan[0].level);
  94. #endif
  95. #ifdef INCLUDE_UART2_SUPPORT
  96.     intEnable (ixp425Chan[1].level);
  97. #endif
  98.     }
  99. /******************************************************************************
  100. *
  101. * sysSerialChanGet - get the SIO_CHAN device associated with a serial channel
  102. *
  103. * This routine gets the SIO_CHAN device associated with a specified serial
  104. * channel.
  105. *
  106. * RETURNS: A pointer to the SIO_CHAN structure for the channel, or ERROR
  107. * if the channel is invalid.
  108. */
  109. SIO_CHAN * sysSerialChanGet
  110.     (
  111.     int channel
  112.     )
  113.     {
  114.     switch (channel)
  115. {
  116. #ifdef INCLUDE_UART1_SUPPORT
  117. case 0:
  118.     return ((SIO_CHAN *)&ixp425Chan[0]);
  119. #endif
  120. #ifdef INCLUDE_UART2_SUPPORT
  121. case 1:
  122.     return ((SIO_CHAN *)&ixp425Chan[1]);
  123. #endif
  124. default:
  125.     return ((SIO_CHAN *)ERROR);
  126. }
  127.     }
  128. /******************************************************************************
  129. *
  130. * sysSerialReset - reset the sio devices to a quiet state
  131. *
  132. * Reset all devices to prevent them from generating interrupts.
  133. *
  134. * This is called from sysToMonitor() to shutdown the system gracefully
  135. * before transferring control to the boot ROM.
  136. *
  137. * RETURNS: N/A.
  138. */
  139. void sysSerialReset (void)
  140.     {
  141.     /* Disable the UART interrupt */
  142. #ifdef INCLUDE_UART1_SUPPORT
  143.     intDisable (ixp425Chan[0].level);
  144. #endif
  145. #ifdef INCLUDE_UART2_SUPPORT
  146.     intDisable (ixp425Chan[1].level);
  147. #endif
  148.     }
  149. /******************************************************************************
  150. *
  151. * sysSerialShow - display serial statistics
  152. *
  153. * RETURNS: N/A.
  154. */
  155. void sysSerialShow ()
  156.     {
  157.     int i=0;
  158.     for (i=0; i<IXP425_NUM_UARTS; i++)
  159. {
  160. printf("nChannel (%d):", i);
  161. ixp425SioStatsShow(&ixp425Chan[i]);
  162. }
  163.     }