亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ppc860sio.c

?? 基于如何開發(fā)MPC860處理器系統(tǒng)的核心業(yè)務(wù)模塊QMC的開發(fā)程序
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* ppc860Sio.c - Motorola MPC800 SMC UART serial driver *//* Copyright 1984-1996 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01b,06nov96,tpr  removed DEBUG code.01c,08nov96,dgp  doc: final formatting01b,28oct96,tam	 fixed typo error to build man pages. 01a,14apr96,cah	 adapted from m68360.c and updated for SMC part*//*DESCRIPTIONThis is the driver for the SMCs in the internal Communications Processor (CP)of the Motorola MPC68860/68821.  This driver only supports the SMCs in asynchronous UART mode.USAGEA PPC800SMC_CHAN structure is used to describe the chip.The BSP's sysHwInit() routine typically calls sysSerialHwInit(),which initializes all the values in the PPC860SMC_CHAN structure (exceptthe SIO_DRV_FUNCS) before calling ppc860DevInit().The BSP's sysHwInit2() routine typically calls sysSerialHwInit2() whichconnects the chip's interrupts via intConnect().INCLUDE FILES: drv/sio/ppc860Sio.h*//* includes */#include "vxWorks.h"#include "intLib.h"#include "errno.h"#include "sioLib.h"#include "drv/multi/ppc860Siu.h"#include "drv/multi/ppc860Cpm.h"#include "drv/sio/ppc860Sio.h"/* defines */#define DEFAULT_BAUD 9600/* forward declarations */static STATUS ppc860Ioctl (PPC860SMC_CHAN *pChan,int request,int arg);static void   ppc860ResetChannel (PPC860SMC_CHAN *pChan);static int    ppc860PollOutput (SIO_CHAN *,char);static int    ppc860PollInput (SIO_CHAN *,char *);static void   ppc860Startup (PPC860SMC_CHAN *);static int    ppc860CallbackInstall (SIO_CHAN *, int, STATUS (*)(), void *);/* local driver function table */static SIO_DRV_FUNCS ppc860SioDrvFuncs =    {    (int (*)())			ppc860Ioctl,    (int (*)())			ppc860Startup,    				ppc860CallbackInstall,    (int (*)())			ppc860PollInput,    (int (*)(SIO_CHAN *,char))	ppc860PollOutput    };/********************************************************************************* ppc860DevInit - initialize the SMC** This routine is called to initialize the chip to a quiescent state.* Note that the `smcNum' field of PPC860SMC_CHAN must be either 1 or 2.*/void ppc860DevInit    (    PPC860SMC_CHAN *pChan    )    {    /* masks off this SMC's interrupt. */	    * CIMR(pChan->regBase) &= (~(CIMR_SMC1 >> (pChan->uart.smcNum - 1)));    pChan->baudRate  = DEFAULT_BAUD;    pChan->pDrvFuncs = &ppc860SioDrvFuncs;    }/********************************************************************************* ppc860ResetChannel - initialize the SMC*/static void ppc860ResetChannel     (    PPC860SMC_CHAN *pChan    )    {    int smc;			/* the SMC number being initialized */    int baud;			/* the baud rate generator being used */    int frame;    int oldlevel = intLock ();	/* lock interrupts */     smc  = pChan->uart.smcNum - 1;		/* get SMC number */    baud = pChan->bgrNum - 1;			/* get BRG number */    pChan->uart.intMask = CIMR_SMC1 >> smc;    /* set up SMC as NMSI, select Baud Rate Generator */    switch( baud ) 	{	default:	/* default to BRG1 */	case 0: 	    * SIMODE(pChan->regBase) |= (SIMODE_SMC1CS_BRG1 << (16 * smc));	    break;	case 1: 	    * SIMODE(pChan->regBase) |= (SIMODE_SMC1CS_BRG2 << (16 * smc));	    break;	case 2: 	    * SIMODE(pChan->regBase) |= (SIMODE_SMC1CS_BRG3 << (16 * smc));	    break;	case 3: 	    * SIMODE(pChan->regBase) |= (SIMODE_SMC1CS_BRG4 << (16 * smc));	    break;        }     /* reset baud rate generator, wait for reset to clear... */     *pChan->pBaud |= BRGC_RST;    while (*pChan->pBaud & BRGC_RST);    ppc860Ioctl (pChan, SIO_BAUD_SET, pChan->baudRate);    /* set up transmit buffer descriptors */    pChan->uart.txBdBase = (SMC_BUF *) (pChan->regBase +			 ((UINT32) pChan->uart.txBdBase ));    pChan->uart.pSmc->param.tbase = (UINT16) ((UINT32) pChan->uart.txBdBase);    pChan->uart.pSmc->param.tbptr = (UINT16) ((UINT32) pChan->uart.txBdBase);    pChan->uart.txBdNext = 0;    /* initialize each transmit buffer descriptor */    for (frame = 0; frame < pChan->uart.txBdNum; frame++)        {        pChan->uart.txBdBase[frame].statusMode = BD_TX_INTERRUPT_BIT;        pChan->uart.txBdBase[frame].dataPointer = pChan->uart.txBufBase +                                                (frame * pChan->uart.txBufSize);        }    /* set the last BD to wrap to the first */    pChan->uart.txBdBase[(frame - 1)].statusMode |= BD_TX_WRAP_BIT;    /* set up receive buffer descriptors */    pChan->uart.rxBdBase = (SMC_BUF *) (pChan->regBase +		         ((UINT32) pChan->uart.rxBdBase ));    pChan->uart.pSmc->param.rbase = (UINT16) ((UINT32) pChan->uart.rxBdBase);    pChan->uart.pSmc->param.rbptr = (UINT16) ((UINT32) pChan->uart.rxBdBase);    pChan->uart.rxBdNext = 0;    /* initialize each receive buffer descriptor */	    for (frame = 0; frame < pChan->uart.rxBdNum; frame++)        {        pChan->uart.rxBdBase[frame].statusMode = BD_RX_EMPTY_BIT |						 BD_RX_INTERRUPT_BIT;        pChan->uart.rxBdBase[frame].dataLength = 1; /* char oriented */        pChan->uart.rxBdBase[frame].dataPointer = pChan->uart.rxBufBase + frame;        }    /* set the last BD to wrap to the first */    pChan->uart.rxBdBase[(frame - 1)].statusMode |= BD_RX_WRAP_BIT;    /* set SMC attributes to standard UART mode */    pChan->uart.pSmcReg->smcmr = SMCMR_STD_MODE;    /* initialize parameter RAM area for this SMC */    pChan->uart.pSmc->param.rfcr   = 0x18;	/* supervisor data access */    pChan->uart.pSmc->param.tfcr   = 0x18;	/* supervisor data access */    pChan->uart.pSmc->param.mrblr  = 0x1;	/* one character rx buffers */    pChan->uart.pSmc->param.maxidl = 0x0;	/* no idle features */    pChan->uart.pSmc->param.brkln  = 0x0;	/* no breaks received yet */    pChan->uart.pSmc->param.brkec  = 0x0;	/* zero break condition ctr */    pChan->uart.pSmc->param.brkcr  = 0x1;	/* xmit 1 BRK on stop */    /* clear all events */    pChan->uart.pSmcReg->smce = SMCE_ALL_EVENTS;    /* enables the transmitter and receiver  */    pChan->uart.pSmcReg->smcmr |= SMCMR_TEN | SMCMR_REN;    /* unmask interrupt (Tx, Rx only) */    pChan->uart.pSmcReg->smcm  = SMCM_TX_MSK | SMCM_RX_MSK;    *CIMR(pChan->regBase) |= pChan->uart.intMask;    intUnlock (oldlevel);			/* UNLOCK INTERRUPTS */    }/********************************************************************************* ppc860Ioctl - special device control** RETURNS: OK on success, EIO on device error, ENOSYS on unsupported*          request.**/LOCAL STATUS ppc860Ioctl    (    PPC860SMC_CHAN *	pChan,		/* device to control */    int			request,	/* request code */    int			arg		/* some argument */    )    {    int		baudRate;    int 	oldlevel;    STATUS 	status = OK;    switch (request)	{	case SIO_BAUD_SET:            if (arg >=  50 && arg <= 38400)	/* could go higher... */		{		/* calculate proper counter value, then enable BRG */		baudRate = (pChan->clockRate + (8 * arg)) / (16 * arg);		if (--baudRate > 0xfff)		    *pChan->pBaud = (BRGC_CD_MSK &		    (((baudRate + 8) / 16) << BRGC_CD_SHIFT)) | BRGC_EN |		    BRGC_DIV16;                else                    *pChan->pBaud = (BRGC_CD_MSK & 			(baudRate << 1)) | BRGC_EN;                pChan->baudRate = arg;		}            else	        status = EIO;	    break;    	case SIO_BAUD_GET:	    * (int *) arg = pChan->baudRate;	    break;	case SIO_MODE_SET:            if (!((int) arg == SIO_MODE_POLL || (int) arg == SIO_MODE_INT))                {                status = EIO;                break;                }            /* lock interrupt  */            oldlevel = intLock();            /* initialize channel on first MODE_SET */            if (!pChan->channelMode)                ppc860ResetChannel(pChan);            /*             * if switching from POLL to INT mode, wait for all characters to             * clear the output pins             */            if ((pChan->channelMode == SIO_MODE_POLL) && (arg == SIO_MODE_INT))                {		int i;                for (i=0; i < pChan->uart.txBdNum; i++)                    while (pChan->uart.txBdBase                           [(pChan->uart.txBdNext + i) % pChan->uart.txBdNum].                           statusMode & BD_TX_READY_BIT);                }            if (arg == SIO_MODE_INT)		{                * CISR(pChan->regBase) = pChan->uart.intMask;				/* reset the SMC's interrupt status bit */		* CIMR(pChan->regBase) |= pChan->uart.intMask;				/* enable this SMC's interrupt  */		pChan->uart.pSmcReg->smce = SMCE_RX;					/* reset the receiver status bit */                 pChan->uart.pSmcReg->smcm = SMCM_RX_MSK | SMCM_TX_MSK;				/* enables receive and transmit interrupts */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品麻豆| 91麻豆精品国产自产在线观看一区| 亚洲欧美电影一区二区| 欧美大白屁股肥臀xxxxxx| 色综合久久久久久久| 国产乱码精品一区二区三区av | 久久久蜜桃精品| 日韩美女视频一区二区| 日韩精品中文字幕一区二区三区| 成人午夜视频福利| 麻豆精品视频在线观看视频| 亚洲成va人在线观看| 亚洲图片欧美激情| 国产精品白丝在线| 国产精品情趣视频| 国产精品久久久久久一区二区三区| 精品精品欲导航| 精品少妇一区二区三区在线播放| 欧美久久久久久久久中文字幕| 一本一道久久a久久精品综合蜜臀| 波多野结衣一区二区三区| 国产一区二区精品久久99| 免费成人你懂的| 国产又粗又猛又爽又黄91精品| 国产一区二区在线影院| 国产一区二区三区精品视频| 国产成人av电影免费在线观看| 国产精品996| av一二三不卡影片| 欧美日韩一区二区三区视频| 欧美色偷偷大香| 日韩欧美国产三级| 中国av一区二区三区| 亚洲品质自拍视频| 天天av天天翘天天综合网色鬼国产| 亚洲成人黄色小说| 国产盗摄视频一区二区三区| 国产成人精品亚洲午夜麻豆| 99视频在线观看一区三区| 狠狠色丁香久久婷婷综| av在线不卡观看免费观看| 欧美美女直播网站| 国产精品视频一二| 无吗不卡中文字幕| 99国产精品一区| 日韩三级视频在线观看| 中文字幕一区二区三区在线播放| 亚洲综合图片区| 国产一区美女在线| 91精品国产美女浴室洗澡无遮挡| 国产精品激情偷乱一区二区∴| 亚洲成人你懂的| 97精品国产露脸对白| 久久久夜色精品亚洲| 午夜久久久久久| 欧美体内she精视频| 亚洲欧洲成人精品av97| 国模冰冰炮一区二区| 在线综合视频播放| 亚洲一区二区av在线| 91黄视频在线观看| 亚洲色欲色欲www| 国产久卡久卡久卡久卡视频精品| 91精品婷婷国产综合久久性色 | 国产精品一二三四五| 日韩三级视频在线观看| 麻豆一区二区99久久久久| 欧美日韩dvd在线观看| 亚洲chinese男男1069| 欧美视频一区二区三区四区| 亚洲永久免费av| 欧美丝袜丝交足nylons图片| 亚洲一区av在线| 欧美日韩一区二区三区在线| 性做久久久久久久久| 欧美日韩国产在线观看| 国产在线精品一区二区三区不卡| 日韩一区在线看| 精品国产制服丝袜高跟| 91精品在线观看入口| 中文字幕日韩一区| 日韩欧美二区三区| 日本成人在线视频网站| 久久久久久9999| 国产精品午夜春色av| 国产精品毛片a∨一区二区三区| 99精品在线观看视频| 91精品国产综合久久精品app| 亚洲国产精品成人久久综合一区| 久久99日本精品| 日韩理论片一区二区| 欧美精品丝袜久久久中文字幕| 精品亚洲国产成人av制服丝袜| 日本一区二区成人| 色婷婷综合久久久| 久久精品国产久精国产爱| 日本一区二区高清| 欧美成人精品1314www| 99re在线精品| 国产精品白丝av| 日韩中文字幕91| 日韩久久一区二区| 久久久久高清精品| 91精品麻豆日日躁夜夜躁| 不卡av在线免费观看| 免费人成在线不卡| 一区二区三区av电影 | 亚洲女性喷水在线观看一区| 欧美成人性战久久| 欧美日本精品一区二区三区| 成人app软件下载大全免费| 国产一区二三区| 狠狠色丁香久久婷婷综合_中| 亚洲乱码中文字幕| 亚洲日本乱码在线观看| 久久影院午夜论| 精品国产三级a在线观看| 欧美精品v国产精品v日韩精品| 99re66热这里只有精品3直播| 成人av在线一区二区三区| 国产suv一区二区三区88区| 国产自产高清不卡| 国产一区二区精品久久| 国产成人精品一区二| 国产白丝网站精品污在线入口 | 国产精品一二三四区| 国产成人久久精品77777最新版本| 日本中文字幕一区二区有限公司| 日韩经典中文字幕一区| 日韩精品国产精品| 免费欧美在线视频| 国产成人啪免费观看软件 | 不卡的看片网站| 色一区在线观看| 91精品国产免费久久综合| 欧美精品一区二区久久婷婷| 国产亚洲婷婷免费| 怡红院av一区二区三区| 日本女优在线视频一区二区| 久久99精品久久久久久久久久久久| 狠狠色丁香九九婷婷综合五月| 国产成人精品免费看| 欧洲日韩一区二区三区| 26uuu色噜噜精品一区二区| 中文字幕一区二区三区乱码在线| 亚洲一二三专区| 高清不卡在线观看| 在线播放一区二区三区| 国产日韩精品一区二区三区在线| 亚洲欧美日韩在线不卡| 久久福利资源站| 欧美日韩久久一区| 中文字幕精品综合| 久久精品国产99国产| 91日韩精品一区| 欧美国产精品一区二区三区| 日韩成人一级大片| 欧美综合一区二区三区| 国产午夜精品一区二区三区四区| 丝袜亚洲另类欧美| 色噜噜夜夜夜综合网| 国产精品理论片| 国产乱码精品一品二品| 日韩欧美电影在线| 日韩国产精品91| 欧美日韩一区二区三区高清| 自拍偷拍国产精品| 色综合久久久久久久| 国产精品成人在线观看| www.亚洲免费av| 中文字幕一区二区三区蜜月| 成人福利在线看| 国产精品久久久久一区 | 在线影视一区二区三区| 中文字幕亚洲一区二区av在线 | 国产成人超碰人人澡人人澡| 精品国产91乱码一区二区三区 | 中文字幕av一区二区三区| 国产电影精品久久禁18| 国产欧美一区二区在线观看| 国产.欧美.日韩| 亚洲精品日日夜夜| 欧美日韩视频一区二区| 免费看欧美女人艹b| 久久久久久99精品| 91论坛在线播放| 日日摸夜夜添夜夜添精品视频| 4hu四虎永久在线影院成人| 日本欧美一区二区在线观看| 日韩欧美国产精品一区| 成人h动漫精品一区二| 日本中文一区二区三区| 欧美不卡一区二区| 97久久精品人人爽人人爽蜜臀| 久久亚洲精精品中文字幕早川悠里 | 亚洲婷婷国产精品电影人久久| 色狠狠桃花综合| 青青草原综合久久大伊人精品优势| 欧美日本一区二区在线观看| 久久99精品一区二区三区|