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

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

?? ppc860scc.c

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

        case SIO_MODE_GET:
            * (int *) arg = pChan->channelMode;
	    break;

        case SIO_AVAIL_MODES_GET:
            *(int *)arg = SIO_MODE_INT | SIO_MODE_POLL;
	    break;

	default:
	    status = ENOSYS;
	}

    return (status);
    }

/******************************************************************************
*
*
* ppc860Int - handle an SCC interrupt
*
* This routine is called to handle SCC interrupts.
*/

void ppc860SccInt
    (
    PPC860SCC_CHAN *pChan
    )
    {
    char		outChar;
    FAST UINT16		dataLen = 0;

    /* check for a receive event */

    if (pChan->uart.pSccReg->scce & 0x0001)
	{
        pChan->uart.pSccReg->scce = 0x0001;

	while (!(pChan->uart.rxBdBase [pChan->uart.rxBdNext].statusMode &
		 BD_RX_EMPTY_BIT))
	    {
	    /* process all filled receive buffers */

	    outChar = pChan->uart.rxBdBase[pChan->uart.rxBdNext].dataPointer[0];

            pChan->uart.rxBdBase[pChan->uart.rxBdNext].statusMode |=
                BD_RX_EMPTY_BIT;

            /* incr BD count */

            pChan->uart.rxBdNext = (pChan->uart.rxBdNext + 1) %
                                  pChan->uart.rxBdNum;

            /* acknowledge interrupt ??? multiple events ??? */

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

	    (*pChan->putRcvChar) (pChan->putRcvArg,outChar);

	    if (pChan->channelMode == SIO_MODE_POLL)
		break;
	    }
	}

    /* check for a transmit event and if a character needs to be output */

    if ((pChan->uart.pSccReg->scce & 0x0002) &&
        (pChan->channelMode != SIO_MODE_POLL))
	{
        pChan->uart.pSccReg->scce = 0x0002;
    
        if ((*pChan->getTxChar) (pChan->getTxArg, &outChar) == OK)
	    {
	    do
	        {
	        pChan->uart.txBdBase[pChan->uart.txBdNext].dataPointer[dataLen++]
		    = outChar;

                if (pChan->channelMode == SIO_MODE_POLL)
                    break;
	        }
	    while ((dataLen < pChan->uart.txBufSize) &&
                   ((*pChan->getTxChar) (pChan->getTxArg, &outChar)
		       == OK));

	    pChan->uart.txBdBase[pChan->uart.txBdNext].dataLength = dataLen;

            /* acknowledge interrupt */

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

	    /* send transmit buffer */

	    pChan->uart.txBdBase[pChan->uart.txBdNext].statusMode |=
	        BD_TX_READY_BIT;

	    /* incr BD count */

 	    pChan->uart.txBdNext = (pChan->uart.txBdNext+ 1) %
							pChan->uart.txBdNum;
	    }
	}

    /* acknowledge all other interrupts - ignore events */

    pChan->uart.pSccReg->scce &= 0xfffc;

    * CISR(pChan->regBase) = pChan->uart.intMask;
    }

/******************************************************************************
*
*
* ppc860Startup - transmitter startup routine
*/

static void ppc860SccStartup
    (
    PPC860SCC_CHAN *pChan		/* ty device to start up */
    )
    {
    char outChar;
    FAST UINT16 dataLen = 0;

    if (pChan->channelMode == SIO_MODE_POLL)
	return;

    /* check if buffer is ready and if a character needs to be output */

    if ((!(pChan->uart.txBdBase[pChan->uart.txBdNext].statusMode &
	   BD_TX_READY_BIT)) &&
        ((*pChan->getTxChar) (pChan->getTxArg, &outChar) == OK))
	{
	do
	    {
	    pChan->uart.txBdBase[pChan->uart.txBdNext].dataPointer[dataLen++] =
		outChar;
	    }
	while ((dataLen < pChan->uart.txBufSize) &&
               ((*pChan->getTxChar) (pChan->getTxArg, &outChar) == OK));
	       						/* fill buffer */

	/* send transmit buffer */

	pChan->uart.txBdBase[pChan->uart.txBdNext].dataLength  = dataLen;
	pChan->uart.txBdBase[pChan->uart.txBdNext].statusMode |=
	    BD_TX_READY_BIT;

	/* incr BD count */

        pChan->uart.txBdNext = (pChan->uart.txBdNext + 1) % pChan->uart.
txBdNum;
	}
    }

/******************************************************************************
*
* ppc860PollInput - poll the device for input.
*
* RETURNS: OK if a character arrived, ERROR on device error, EAGAIN
*          if the input buffer is empty.
*/

static int ppc860SccPollInput
    (
    SIO_CHAN *	pSioChan,
    char *	thisChar
    )
    {

    PPC860SCC_CHAN * pChan = (PPC860SCC_CHAN *) pSioChan;

    if (!(pChan->uart.pSccReg->scce & 0x0001))
        return (EAGAIN); 

    if (pChan->uart.rxBdBase[pChan->uart.rxBdNext].statusMode & 
BD_RX_EMPTY_BIT)
        return (EAGAIN);

    /* get a character */

    *thisChar = pChan->uart.rxBdBase[pChan->uart.rxBdNext].dataPointer[0];

    /* set the empty bit */

    pChan->uart.rxBdBase[pChan->uart.rxBdNext].statusMode |= BD_RX_EMPTY_BIT;

    /* incr BD count */

    pChan->uart.rxBdNext = (pChan->uart.rxBdNext + 1) % pChan->uart.rxBdNum;

    /* only clear RX event if no more characters are ready */

    if (pChan->uart.rxBdBase[pChan->uart.rxBdNext].statusMode & 
BD_RX_EMPTY_BIT)
        pChan->uart.pSccReg->scce = 0x0001;

    return (OK);
    }

/******************************************************************************
*
* ppc860PollOutput - output a character in polled mode.
*
* RETURNS: OK if a character arrived, ERROR on device error, EAGAIN
*          if the output buffer if full.
*/

static int ppc860SccPollOutput
    (
    SIO_CHAN *	pSioChan,
    char	outChar
    )
    {
    PPC860SCC_CHAN *	pChan = (PPC860SCC_CHAN *) pSioChan;
    int			i;

    /* wait a bit for the last character to get out */
    /* because the PPC604 is a very fast processor */
    /* ???  make the 10000 value a #define */

    i = 0;
    while( (i<10000) && (pChan->uart.txBdBase[pChan->uart.txBdNext].
statusMode & BD_TX_READY_BIT) )
	{
	i = i + 1;    
	}
	
    /* is the transmitter ready to accept a character? */
    /* if still not, we have a problem */

    if (pChan->uart.txBdBase[pChan->uart.txBdNext].statusMode &
	BD_TX_READY_BIT)
	return(EAGAIN);

    /* reset the transmitter status bit */

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

    /* write out the character */

    pChan->uart.txBdBase[pChan->uart.txBdNext].dataPointer[0] = outChar;

    pChan->uart.txBdBase[pChan->uart.txBdNext].dataLength  = 1;

    /* send transmit buffer */

    pChan->uart.txBdBase[pChan->uart.txBdNext].statusMode |= BD_TX_READY_BIT;

    pChan->uart.txBdNext = (pChan->uart.txBdNext + 1) % pChan->uart.txBdNum;

    return (OK);
    }

/******************************************************************************
*
* ppc860CallbackInstall - install ISR callbacks to get put chars.
*
*/

