sysSerial.c
上传用户:ske666
上传日期:2022-03-30
资源大小:371k
文件大小:4k
源码类别:

VxWorks

开发平台:

Objective-C

  1. /* sysSerial.c - HITSAT OMU board serial device initialization */
  2. /* Copyright 2004 HITSAT, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. DESCRIPTION
  6. This file contains the board-specific routines for serial channel
  7. initialization of the HITSAT OMU development board.
  8. */
  9. #include "vxWorks.h"
  10. #include "iv.h"
  11. #include "intLib.h"
  12. #include "config.h"
  13. #include "sysLib.h"
  14. #include "s3c2410xSio.c"
  15. /* device initialization structure */
  16. typedef struct
  17. {
  18. UINT vector;
  19. UINT32* baseAdrs;
  20. UINT intLevel;
  21. }SYS_s3c2410x_CHAN_PARAS;
  22. /* Local data structures */
  23. LOCAL SYS_s3c2410x_CHAN_PARAS devParas[] =
  24. {
  25. {INT_VEC_UART_0, (UINT32 *)UART_0_BASE_ADR, INT_LVL_UART_0},
  26. {INT_VEC_UART_1, (UINT32 *)UART_1_BASE_ADR, INT_LVL_UART_1}
  27. };
  28. LOCAL s3c2410x_CHAN s3c2410xChan[N_s3c2410x_UART_CHANNELS];
  29. /*
  30.  * Array of pointers to all serial channels configured in system.
  31.  * See sioChanGet(). It is this array that maps channel pointers
  32.  * to standard device names.  The first entry will become "/tyCo/0",
  33.  * the second "/tyCo/1", and so forth.
  34.  */
  35. SIO_CHAN* sysSioChans [] =
  36. {
  37. &s3c2410xChan[0].sio, /* /tyCo/0 */
  38. &s3c2410xChan[1].sio /* /tyCo/1 */
  39. };
  40. /* forward declarations */
  41. /*
  42.  * sysSerialHwInit - initialize the BSP serial devices to a quiescent state
  43.  *
  44.  * This routine initializes the BSP serial device descriptors and puts the
  45.  * devices in a quiesent state.  It is called from sysHwInit() with
  46.  * interrupts locked.
  47.  *
  48.  * RETURNS: N/A
  49.  *
  50.  * SEE ALSO: sysHwInit()
  51.  */
  52. void sysSerialHwInit (void)
  53. {
  54. int i;
  55. for(i = 0; i < N_s3c2410x_UART_CHANNELS; i++)
  56. {
  57. s3c2410xChan[i].regs = devParas[i].baseAdrs;
  58. s3c2410xChan[i].baudRate = CONSOLE_BAUD_RATE;
  59. s3c2410xChan[i].xtal = UART_XTAL_FREQ;
  60. s3c2410xChan[i].intLevelRx = devParas[i].intLevel;
  61. s3c2410xChan[i].intLevelTx = devParas[i].intLevel;
  62. /*
  63.  * Initialise driver functions, getTxChar, putRcvChar and channelMode
  64.  * and initialise UART
  65.  */
  66. s3c2410xSioDevInit(&s3c2410xChan[i]);
  67. }
  68. }
  69. /*
  70.  * sysSerialHwInit2 - connect BSP serial device interrupts
  71.  *
  72.  * This routine connects the BSP serial device interrupts.  It is called from
  73.  * sysHwInit2().  Serial device interrupts could not be connected in
  74.  * sysSerialHwInit() because the kernel memory allocator was not initialized
  75.  * at that point, and intConnect() may call malloc().
  76.  *
  77.  * RETURNS: N/A
  78.  *
  79.  * SEE ALSO: sysHwInit2()
  80.  */
  81. void sysSerialHwInit2 (void)
  82. {
  83. int i;
  84. for(i = 0; i < N_s3c2410x_UART_CHANNELS; i++)
  85. {
  86. /*
  87.  * Connect and enable the interrupt.
  88.  * We would like to check the return value from this and log a message
  89.  * if it failed. However, logLib has not been initialised yet, so we
  90.  * cannot log a message, so there's little point in checking it.
  91.  */
  92. (void)intConnect(
  93. INUM_TO_IVEC(devParas[i].vector),
  94. s3c2410xSioInt,
  95. (int)&s3c2410xChan[i]
  96. );
  97. intEnable(devParas[i].intLevel);
  98. }
  99. }
  100. /*
  101.  * sysSerialChanGet - get the SIO_CHAN device associated with a serial channel
  102.  *
  103.  * This routine returns a pointer to the SIO_CHAN device associated with
  104.  * a specified serial channel.  It is called by usrRoot() to obtain
  105.  * pointers when creating the system serial devices '/tyCo/x'.  It is also
  106.  * used by the WDB agent to locate its serial channel.
  107.  *
  108.  * RETURNS: A pointer to the SIO_CHAN structure for the channel, or ERROR
  109.  * if the channel is invalid.
  110.  */
  111. SIO_CHAN* sysSerialChanGet
  112. (
  113. int channel         /* serial channel */
  114. )
  115. {
  116. if(channel < 0 || channel >= (int)(NELEMENTS(sysSioChans)))
  117. {
  118. return (SIO_CHAN*)ERROR;
  119. }
  120. return sysSioChans[channel];
  121. }
  122. /*
  123.  * sysSerialReset - reset the sio devices to a quiet state
  124.  *
  125.  * Reset all devices to prevent them from generating interrupts.
  126.  *
  127.  * This is called from sysToMonitor to shutdown the system gracefully before
  128.  * transferring to the boot ROMs.
  129.  *
  130.  * RETURNS: N/A.
  131.  */
  132. void sysSerialReset (void)
  133. {
  134. int i;
  135. for(i = 0; i < N_s3c2410x_UART_CHANNELS; i++)
  136. {
  137. /* disable serial interrupts */
  138. intDisable (devParas[i].intLevel);
  139. }
  140. }