⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysserial.c

📁 基于如何开发MPC860处理器系统的核心业务模块QMC的开发程序
💻 C
字号:
/* sysSerial.c -  MPC860 SMC UART BSP serial device initialization *//* Copyright 1984-1998 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01g,19feb99,cn   fixed mangen error.01f,28jan99,cn   Added support for the second SMC channel (SPR# 10005).01e,08may98,gls  Added clearing of serial interrupts to sysSerialHwInit01d,06nov96,tpr  replaced SYS_CPU_FREQ by BRGCLK_FREQ.01c,20jun96,tpr  added sysSerialReset().01b,28may96,dzb  tweaked setting of portB registers.01a,19apr86,cah  created*//*The sysSerial.c file is normally included as part of the sysLib.c file.This code segment configures the serial ports for the BSP.This BSP can support up to two SMC channels in UART mode only.*/ #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 "860sar.h"#include "mpc860p.h"/*#include "ppc860scc.c"*//* defines *//* Local data structures */ /*static UINT8	chanNum = NUM_TTY;	*//* number of channels actually used */static PPC860SMC_CHAN	ppc860Chan;/*static PPC860SCC_CHAN   ppc860SccChan;*//*extern int immrVal;*//******************************************************************************** sysSerialHwInit - initialize the BSP serial devices to a quiesent 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*/void sysSerialHwInit (void){	int immrVal = vxImmrGet();	/**************** SMC1 serial port ******************/	/* BRGCLK freq (Hz) */	ppc860Chan.clockRate = BRGCLK_FREQ;	/* IMMR reg has base adr */	ppc860Chan.regBase = immrVal;	/* use BRG1 for channel 1 */		ppc860Chan.bgrNum  =  3;	/* SMC1 wired for rs232 */	ppc860Chan.uart.smcNum    = 1;	/* init the number of TBDs */	ppc860Chan.uart.txBdNum   = UART_TBD_NUM;	/* init the number of RBDs */	ppc860Chan.uart.rxBdNum   = UART_RBD_NUM;	/* transmit BD base adrs */	ppc860Chan.uart.txBdBase  = (SMC_BUF *) (MPC860_REGB_OFFSET + 					 			SMC1_TBD_OFF);	/* receive BD base adrs */	ppc860Chan.uart.rxBdBase  = (SMC_BUF *) (MPC860_REGB_OFFSET + 					  SMC1_RBD_OFF);	/* tx buf base */	ppc860Chan.uart.txBufBase = (u_char *) (MPC860_DPRAM_BASE (immrVal)					 + SMC1_TX_BUF_OFF);	/* rx buf base */	ppc860Chan.uart.rxBufBase = (u_char *) (MPC860_DPRAM_BASE (immrVal)					 + SMC1_RX_BUF_OFF);	/* transmit buffer size */	ppc860Chan.uart.txBufSize = UART_TX_BUF_SZ;	/* DPRAM addr of SMC1 params */	ppc860Chan.uart.pSmc = (SMC *) ((UINT32) PPC860_DPR_SMC1 					    (MPC860_DPRAM_BASE (immrVal)));	/* SMCMR1 for SMC1 */	ppc860Chan.uart.pSmcReg = (SMC_REG *)				       ((UINT32) MPC860_SMCMR1 (immrVal));	/* Mask interrupt */	ppc860Chan.uart.pSmcReg->smcm = 0x00;	ppc860Chan.pBaud = (UINT32 *) ((UINT32) MPC860_BRGC3 (immrVal));	ppc860Chan.channelMode = 0;	/* select rs232 pins */	*MPC860_PBPAR(immrVal) |= 0x000000c0;  	/******************* SCC3 for serial port ****************/		/* BRGCLK freq (Hz) *//*	ppc860SccChan.clockRate = BRGCLK_FREQ;	ppc860SccChan.regBase = immrVal;*/	/* use BRG2 for channel 2 *//*	ppc860SccChan.bgrNum = 2;*/		/* SCC3 wired for rs232 *//*    ppc860SccChan.uart.sccNum = 3;*/	/* init the number of TBDs *//*	ppc860SccChan.uart.txBdNum = UART_TBD_NUM;*/	/* init the number of RBDs *//*    ppc860SccChan.uart.rxBdNum = UART_RBD_NUM;*/	/* transmit BD base adrs *//*	ppc860SccChan.uart.txBdBase = (SCC_BUF *) (MPC860_REGB_OFFSET +								SCC3_TBD_OFF);*/	/* receive BD base adrs *//*	ppc860SccChan.uart.rxBdBase  = (SCC_BUF *) (MPC860_REGB_OFFSET + 					  SCC3_RBD_OFF);*/	/* tx buf base *//*	ppc860SccChan.uart.txBufBase = (u_char *) (MPC860_DPRAM_BASE (immrVal)					 + SCC3_TX_BUF_OFF);*/	/* rx buf base *//*	ppc860SccChan.uart.rxBufBase = (u_char *) (MPC860_DPRAM_BASE (immrVal)					 + SCC3_RX_BUF_OFF);*/	/* transmit buffer size *//*	ppc860SccChan.uart.txBufSize = UART_TX_BUF_SZ;*/	/* DPRAM addr of SCC3 params *//*	ppc860SccChan.uart.pScc = (SCC *) ((UINT32) PPC860_DPR_SCC3 					    (MPC860_DPRAM_BASE (immrVal)));	 GSMR_L3 for SCC3 *//*	ppc860SccChan.uart.pSccReg = (SCC_REG *)						((UINT32)MPC860_GSMR_L3(immrVal));*/	/* Mask interrupts *//*	ppc860SccChan.uart.pSccReg->sccm = 0x0000;	ppc860SccChan.pBaud = (UINT32 *)((UINT32) MPC860_BRGC2(immrVal));	ppc860SccChan.channelMode = 0;*/	/* select RS232 pins *//*	*MPC860_PDPAR(immrVal) |= 0x0030;*/		/* set it to normal operations */	*MPC860_SDCR(immrVal) = SDCR_RAID_BR5;	/* reset the chip */	ppc860DevInit(&(ppc860Chan));/*	ppc860SccDevInit(&(ppc860SccChan));*/      }/******************************************************************************** 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() calls malloc().** RETURNS: N/A*/ void sysSerialHwInit2 (void)    {   	(void) intConnect (IV_SMC1, (VOIDFUNCPTR) ppc860Int, 				   (int) &ppc860Chan);/*	(void) intConnect (IV_SCC3, (VOIDFUNCPTR) ppc860SccInt, 				   (int) &ppc860SccChan);*/		*CIMR(vxImmrGet()) |= CIMR_SMC1;/* | CIMR_SCC3;*/    }/******************************************************************************** sysSerialChanGet - get the SIO_CHAN device associated with a serial channel** This routine gets the SIO_CHAN device associated with a specified 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 */    )    {    switch (channel)    {    	case 0:    		return ((SIO_CHAN *)&ppc860Chan);    		break;/*    	case 1:    		return ((SIO_CHAN *)&ppc860SccChan);    		break;  */  	default:			return ((SIO_CHAN *) ERROR);			break;		}    }/********************************************************************************* sysSerialReset - reset the serail device ** This function calls sysSerialHwInit() to reset the serail device** RETURNS: N/A**/void sysSerialReset (void)    {    sysSerialHwInit ();    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -