📄 sysserial.c
字号:
/* sysSerial.c - MagicARM2410 board serial device initialization */#include "copyright_wrs.h"#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);*/s3c2410xIntLvlEnable(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); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -