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

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

?? ppc860sio.c

?? 基于如何開(kāi)發(fā)MPC860處理器系統(tǒng)的核心業(yè)務(wù)模塊QMC的開(kāi)發(fā)程序
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(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 */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久7777按摩| 激情欧美一区二区三区在线观看| 亚洲婷婷在线视频| 久久综合久久久久88| 国产午夜精品一区二区| 欧美极品另类videosde| 欧美电影精品一区二区| 日韩欧美国产综合在线一区二区三区| 欧美激情综合五月色丁香小说| 欧美成人a在线| 日韩电影在线一区二区三区| 中文字幕亚洲区| 欧美不卡激情三级在线观看| 欧美中文字幕一二三区视频| 精品在线免费视频| 一区二区在线观看免费视频播放 | 九色综合狠狠综合久久| 一区二区三区免费| 国产精品二区一区二区aⅴ污介绍| 日韩欧美在线综合网| 欧美日韩国产首页| 91免费看视频| 成人av网站大全| 国产福利一区二区三区视频 | 亚洲国产精品高清| 久久九九久精品国产免费直播| 欧美一区国产二区| 欧美日韩一区视频| 91久久国产最好的精华液| 成人在线综合网站| 国产成人丝袜美腿| 国产精品自在在线| 国产乱淫av一区二区三区| 久久国产精品第一页| 久久精品国产精品亚洲综合| 美腿丝袜一区二区三区| 免费观看在线综合色| 欧美a级理论片| 韩国精品久久久| 国产在线视视频有精品| 国产米奇在线777精品观看| 精品影视av免费| 国产大陆a不卡| 成人黄色综合网站| 91麻豆福利精品推荐| 在线观看中文字幕不卡| 欧美日韩你懂的| 欧美性受xxxx黑人xyx| 日本丶国产丶欧美色综合| 欧美伊人久久大香线蕉综合69| 91在线国产福利| av日韩在线网站| 成人精品在线视频观看| 亚洲国产视频在线| 欧美天天综合网| 欧美三级在线视频| 7777精品伊人久久久大香线蕉超级流畅 | 蜜臀av在线播放一区二区三区| 欧美日韩一区精品| 视频一区国产视频| 国产农村妇女精品| 91在线免费播放| 日韩综合一区二区| 国产精品福利av| 国产欧美1区2区3区| 洋洋成人永久网站入口| 亚洲欧美日韩综合aⅴ视频| 亚洲图片激情小说| 国产欧美中文在线| 欧美性三三影院| 91视频com| 波多野结衣亚洲| 亚洲国产精品久久久久秋霞影院 | 国产a精品视频| 日韩av成人高清| 亚洲高清三级视频| 婷婷开心久久网| 最新欧美精品一区二区三区| 日韩三级视频在线看| 欧美大度的电影原声| 欧美一区二区日韩| 欧美一区二视频| 日韩欧美成人一区| 国产日韩欧美高清在线| 国产精品久久久久毛片软件| 国产精品人成在线观看免费| 亚洲不卡一区二区三区| 美女被吸乳得到大胸91| 91国内精品野花午夜精品| 久久婷婷一区二区三区| 亚洲天堂精品视频| 91精品一区二区三区久久久久久| 91亚洲国产成人精品一区二区三| 国产盗摄视频一区二区三区| 欧美日韩国产系列| 久久99精品国产麻豆婷婷洗澡| 91精品国产综合久久久久久漫画| 国产大陆a不卡| 91蝌蚪porny成人天涯| 欧美精品v国产精品v日韩精品| 久久中文字幕电影| 亚洲精品免费视频| 经典三级一区二区| 欧美亚洲动漫另类| 国产亚洲综合在线| 香蕉成人啪国产精品视频综合网 | 婷婷综合久久一区二区三区| 国产精品夜夜嗨| 欧美影院一区二区| 国产蜜臀av在线一区二区三区 | 久久久久国产精品厨房| 一区二区三区欧美激情| 国产伦精品一区二区三区视频青涩 | 国产精品资源在线观看| 91久久线看在观草草青青| 精品国产人成亚洲区| 一区二区三区在线免费观看| 国产电影精品久久禁18| 欧美一区二区三区四区五区| 日韩美女视频一区二区 | 欧美日韩午夜影院| 国产精品国产三级国产普通话三级 | 成人国产视频在线观看| 日韩欧美成人一区| 亚洲国产乱码最新视频| 不卡欧美aaaaa| 久久久久久久国产精品影院| 日韩av电影天堂| 精品视频在线免费| 亚洲视频免费看| 成人午夜电影久久影院| 久久久久久97三级| 奇米精品一区二区三区在线观看| 欧美在线视频你懂得| 一区二区三区在线播放| 成人av影视在线观看| 欧美一区二区黄色| 亚洲欧美日韩电影| 成人综合激情网| 日韩精品一区二区三区蜜臀| 三级精品在线观看| 99久久精品国产一区| 欧美激情一区二区三区蜜桃视频| 国产老肥熟一区二区三区| 日韩一区二区免费视频| 五月天欧美精品| 欧美三级在线看| 午夜精品福利一区二区三区av| 欧美天堂亚洲电影院在线播放| 一区二区国产视频| 91久久久免费一区二区| 一区二区三区不卡视频在线观看| 96av麻豆蜜桃一区二区| 亚洲日本护士毛茸茸| 色94色欧美sute亚洲13| 亚洲小说欧美激情另类| 色悠悠久久综合| 亚洲一区精品在线| 在线不卡的av| 免费成人美女在线观看.| 日韩一区二区麻豆国产| 激情综合五月婷婷| 奇米精品一区二区三区在线观看| www.久久久久久久久| 国产亚洲精品精华液| 99久久精品免费看国产免费软件| 久久久亚洲精品石原莉奈| 国产大陆精品国产| 国产精品蜜臀av| 色狠狠综合天天综合综合| 亚洲不卡在线观看| 欧美va亚洲va香蕉在线| 国产成人免费视频| 亚洲欧洲综合另类| 欧美三级视频在线播放| 美女在线视频一区| 中文字幕免费在线观看视频一区| 韩日av一区二区| 中文字幕在线观看不卡视频| 成人激情免费视频| 国产精品视频观看| 欧美无人高清视频在线观看| 日韩av一区二区在线影视| 久久婷婷色综合| 在线这里只有精品| 免费观看成人鲁鲁鲁鲁鲁视频| 国产情人综合久久777777| 色天天综合色天天久久| 日本欧美韩国一区三区| 国产亚洲欧美激情| 欧美色综合网站| 国产乱人伦精品一区二区在线观看 | 久久久久久亚洲综合影院红桃| 国产一区福利在线| 亚洲激情成人在线| 久久九九久精品国产免费直播| 91国内精品野花午夜精品| 国产精品一区在线| 天堂va蜜桃一区二区三区漫画版| 欧美激情艳妇裸体舞|