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

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

?? sngks32csio.c

?? tornado開發(fā) 三星s3c44b0x開發(fā)板 bsp
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* sngks32cSio.c - Samsung S3C44B0X serial driver *//* Copyright 2004-2005 Amine@263.net *//* Copyright 1984-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01o,27jul04,a_m  BSP定制 for 思創(chuàng)S3C44B0X黃金開發(fā)板01c,30nov01,m_h  Save pChan->baudRate when setting baud01b,26apr01,m_h  convert tabs to spaces for readability01a,12apr01,m_h  created from snds100 template.*//*DESCRIPTIONThis is the serial I/O driver for Samsung's KS32C50100 microprocessor which is anARM based processor with several integrated peripherals.  It has an interruptcontroller, two 32-bit timers, one Ethernet controller,two HDLC controllers,one IIC controller, general purpose I/O ports, and a 2 channel DMA controller.The 2 UART channels integrated with the processor are controlled by thisdriver.  Both the UARTs can work in interrupt mode as well as DMA mode.This driver supports only the interrupt mode for the UARTs.All the UART registers are accessible as 32-bit integers from the internalsystem registers.  The macros SNGKS32C_REG_READ and SNGKS32C_REG_WRITE read and write32-bit integers from and to the given addresses.  SNGKS32C_SIO_DEFAULT_BAUD isdefined to 38400 in this file.  This is the default baud rate with which the UART channels will be initialized.  The channels are also initialized with one start bit, one stop bit, 8 bit data and no parity bits.The driver is typically only called only by the BSP. The directly callableroutines in this module are sngks32cDevInit(), sngks32cDevInit2(), sngks32cIntRcv(), sngks32cIntTx(), and sngks32cIntErr().The BSP calls sngks32cDevInit() to initialize or reset the device.It connects the driver's interrupt handlers (sngks32cIntRcv(), sngks32cIntTx(),and sngks32cIntErr()), using intConnect().After connecting the interrupt handlers, the BSP calls sngks32cDevInit2()to inform the driver that interrupt mode operation is now possible.INCLUDES:sngks32cSio.h sioLib.hSEE ALSO:<Samsung KS32C50100 User's Manual>*/#include "vxWorks.h"#include "sioLib.h"#include "intLib.h"#include "errno.h"#include "sngks32cSio.h"#include "ioLib.h"#define SNGKS32C_BAUD_MIN         300 #define SNGKS32C_BAUD_MAX         460860#define SNGKS32C_SIO_DEFAULT_BAUD 38400/* Hardware abstraction macros *//* local defines  */#ifndef SNGKS32C_SIO_REG_READ#define SNGKS32C_SIO_REG_READ(pChan, reg, result) \    ((result) = (*(volatile UINT32 *)((UINT32)(pChan)->regs + (reg))))#endif    /*SNGKS32C_SIO_REG_READ*/#ifndef SNGKS32C_SIO_REG_WRITE#define SNGKS32C_SIO_REG_WRITE(pChan, reg, data) \    ((*(volatile UINT32 *)((UINT32)(pChan)->regs + (reg))) = (data))#endif    /*SNGKS32C_SIO_REG_WRITE*//* for backward compatibility */#ifndef    SIO_HUP#   define SIO_OPEN    0x100A    /* open channel, raise DTR, RTS */#   define SIO_HUP     0x100B    /* hang-up, lower DTR, RTS */#endif/* forward static declarations */LOCAL int    sngks32cTxStartup (SIO_CHAN * pSioChan);LOCAL int    sngks32cCallbackInstall (SIO_CHAN *pSioChan, int callbackType,                                      STATUS (*callback)(), void *callbackArg);LOCAL int    sngks32cPollOutput (SIO_CHAN *pSioChan, char    outChar);LOCAL int    sngks32cPollInput (SIO_CHAN *pSioChan, char *thisChar);LOCAL int    sngks32cIoctl (SIO_CHAN *pSioChan, int request, void *arg);LOCAL STATUS dummyCallback (void);/* local variables */LOCAL    SIO_DRV_FUNCS sngks32cSioDrvFuncs =    {    sngks32cIoctl,    sngks32cTxStartup,    sngks32cCallbackInstall,    sngks32cPollInput,    sngks32cPollOutput    };LOCAL BOOL sngks32cIntrMode = FALSE;    /* interrupt mode allowed flag *//******************************************************************************** sngks32cDevInit - initialize a SNGKS32C_DUSART** This routine initializes the driver* function pointers and then resets the chip in a quiescent state.* The BSP must have already initialized all the device addresses and the* baudFreq fields in the SNGKS32C_DUSART structure before passing it to* this routine.** RETURNS: N/A*/void sngks32cDevInit    (    SNGKS32C_CHAN * pChan    )    {    /* initialize each channel's driver function pointers */    pChan->sio.pDrvFuncs    = &sngks32cSioDrvFuncs;    /* install dummy driver callbacks */    pChan->getTxChar     = dummyCallback;    pChan->putRcvChar    = dummyCallback;        /* reset the chip */	/*SNGKS32C_SIO_REG_WRITE(pChan,SNGKS32C_ULCON,(INT_CLK | PARITY_NONE | ONE_STOP | WORD_LEN));*/	/* Amine: deleeted and added */	SNGKS32C_SIO_REG_WRITE(pChan,SNGKS32C_ULCON,(PARITY_NONE | ONE_STOP | WORD_LEN));	SNGKS32C_SIO_REG_WRITE(pChan,S3C44B0X_UFCON,0x97);	/*0值禁止使用FIFO*/	SNGKS32C_SIO_REG_WRITE(pChan,S3C44B0X_UMCON,0);    /* setting polled mode is one way to make the device quiet */    sngks32cIoctl ((SIO_CHAN *)pChan, SIO_MODE_SET, (void *)SIO_MODE_POLL);    sngks32cIoctl ((SIO_CHAN *)pChan, SIO_BAUD_SET, (void *)SNGKS32C_SIO_DEFAULT_BAUD);    }/******************************************************************************** sngks32cDevInit2 - initialize a SNGKS32C_DUSART, part 2** This routine is called by the BSP after interrupts have been connected.* The driver can now operate in interrupt mode.  Before this routine is* called only polled mode operations should be allowed.** RETURNS: N/A* ARGSUSED*/void sngks32cDevInit2    (    SNGKS32C_CHAN * pChan        /* device to initialize */    )    {    char      outchar = '\0';    UINT32    status;    /*      * Dummy write to TXBUF to start TX empty interrupt     */    SNGKS32C_SIO_REG_WRITE(pChan,SNGKS32C_UTXBUF,outchar);    /* Interrupt mode is allowed */    /*SNGKS32C_SIO_REG_WRITE(pChan,SNGKS32C_UCON,UCON_RX|UCON_TX|UCON_BREAK);*/	/* Amine: deleted and added */    SNGKS32C_SIO_REG_WRITE(pChan,SNGKS32C_UCON,UCON_TX_LEVEL|UCON_RX|UCON_TX|0x80);    SNGKS32C_SIO_REG_READ(pChan,SNGKS32C_USTAT, status);        while ((status & USTAT_TX_READY) != USTAT_TX_READY)        SNGKS32C_SIO_REG_READ(pChan,SNGKS32C_USTAT, status); /* Amine: added */    /*SNGKS32C_SIO_REG_WRITE(pChan,SNGKS32C_UCON,UCON_RX|UCON_TX);*/	/* Amine: deleted and added */    SNGKS32C_SIO_REG_WRITE(pChan,SNGKS32C_UCON,UCON_TX_LEVEL|UCON_RX|UCON_TX|0x80);    sngks32cIntrMode = TRUE;    }/******************************************************************************** sngks32cIntRcv - handle a channel's receive-character interrupt** RETURNS: N/A*/ void sngks32cIntRcv    (    SNGKS32C_CHAN *    pChan        /* channel generating the interrupt */    )    {    char            inChar;    UINT32        status;    FAST int     oldlevel;    		/* Amine: added */ 	oldlevel = intLock ();			/* Amine: added */    /*     * Grab the input character from the chip and hand it off via a     * callback. For chips with input FIFO's it is more efficient     * to empty the entire FIFO here.     */    /*SNGKS32C_SIO_REG_READ(pChan,SNGKS32C_USTAT, status);    if((status & USTAT_RX_READY) == USTAT_RX_READY)        {        SNGKS32C_SIO_REG_READ(pChan,SNGKS32C_URXBUF, inChar);        (*pChan->putRcvChar) (pChan->putRcvArg, inChar);        }*/	/* Amine: deleted and added, 循環(huán)處理FIFO */    while(1){		SNGKS32C_SIO_REG_READ(pChan,S3C44B0X_UFSTAT, status);    	if((status & UFSTAT_RX_COUNT) == 0) break;        SNGKS32C_SIO_REG_READ(pChan,SNGKS32C_URXBUF, inChar);        (*pChan->putRcvChar) (pChan->putRcvArg, inChar);    }		intUnlock (oldlevel);			/* Amine: added */    }static int sending = 0;		/* Amine: added */		/******************************************************************************** sngks32cIntTx - handle a channels transmitter-ready interrupt** RETURNS: N/A*/ void sngks32cIntTx    (    SNGKS32C_CHAN *    pChan        /* channel generating the interrupt */    )    {    char      outChar;    UINT32    status;    FAST int     oldlevel; 	/* Amine: added */    /*     * If there's a character to transmit then write it out, else reset     * the transmitter. For chips with output FIFO's it is more efficient     * to fill the entire FIFO here.     */    /*SNGKS32C_SIO_REG_READ(pChan,SNGKS32C_USTAT, status);        if((status & USTAT_TX_READY) != USTAT_TX_READY)            return;*/	/* Amine: deleted and added, 針對FIFO */ 	SNGKS32C_SIO_REG_READ(pChan,S3C44B0X_UFSTAT, status);		if((status & UFSTAT_TX_FULL) == UFSTAT_TX_FULL) 		return;	oldlevel = intLock ();	/* Amine: added */    if ((*pChan->getTxChar) (pChan->getTxArg, &outChar) != ERROR){        SNGKS32C_SIO_REG_WRITE(pChan, SNGKS32C_UTXBUF, outChar);		while(1){			/* Amine: added */			SNGKS32C_SIO_REG_READ(pChan,S3C44B0X_UFSTAT, status);        		if((status & UFSTAT_TX_FULL) == UFSTAT_TX_FULL) break;			if ((*pChan->getTxChar) (pChan->getTxArg, &outChar) == ERROR) break;			SNGKS32C_SIO_REG_WRITE(pChan, SNGKS32C_UTXBUF, outChar);		}	    }	    else        {            intDisable (pChan->intLevelTx);		sending = 0;		/* Amine: added */        /**(UINT32 *) S3C44B0X_INTPEND = (1 << pChan->intLevelTx);*/		/* Amine: deleted and added */		*(UINT32 *) S3C44B0X_I_ISPC = (1 << pChan->intLevelTx);        }    intUnlock (oldlevel);    }/******************************************************************************** sngks32cTxStartup - start the interrupt transmitter** RETURNS: OK on success, ENOSYS if the device is polled-only, or* EIO on hardware error.*/LOCAL int sngks32cTxStartup    (    SIO_CHAN * pSioChan                 /* channel to start */    )    {    char      outChar;			/* Amine: added */    UINT32    status;			/* Amine: added */    FAST int     oldlevel;    	/* Amine: added */    SNGKS32C_CHAN * pChan = (SNGKS32C_CHAN *)pSioChan;	/* Amine: deleted */    /**(UINT32 *) SNGKS32C_INTPENDTST |= (1 << pChan->intLevelTx);*/	/* Amine: added */	SNGKS32C_SIO_REG_READ(pChan,S3C44B0X_UFSTAT, status);        if((status & UFSTAT_TX_FULL) == UFSTAT_TX_FULL)            return (OK);	if(sending == 1) return OK;    oldlevel = intLock ();	    intEnable (pChan->intLevelTx);	/* Amine: added */	sending = 1;    if ((*pChan->getTxChar) (pChan->getTxArg, &outChar) != ERROR)        SNGKS32C_SIO_REG_WRITE(pChan, SNGKS32C_UTXBUF, outChar);    intUnlock (oldlevel);    return (OK);    }/******************************************************************************** sngks32cCallbackInstall - install ISR callbacks to get/put chars** This driver allows interrupt callbacks for transmitting characters* and receiving characters. In general, drivers may support other* types of callbacks too.** RETURNS: OK on success, or ENOSYS for an unsupported callback type.*/ LOCAL int sngks32cCallbackInstall    (    SIO_CHAN *    pSioChan,               /* channel */    int           callbackType,           /* type of callback */    STATUS        (*callback)(),          /* callback */    void *        callbackArg             /* parameter to callback */    )    {    SNGKS32C_CHAN * pChan = (SNGKS32C_CHAN *)pSioChan;    switch (callbackType)    {    case SIO_CALLBACK_GET_TX_CHAR:        pChan->getTxChar    = callback;        pChan->getTxArg     = callbackArg;        return (OK);    case SIO_CALLBACK_PUT_RCV_CHAR:        pChan->putRcvChar    = callback;        pChan->putRcvArg     = callbackArg;        return (OK);    default:        return (ENOSYS);    }    }/********************************************************************************* sngks32cPollOutput - output a character in polled mode** RETURNS: OK if a character arrived, EIO on device error, EAGAIN* if the output buffer if full. ENOSYS if the device is* interrupt-only.*/LOCAL int sngks32cPollOutput    (    SIO_CHAN *pSioChan,    char      outChar    )    {    SNGKS32C_CHAN * pChan = (SNGKS32C_CHAN *)pSioChan;    UINT32    status;    /* is the transmitter ready to accept a character? */    SNGKS32C_SIO_REG_READ (pChan, SNGKS32C_USTAT, status);    if ((status & USTAT_TX_READY) == 0x00)        return (EAGAIN);    /* write out the character */    SNGKS32C_SIO_REG_WRITE(pChan, SNGKS32C_UTXBUF, outChar);    return (OK);    }/******************************************************************************** sngks32cPollInput - poll the device for input** RETURNS: OK if a character arrived, EIO on device error, EAGAIN* if the input buffer if empty, ENOSYS if the device is* interrupt-only.*/LOCAL int sngks32cPollInput    (    SIO_CHAN *    pSioChan,    char *        thisChar    )    {    SNGKS32C_CHAN * pChan = (SNGKS32C_CHAN *)pSioChan;    UINT32    status;    SNGKS32C_SIO_REG_READ (pChan,SNGKS32C_USTAT, status);    if ((status & USTAT_RX_AVAIL) == 0x00)        return (EAGAIN);    /* no input available at this time */    /* got a character */    SNGKS32C_SIO_REG_READ(pChan, SNGKS32C_URXBUF, *thisChar);    return (OK);    }/******************************************************************************** sngks32cModeSet - toggle between interrupt and polled mode** RETURNS: OK on success, EIO on unsupported mode.*/LOCAL int sngks32cModeSet    (    SNGKS32C_CHAN * pChan,        /* channel */    uint_t          newMode       /* new mode */    )    {    UINT32    temp;    if ((newMode != SIO_MODE_POLL) && (newMode != SIO_MODE_INT))        return (EIO);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品免费| 国产一区二区三区香蕉| 精品sm捆绑视频| eeuss鲁片一区二区三区| 亚洲成人手机在线| 国产片一区二区三区| 欧美精品一级二级三级| 成人高清视频在线| 国产综合久久久久久鬼色| 亚洲国产精品精华液网站| 国产精品日韩精品欧美在线| 日韩美女视频一区二区在线观看| 久久久九九九九| 欧美一区二区视频观看视频| 91麻豆成人久久精品二区三区| 国产成人精品亚洲午夜麻豆| 蜜臀av性久久久久蜜臀av麻豆| 亚洲影院理伦片| 中文字幕日本不卡| 国产欧美日韩精品在线| 精品国免费一区二区三区| 欧美精品电影在线播放| 在线影院国内精品| 99国产欧美另类久久久精品| 国产精品影视在线观看| 免费成人av在线| 亚洲国产欧美在线| 一二三区精品视频| 国产精品免费aⅴ片在线观看| xfplay精品久久| 91精品国产欧美一区二区| 在线观看欧美精品| 成人涩涩免费视频| 成人一级视频在线观看| 国产河南妇女毛片精品久久久 | 椎名由奈av一区二区三区| 国产女人18毛片水真多成人如厕 | 亚洲精品免费在线观看| 亚洲欧洲国产日本综合| 亚洲欧美一区二区在线观看| 国产精品久久久久久久午夜片 | 91精品在线免费| 欧美久久久久中文字幕| 欧美一区二区视频观看视频 | 国产欧美精品日韩区二区麻豆天美| 日韩女优电影在线观看| 精品福利在线导航| 久久免费精品国产久精品久久久久 | 国产99久久久国产精品潘金| 国产激情视频一区二区三区欧美 | 美女任你摸久久| 久久精品国产999大香线蕉| 日韩1区2区3区| 蜜臀99久久精品久久久久久软件| 蜜臀av性久久久久蜜臀aⅴ| 精品一区二区国语对白| 国产成人精品免费视频网站| 成人黄色av电影| 色拍拍在线精品视频8848| 91黄色免费观看| 6080国产精品一区二区| 精品福利在线导航| 欧美激情一区二区三区四区| 中文字幕日韩一区二区| 亚洲最色的网站| 日韩国产欧美一区二区三区| 国内精品久久久久影院薰衣草 | 欧美精品一二三| 久久影院视频免费| 亚洲视频在线观看一区| 婷婷激情综合网| 国产老肥熟一区二区三区| 97精品久久久午夜一区二区三区| 欧洲在线/亚洲| 日韩欧美另类在线| 国产精品三级电影| 午夜精品aaa| 国产酒店精品激情| 色琪琪一区二区三区亚洲区| 日韩欧美中文一区二区| 国产欧美精品一区二区色综合朱莉| 一区二区三区不卡在线观看| 久久精品国产**网站演员| 蜜桃视频免费观看一区| 麻豆精品新av中文字幕| 国产精品77777竹菊影视小说| eeuss鲁片一区二区三区在线看| 91国偷自产一区二区开放时间| 欧美猛男超大videosgay| 久久综合久久综合亚洲| 亚洲日本在线a| 成人激情视频网站| 5858s免费视频成人| 欧美日韩精品一区二区| 日韩一区二区三区在线视频| 国产日本一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 美美哒免费高清在线观看视频一区二区 | 亚洲成人午夜电影| 国产丶欧美丶日本不卡视频| 久久国产夜色精品鲁鲁99| 日韩一区精品视频| 国产做a爰片久久毛片| 国产乱码精品一区二区三区忘忧草| 精品一区二区三区日韩| 日韩二区三区四区| 午夜在线电影亚洲一区| 狠狠色丁香婷婷综合| 7777精品伊人久久久大香线蕉完整版 | 亚洲三级在线免费观看| 亚洲mv在线观看| bt欧美亚洲午夜电影天堂| 日韩天堂在线观看| 一区二区在线看| 懂色av一区二区夜夜嗨| 日韩午夜激情电影| 亚洲国产日韩av| 成人av在线播放网站| 日韩欧美激情四射| 亚洲成人自拍偷拍| 日本精品免费观看高清观看| 中日韩免费视频中文字幕| 精品在线视频一区| 日韩欧美成人午夜| 日韩精品91亚洲二区在线观看| 在线日韩av片| 亚洲精品日韩综合观看成人91| 成人app软件下载大全免费| 久久久精品国产免大香伊| 日韩高清欧美激情| 欧美肥大bbwbbw高潮| 亚洲国产精品一区二区www在线| 99v久久综合狠狠综合久久| 中文字幕不卡在线播放| 国产精品一区在线| 久久久久九九视频| 国产一二三精品| 国产午夜精品在线观看| 国内久久精品视频| 久久精品一区二区三区不卡牛牛| 精品亚洲国产成人av制服丝袜| 欧美成人午夜电影| 精品午夜一区二区三区在线观看| 精品国产精品网麻豆系列| 国内成人精品2018免费看| 久久久亚洲精品石原莉奈| 国产一区二区三区久久悠悠色av| 欧美刺激脚交jootjob| 激情五月播播久久久精品| 久久久电影一区二区三区| 国产精品911| 亚洲日本韩国一区| 欧美性色aⅴ视频一区日韩精品| 亚洲欧美日韩在线不卡| 在线这里只有精品| 午夜久久久影院| 日韩欧美成人激情| 丰满放荡岳乱妇91ww| 亚洲视频你懂的| 欧美日韩高清影院| 久久国产欧美日韩精品| 久久久久青草大香线综合精品| 成人综合婷婷国产精品久久蜜臀| 国产精品精品国产色婷婷| 色八戒一区二区三区| 日韩精品乱码免费| 国产日韩欧美制服另类| 不卡高清视频专区| 亚洲国产精品一区二区久久| 日韩免费成人网| 成人精品国产福利| 亚洲福中文字幕伊人影院| 日韩精品一区国产麻豆| 粉嫩高潮美女一区二区三区| 一区二区三区丝袜| 欧美成人精品1314www| gogogo免费视频观看亚洲一| 午夜国产精品影院在线观看| 久久久久久麻豆| 色av成人天堂桃色av| 狠狠色丁香久久婷婷综| 最新不卡av在线| 69久久夜色精品国产69蝌蚪网| 国产sm精品调教视频网站| 亚洲综合免费观看高清完整版在线| 日韩欧美三级在线| 色香蕉成人二区免费| 捆绑调教美女网站视频一区| 国产精品久久久久久久久免费相片 | 毛片av中文字幕一区二区| 亚洲国产成人私人影院tom| 欧美日韩在线播放三区四区| 国产成人av资源| 亚洲1区2区3区视频| 欧美国产一区二区| 91精品午夜视频| www.日韩精品| 国产一区二区不卡在线| 亚洲国产婷婷综合在线精品| 国产女人aaa级久久久级 |