static int ppc860SccCallbackInstall
    (
    SIO_CHAN *	pSioChan,
    int		callbackType,
    STATUS	(* callback)(),
    void *	callbackArg
    )
    {
    PPC860SCC_CHAN * pChan = (PPC860SCC_CHAN *) pSioChan;

    switch (callbackType)
        {
        case SIO_CALLBACK_GET_TX_CHAR:
            pChan->getTxChar    = callback;
            pChan->getTxArg     = callbackArg;
            return (OK);
	    break;

        case SIO_CALLBACK_PUT_RCV_CHAR:
            pChan->putRcvChar   = callback;
            pChan->putRcvArg    = callbackArg;
            return (OK);
	    break;

        default:
            return (ENOSYS);
        }
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲特级片在线| 国产精品你懂的在线欣赏| 色老头久久综合| 不卡欧美aaaaa| 99久久精品国产一区二区三区| 国产福利91精品一区二区三区| 国产精品亚洲视频| 成人激情综合网站| 色综合久久综合| 日本精品免费观看高清观看| 一本色道久久综合狠狠躁的推荐| av一本久道久久综合久久鬼色| 色综合天天视频在线观看| 91国偷自产一区二区三区成为亚洲经典| 成人av电影在线| 在线免费观看一区| 91精品国产乱码| 日韩一级视频免费观看在线| 精品国产第一区二区三区观看体验 | 国产91清纯白嫩初高中在线观看 | 亚洲欧洲av色图| 亚洲激情av在线| 日韩高清国产一区在线| 韩国视频一区二区| 91小视频在线观看| 欧美军同video69gay| 精品捆绑美女sm三区| 中文字幕中文字幕在线一区| 亚洲成人高清在线| 福利电影一区二区三区| 欧美色涩在线第一页| 精品99一区二区三区| 国产精品国产自产拍在线| 日韩精品一级二级| 国产乱码精品一区二区三| 91国偷自产一区二区使用方法| 日韩欧美一区在线观看| 综合色中文字幕| 久久电影网站中文字幕| 一本到不卡免费一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 久久九九久久九九| 亚洲最新视频在线播放| 国产白丝网站精品污在线入口| 欧美私模裸体表演在线观看| 国产亚洲视频系列| 青青草精品视频| 日本高清免费不卡视频| 久久久久国产成人精品亚洲午夜| 亚洲成av人影院在线观看网| 成人午夜短视频| 欧美成人vr18sexvr| 亚洲自拍与偷拍| 91性感美女视频| 亚洲国产精品99久久久久久久久| 日本在线不卡一区| 欧美日韩国产精品自在自线| 亚洲色图20p| 99视频一区二区| 久久人人爽人人爽| 久久精品国产网站| 欧美一区二区性放荡片| 亚洲高清免费观看 | 天天操天天干天天综合网| 91小视频免费看| 亚洲日穴在线视频| 成人免费观看av| 国产精品免费观看视频| 国产99久久久久久免费看农村| 精品国产电影一区二区| 狠狠狠色丁香婷婷综合激情| 日韩精品中文字幕一区二区三区| 日本网站在线观看一区二区三区| 在线观看日韩一区| 亚洲一级电影视频| 欧美日韩成人综合在线一区二区| 亚洲一区二区影院| 在线播放中文一区| 日本美女视频一区二区| 日韩精品一区二区三区视频在线观看| 蜜臀av亚洲一区中文字幕| 欧美一级在线视频| 国产精品影视在线观看| 国产亚洲欧美在线| 91偷拍与自偷拍精品| 一区二区成人在线| 欧美精品黑人性xxxx| 蜜臂av日日欢夜夜爽一区| 久久久www免费人成精品| 成人在线视频一区二区| 亚洲蜜臀av乱码久久精品| 欧美三级日本三级少妇99| 免费人成在线不卡| 国产午夜精品一区二区三区视频| 国产成人高清在线| 夜夜爽夜夜爽精品视频| 欧美精品1区2区| 国产一区二区美女诱惑| 中文字幕一区二区三| 欧美日韩卡一卡二| 国产乱码字幕精品高清av| 一色屋精品亚洲香蕉网站| 欧美精品免费视频| 国产成人亚洲综合a∨猫咪| 亚洲免费观看高清| 精品日产卡一卡二卡麻豆| 99久久久无码国产精品| 亚洲国产精品麻豆| 久久精品一区二区| 欧美日韩不卡在线| 懂色av一区二区夜夜嗨| 午夜久久久久久久久久一区二区| 亚洲精品一区二区三区在线观看| 一本色道久久加勒比精品 | 色综合天天综合在线视频| 午夜伊人狠狠久久| 国产精品久久久久永久免费观看| 欧美日韩国产系列| 91在线观看成人| 国内精品国产三级国产a久久 | 欧美日韩三级在线| 成人激情免费视频| 激情综合网av| 午夜精品爽啪视频| 亚洲欧洲国产日本综合| 久久在线观看免费| 777久久久精品| 在线影视一区二区三区| 成人免费视频免费观看| 美日韩一区二区三区| 亚洲国产wwwccc36天堂| 亚洲欧美日韩在线播放| 国产人成一区二区三区影院| 日韩欧美国产一二三区| 4438x成人网最大色成网站| 色天天综合色天天久久| 成人av电影在线网| 成人精品视频一区二区三区尤物| 免费在线观看成人| 日韩国产在线观看一区| 亚洲最色的网站| 亚洲最快最全在线视频| 亚洲精品视频自拍| 亚洲精品老司机| 亚洲乱码中文字幕| 亚洲欧美一区二区三区极速播放| 中文字幕不卡一区| 中文一区二区在线观看| 国产欧美一区二区三区鸳鸯浴 | 久久亚洲欧美国产精品乐播| 欧美一区二区播放| 欧美一级日韩免费不卡| 91精品国产美女浴室洗澡无遮挡| 欧美精品久久久久久久久老牛影院| 在线日韩av片| 7777精品伊人久久久大香线蕉最新版 | 一区二区在线观看视频 | 在线成人免费视频| 日韩一区二区高清| 精品国产污网站| 久久久精品国产99久久精品芒果| 国产日韩欧美不卡在线| 国产精品久久久久久妇女6080| 国产精品久久久久桃色tv| 亚洲日本va在线观看| 一区二区三区av电影| 视频一区二区三区在线| 日本免费在线视频不卡一不卡二| 韩国成人在线视频| av一区二区三区黑人| 91久久久免费一区二区| 欧美一区二区成人6969| 国产三区在线成人av| 亚洲美腿欧美偷拍| 视频一区二区三区在线| 国产精品自拍网站| 成人免费高清视频在线观看| 在线视频综合导航| 日韩免费在线观看| 成人欧美一区二区三区小说| 亚洲国产日韩a在线播放性色| 免费观看在线综合色| 99麻豆久久久国产精品免费| 欧美日韩国产高清一区二区三区| 久久蜜桃av一区二区天堂| 亚洲精品国产a| 久久精品久久精品| 99久久免费国产| 欧美成人综合网站| 亚洲女爱视频在线| 国产一区二区三区香蕉| 在线观看日韩精品| 亚洲国产高清在线观看视频| 性欧美大战久久久久久久久| 国产精品1024| 91麻豆精品国产91久久久久久久久| 中文字幕欧美国产| 久久av资源网| 欧美日韩亚洲综合| 国产精品国产三级国产aⅴ原创|