sysSerial.c
上传用户:ske666
上传日期:2022-03-30
资源大小:371k
文件大小:4k
- /* sysSerial.c - HITSAT OMU board serial device initialization */
- /* Copyright 2004 HITSAT, Inc. */
- #include "copyright_wrs.h"
- /*
- DESCRIPTION
- This file contains the board-specific routines for serial channel
- initialization of the HITSAT OMU development board.
- */
- #include "vxWorks.h"
- #include "iv.h"
- #include "intLib.h"
- #include "config.h"
- #include "sysLib.h"
- #include "s3c2410xSio.c"
- /* device initialization structure */
- typedef struct
- {
- UINT vector;
- UINT32* baseAdrs;
- UINT intLevel;
- }SYS_s3c2410x_CHAN_PARAS;
- /* Local data structures */
- LOCAL SYS_s3c2410x_CHAN_PARAS devParas[] =
- {
- {INT_VEC_UART_0, (UINT32 *)UART_0_BASE_ADR, INT_LVL_UART_0},
- {INT_VEC_UART_1, (UINT32 *)UART_1_BASE_ADR, INT_LVL_UART_1}
- };
- LOCAL s3c2410x_CHAN s3c2410xChan[N_s3c2410x_UART_CHANNELS];
- /*
- * Array of pointers to all serial channels configured in system.
- * See sioChanGet(). It is this array that maps channel pointers
- * to standard device names. The first entry will become "/tyCo/0",
- * the second "/tyCo/1", and so forth.
- */
- SIO_CHAN* sysSioChans [] =
- {
- &s3c2410xChan[0].sio, /* /tyCo/0 */
- &s3c2410xChan[1].sio /* /tyCo/1 */
- };
- /* forward declarations */
- /*
- * sysSerialHwInit - initialize the BSP serial devices to a quiescent state
- *
- * This routine initializes the BSP serial device descriptors and puts the
- * devices in a quiesent state. It is called from sysHwInit() with
- * interrupts locked.
- *
- * RETURNS: N/A
- *
- * SEE ALSO: sysHwInit()
- */
- void sysSerialHwInit (void)
- {
- int i;
- for(i = 0; i < N_s3c2410x_UART_CHANNELS; i++)
- {
- s3c2410xChan[i].regs = devParas[i].baseAdrs;
- s3c2410xChan[i].baudRate = CONSOLE_BAUD_RATE;
- s3c2410xChan[i].xtal = UART_XTAL_FREQ;
- s3c2410xChan[i].intLevelRx = devParas[i].intLevel;
- s3c2410xChan[i].intLevelTx = devParas[i].intLevel;
- /*
- * Initialise driver functions, getTxChar, putRcvChar and channelMode
- * and initialise UART
- */
- s3c2410xSioDevInit(&s3c2410xChan[i]);
- }
- }
- /*
- * sysSerialHwInit2 - connect BSP serial device interrupts
- *
- * This routine connects the BSP serial device interrupts. It is called from
- * sysHwInit2(). Serial device interrupts could not be connected in
- * sysSerialHwInit() because the kernel memory allocator was not initialized
- * at that point, and intConnect() may call malloc().
- *
- * RETURNS: N/A
- *
- * SEE ALSO: sysHwInit2()
- */
- void sysSerialHwInit2 (void)
- {
- int i;
- for(i = 0; i < N_s3c2410x_UART_CHANNELS; i++)
- {
- /*
- * Connect and enable the interrupt.
- * We would like to check the return value from this and log a message
- * if it failed. However, logLib has not been initialised yet, so we
- * cannot log a message, so there's little point in checking it.
- */
- (void)intConnect(
- INUM_TO_IVEC(devParas[i].vector),
- s3c2410xSioInt,
- (int)&s3c2410xChan[i]
- );
- intEnable(devParas[i].intLevel);
- }
- }
- /*
- * sysSerialChanGet - get the SIO_CHAN device associated with a serial channel
- *
- * This routine returns a pointer to the SIO_CHAN device associated with
- * a specified serial channel. It is called by usrRoot() to obtain
- * pointers when creating the system serial devices '/tyCo/x'. It is also
- * used by the WDB agent to locate its serial channel.
- *
- * RETURNS: A pointer to the SIO_CHAN structure for the channel, or ERROR
- * if the channel is invalid.
- */
- SIO_CHAN* sysSerialChanGet
- (
- int channel /* serial channel */
- )
- {
- if(channel < 0 || channel >= (int)(NELEMENTS(sysSioChans)))
- {
- return (SIO_CHAN*)ERROR;
- }
- return sysSioChans[channel];
- }
- /*
- * sysSerialReset - reset the sio devices to a quiet state
- *
- * Reset all devices to prevent them from generating interrupts.
- *
- * This is called from sysToMonitor to shutdown the system gracefully before
- * transferring to the boot ROMs.
- *
- * RETURNS: N/A.
- */
- void sysSerialReset (void)
- {
- int i;
- for(i = 0; i < N_s3c2410x_UART_CHANNELS; i++)
- {
- /* disable serial interrupts */
- intDisable (devParas[i].intLevel);
- }
- }