📄 sysserial.c
字号:
/****************************************************************************/
/* */
/* Filename : sysSerial.c */
/* */
/* Purpose. : This module provides the board specific routines required by */
/* the vxWorks OS for support. */
/* */
/****************************************************************************/
/*********************************/
/* */
/* Include files */
/* */
/*********************************/
#include "vxWorks.h"
#include "iv.h"
#include "intLib.h"
#include "config.h"
#include "sysLib.h"
#include "drv/sio/ppc860Sio.h"
#include "drv/multi/ppc860Cpm.h"
#include "hd860r3.h"
/*********************************/
/* */
/* Global data defined here */
/* */
/*********************************/
static PPC860SMC_CHAN ppcChn ;
/****************************************************************************/
/* */
/* Function : sysSerialHwInit( void ) */
/* */
/* Purpose. : Initialize the BSP serial devices to a quiet state. */
/* */
/* Returns. : N/A */
/* */
/* Notes... : Called from sysHwInit() */
/* */
/* Data Parameter Ram layout: */
/* */
/* +---------------------------+ */
/* | | DPRAM base (address = 0) */
/* | | */
/* | | */
/* | | */
/* +---------------------------+ */
/* | 8 bytes per descriptor | Tx Buffer Descriptor (0x2200) */
/* +---------------------------+ */
/* | | */
/* +---------------------------+ */
/* | 16 descriptors @ | Rx Buffer Descriptors (0x2210) */
/* | 8 bytes per descriptor | */
/* | | */
/* +---------------------------+ */
/* | | end Rx BDs (0x2290) */
/* | | */
/* | | */
/* +---------------------------+ */
/* | 80 bytes allowed | Tx Buffer (0x2300 + DPRAM base address) */
/* +---------------------------+ */
/* | one receive char/buffer | Rx Buffer (0x2380 + DPRAM base address) */
/* +---------------------------+ */
/* | | */
/* | | */
/* | | */
/* +---------------------------+ */
/* | 34 bytes of parameter info| SMC1 Parameter Area (0x1e80) */
/* | including Rx and Tx BD | */
/* | pointers, func codes | */
/* | etc... | */
/* +---------------------------+ */
/* */
/****************************************************************************/
void sysSerialHwInit( void )
{
/* */
/* intialize the chips device descriptors */
/* */
ppcChn.regBase = vxImmrGet() ; /* IMMR reg has base adr */
ppcChn.clockRate = SYS_CPU_FREQ ; /* CPU clock freq (Hz) */
ppcChn.bgrNum = 1 ; /* use BRG1 */
ppcChn.uart.smcNum = 1 ; /* SMC1 wired for rs232 */
ppcChn.uart.txBdNum = 1 ; /* use 1 transmit BD */
ppcChn.uart.rxBdNum = 0x10 ; /* use 16 receive BD */
ppcChn.uart.txBdBase = (SMC_BUF *) 0x2200 ; /* transmit BD base adrs */
ppcChn.uart.rxBdBase = (SMC_BUF *) 0x2210 ; /* receive BD base adrs */
ppcChn.uart.txBufSize = 0x1 ; /* transmit buffer size */
ppcChn.uart.txBufBase = (u_char *)
( MPC860_DPRAM_BASE( ppcChn.regBase ) + 0x300 ) ;
ppcChn.uart.rxBufBase = (u_char *)
( MPC860_DPRAM_BASE( ppcChn.regBase ) + 0x380 ) ;
ppcChn.uart.pSmc = (SMC *) ( (UINT32) /* DPRAM addr of SMC1 params */
PPC860_DPR_SMC1( MPC860_DPRAM_BASE( ppcChn.regBase ) ) ) ;
/* */
/* SMCMR1 for SMC1 */
/* */
ppcChn.uart.pSmcReg = (SMC_REG *) ( (UINT32) MPC860_SMCMR1( ppcChn.regBase ) ) ;
ppcChn.pBaud = (UINT32 *) MPC860_BRGC1(ppcChn.regBase) ;
ppcChn.channelMode = 0 ;
* MPC860_PBPAR( ppcChn.regBase ) = 0xC0 ; /* select RS232 pins */
* MPC860_SDCR ( ppcChn.regBase ) = 0x00004001;
/* */
/* reset the chip */
/* */
ppc860DevInit( &ppcChn ) ;
}
/****************************************************************************/
/* */
/* Function : sysSerialHwInit2( void ) */
/* */
/* Purpose. : Connects the BSP Serial device interrupts. */
/* */
/* */
/* */
/* */
/* Returns. : N/A */
/* */
/* Notes... : Called from sysHwInit2() */
/* */
/****************************************************************************/
void sysSerialHwInit2( void )
{
/* */
/* Connect serial interrupts */
/* */
(void) intConnect( IV_SMC1, (VOIDFUNCPTR) ppc860Int, (int) &ppcChn ) ;
* CIMR( vxImmrGet() ) |= CIMR_SMC1 ;
}
/****************************************************************************/
/* */
/* Function : sysSerialChanGet( int channnel ) */
/* */
/* Purpose. : Gets the SIO_CHAN device which is associated with the given */
/* serial channel. In this case only one exists. */
/* */
/* Returns. : Pointer to SIO_CHAN space for the device. */
/* */
/* Notes... : None */
/* */
/****************************************************************************/
SIO_CHAN * sysSerialChanGet
(
int channel /* serial channel */
)
{
/* */
/* Check the parameters for validity. */
/* */
if ( channel )
{
return( (SIO_CHAN *) ERROR ) ;
}
/* */
/* Return a pointer to the private space. */
/* */
return( (SIO_CHAN *) &ppcChn ) ;
}
/****************************************************************************/
/* */
/* Function : sysSerialReset( void ) */
/* */
/* Purpose. : Reset the serial device. */
/* */
/* Returns. : None */
/* */
/* Notes... : None */
/* */
/****************************************************************************/
void sysSerialReset( void )
{
sysSerialHwInit() ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -