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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ppc860scc.c

?? 基于如何開發MPC860處理器系統的核心業務模塊QMC的開發程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "copyright_wrs.h"

/*
modification history
--------------------
2000.6.6 copy from ppc860sio.c
*/

/* 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"
#include "mpc860p.h"
/* defines */

#define DEFAULT_BAUD 9600

/* forward declarations */

static STATUS ppc860SccIoctl (PPC860SCC_CHAN *pChan,int request,int arg);
static void   ppc860SccResetChannel (PPC860SCC_CHAN *pChan);
static int    ppc860SccPollOutput (SIO_CHAN *,char);
static int    ppc860SccPollInput (SIO_CHAN *,char *);
static void   ppc860SccStartup (PPC860SCC_CHAN *);
static int    ppc860SccCallbackInstall (SIO_CHAN *, int, STATUS (*)(), void *);

/* local driver function table */

static SIO_DRV_FUNCS ppc860SccDrvFuncs =
    {
    (int (*)())			ppc860SccIoctl,
    (int (*)())			ppc860SccStartup,
    				ppc860SccCallbackInstall,
    (int (*)())			ppc860SccPollInput,
    (int (*)(SIO_CHAN *,char))	ppc860SccPollOutput
    };

/******************************************************************************
*
*
* ppc860DevInit - initialize the SCC
*
* This routine is called to initialize the chip to a quiescent state.
* Note that the `smcNum' field of PPC860SCC_CHAN must be either 1 or 2.
*/

void ppc860SccDevInit
    (
    PPC860SCC_CHAN *pChan
    )
    {
    /* masks off this SCC's interrupt. */
	
    * CIMR(pChan->regBase) &= ~CIMR_SCC3 ;
    
    pChan->baudRate  = DEFAULT_BAUD;
    pChan->pDrvFuncs = &ppc860SccDrvFuncs;
    }

/******************************************************************************
*
*
* ppc860ResetChannel - initialize the SCC
*/

static void ppc860SccResetChannel 
    (
    PPC860SCC_CHAN *pChan
    )
    {
    int frame;

    int oldlevel = intLock ();	/* lock interrupts */ 

    pChan->uart.intMask = CIMR_SCC3;
    
    /* set up SCC3 as NMSI, select Baud Rate Generator */

    * SICR(pChan->regBase) |= 0x00090000;
	 
    /* reset baud rate generator, wait for reset to clear... */
 
    *pChan->pBaud |= BRGC_RST;
    while (*pChan->pBaud & BRGC_RST);

    ppc860SccIoctl (pChan, SIO_BAUD_SET, pChan->baudRate);

    /* set up transmit buffer descriptors */
	pChan->uart.txBdBase = (SCC_BUF *) (pChan->regBase +
		         ((UINT32) pChan->uart.txBdBase ));
    pChan->uart.pScc->param.tbase = (UINT16) SCC3_TBD_OFF;
    pChan->uart.pScc->param.tbptr = (UINT16) SCC3_TBD_OFF;
    pChan->uart.txBdNext = 0;

    /* initialize each transmit buffer descriptor */

    for (frame = 0; frame < pChan->uart.txBdNum; frame++)
        {
        pChan->uart.txBdBase[frame].statusMode = 0x9000;

        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 |= 0x2000;

    /* set up receive buffer descriptors */

    pChan->uart.rxBdBase = (SCC_BUF *) (pChan->regBase +
		         ((UINT32) pChan->uart.rxBdBase ));

    pChan->uart.pScc->param.rbase = (UINT16) SCC3_RBD_OFF;
    pChan->uart.pScc->param.rbptr = (UINT16) SCC3_RBD_OFF;
    pChan->uart.rxBdNext = 0;

    /* initialize each receive buffer descriptor */
	
    for (frame = 0; frame < pChan->uart.rxBdNum; frame++)
        {
        pChan->uart.rxBdBase[frame].statusMode = 0x9000;
        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 |= 0x2000;

    /* set SCC attributes to standard UART mode */

    pChan->uart.pSccReg->gsmrl = 0x00028004;
	pChan->uart.pSccReg->gsmrh = 0x00000020;
	pChan->uart.pSccReg->psmr = 0xb000;
	
    /* initialize parameter RAM area for this SMC */

    pChan->uart.pScc->param.rfcr       = 0x18;	/* supervisor data access */
    pChan->uart.pScc->param.tfcr       = 0x18;	/* supervisor data access */
    pChan->uart.pScc->param.mrblr      = 0x1;	/* one character rx buffers */
    pChan->uart.pScc->proto.maxIdl     = 0x0;	/* maximum idle characters */
    pChan->uart.pScc->proto.brkcr      = 1;		/* break count register (transmit) */
    pChan->uart.pScc->proto.parec      = 0;		/* receive parity error counter */
    pChan->uart.pScc->proto.frmer      = 0;		/* receive framing error counter */
    pChan->uart.pScc->proto.nosec      = 0;		/* receive noise counter */
    pChan->uart.pScc->proto.brkec      = 0;		/* receive break condition counter */
    pChan->uart.pScc->proto.uaddr1     = 0;		/* uart address character 1 */
    pChan->uart.pScc->proto.uaddr2     = 0;		/* uart address character 2 */
    pChan->uart.pScc->proto.toseq 	   = 0;		/* transmit out-of-sequence character */
    pChan->uart.pScc->proto.character1 = 0x8000;
    pChan->uart.pScc->proto.character2 = 0x8000;
    pChan->uart.pScc->proto.character3 = 0x8000;		
    pChan->uart.pScc->proto.character4 = 0x8000;		
    pChan->uart.pScc->proto.character5 = 0x8000;		
    pChan->uart.pScc->proto.character6 = 0x8000;		
    pChan->uart.pScc->proto.character7 = 0x8000;		
    pChan->uart.pScc->proto.character8 = 0x8000;		
    pChan->uart.pScc->proto.rccm 	   = 0xc0ff;		
    
    /* clear all events */

    pChan->uart.pSccReg->scce = 0x0067;

    /* enables the transmitter and receiver  */

   pChan->uart.pSccReg->gsmrl = 0x00028034;

    /* unmask interrupt (Tx, Rx only) */

    pChan->uart.pSccReg->sccm  = 0x0003;
    *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 ppc860SccIoctl
    (
    PPC860SCC_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)
                ppc860SccResetChannel(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 SCC's interrupt status bit */

		* CIMR(pChan->regBase) |= pChan->uart.intMask;
				/* enable this SCC's interrupt  */

		pChan->uart.pSccReg->scce = 0x0001;	
				/* reset the receiver status bit */ 

                pChan->uart.pSccReg->sccm = 0x0003;
				/* enables receive and transmit interrupts */
		}
            else
		{
                pChan->uart.pSccReg->sccm = 0;
				/* mask off the receive and transmit intrs */

		* CIMR(pChan->regBase) &= (~(pChan->uart.intMask));
				/* mask off this SCC's interrupt */ 

                }

            pChan->channelMode = arg;

            intUnlock(oldlevel);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费一级片91| 日韩电影在线免费观看| 日韩欧美高清在线| av在线一区二区| 免费美女久久99| 亚洲一区免费在线观看| 亚洲欧洲国产专区| 欧美不卡一区二区三区四区| 色婷婷久久综合| 成人免费毛片高清视频| 免费在线观看精品| 亚洲福利视频一区| 亚洲欧洲综合另类在线| 久久久另类综合| 欧美成人精品3d动漫h| 欧美揉bbbbb揉bbbbb| av在线播放不卡| 国产精品一二三四区| 蜜乳av一区二区| 午夜av区久久| 亚洲一区在线观看免费| 亚洲男人天堂av| 国产精品久久久久aaaa樱花| 久久综合一区二区| 日韩一区二区三区三四区视频在线观看| 91美女在线视频| 成人av午夜影院| 成人精品小蝌蚪| 欧美日韩免费观看一区二区三区| 成人手机在线视频| 国产成人精品免费网站| 国内精品久久久久影院薰衣草| 免费视频最近日韩| 亚洲一区欧美一区| 亚洲高清在线精品| 亚洲成人资源网| 婷婷六月综合亚洲| 日韩不卡手机在线v区| 视频精品一区二区| 日韩影院在线观看| 青青草91视频| 极品少妇一区二区| 国产精品主播直播| 国产成人av电影免费在线观看| 国产精品1区二区.| 成人高清视频免费观看| av在线不卡电影| 91搞黄在线观看| 精品视频123区在线观看| 欧美三级视频在线观看| 欧美精品久久天天躁| 91精品国产综合久久精品| 91精品久久久久久久99蜜桃| 这里只有精品视频在线观看| 这里只有精品免费| 久久色在线观看| 国产精品美女久久久久高潮| 亚洲欧洲av在线| 亚洲亚洲人成综合网络| 免费高清视频精品| 国产一区在线看| 99天天综合性| 欧美日韩在线三级| 精品国产91乱码一区二区三区 | 成人综合在线网站| 不卡的av电影| 欧美日韩激情一区二区| 欧美成人免费网站| |精品福利一区二区三区| 亚洲国产精品一区二区www在线| 日日夜夜免费精品视频| 国产乱码一区二区三区| 97久久精品人人澡人人爽| 7777精品伊人久久久大香线蕉的| 欧美不卡一二三| 亚洲欧洲日产国产综合网| 中文字幕一区二区三区在线不卡| 国产亚洲美州欧州综合国| 国产精品乱码妇女bbbb| 国产日韩精品一区二区三区| 国产日韩欧美麻豆| 亚洲va韩国va欧美va精品| 亚洲国产精品天堂| 国产一区激情在线| 91丝袜美腿高跟国产极品老师| 欧美日韩一区二区欧美激情| 91精品国产手机| av电影天堂一区二区在线| 成人污视频在线观看| 欧美日韩精品三区| 欧美激情综合五月色丁香| 亚洲五码中文字幕| 国产成人av网站| 欧美一区二区在线不卡| 亚洲欧美一区二区在线观看| 石原莉奈在线亚洲二区| 色悠悠久久综合| 精品国产制服丝袜高跟| 亚洲国产精品久久久久婷婷884| 国产尤物一区二区在线| 欧美亚洲自拍偷拍| 国产精品麻豆99久久久久久| 五月婷婷综合网| 99精品一区二区三区| 久久精品男人天堂av| 日日骚欧美日韩| 91国产福利在线| 亚洲欧洲精品天堂一级| 国产精品羞羞答答xxdd| 日韩午夜中文字幕| 一区二区三区四区在线免费观看| 国产精品一区二区久激情瑜伽| 欧美另类高清zo欧美| 亚洲精品成人天堂一二三| 成人性生交大合| 26uuuu精品一区二区| 久久精品免费看| 欧美精品aⅴ在线视频| 亚洲精品老司机| 99精品视频一区| 日韩理论片一区二区| 成人美女视频在线看| 国产亚洲美州欧州综合国| 九一久久久久久| 日韩欧美国产高清| 美女脱光内衣内裤视频久久影院| 欧美日韩亚洲另类| 亚洲国产一区二区三区| 欧美亚洲高清一区| 亚洲国产中文字幕在线视频综合| 91麻豆福利精品推荐| 亚洲欧美日韩中文播放 | 成人免费一区二区三区视频| 韩国av一区二区| 国产亚洲美州欧州综合国| 国产高清不卡二三区| 久久久国产精品午夜一区ai换脸| 狠狠色丁香久久婷婷综合丁香| 欧美va亚洲va| 国产精品一区2区| 国产精品毛片久久久久久久| gogogo免费视频观看亚洲一| 成人欧美一区二区三区视频网页| eeuss国产一区二区三区| 亚洲人成精品久久久久久 | 7777女厕盗摄久久久| 男女男精品网站| 国产亚洲综合av| 成人av动漫网站| 亚洲精品国产第一综合99久久| 欧美综合亚洲图片综合区| 性做久久久久久免费观看欧美| 日韩欧美123| 国产福利一区在线观看| 亚洲欧美综合网| 欧美亚洲一区二区在线观看| 日韩av一区二区三区| 久久天天做天天爱综合色| 91精品在线麻豆| 国内精品伊人久久久久av影院| 国产欧美日韩久久| 在线一区二区三区四区五区 | 蜜桃视频一区二区三区| 久久婷婷国产综合国色天香| www.视频一区| 婷婷激情综合网| 久久一区二区视频| 91麻豆国产自产在线观看| 婷婷综合在线观看| 日本一区二区三区国色天香 | 色婷婷激情综合| 日韩国产成人精品| 国产精品丝袜久久久久久app| 在线视频国内一区二区| 毛片av中文字幕一区二区| 国产欧美1区2区3区| 欧美少妇性性性| 国产精品99久久久久| 亚洲精品v日韩精品| 精品99久久久久久| 91福利在线导航| 国产精品一区二区久激情瑜伽| 亚洲综合在线电影| 国产无一区二区| 欧美精品日韩一本| av亚洲精华国产精华精华| 日本伊人色综合网| 国产精品不卡一区二区三区| 欧美美女视频在线观看| 成人美女视频在线观看18| 蜜桃视频免费观看一区| 一区二区三区在线免费观看| 久久九九全国免费| 日韩限制级电影在线观看| 色综合欧美在线| 国产成人免费视频| 久久爱另类一区二区小说| 一个色在线综合| 亚洲人妖av一区二区| 国产色一区二区|