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

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

?? sngks32csio.c.bak

?? tornado開發 三星s3c44b0x開發板 bsp
?? BAK
?? 第 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 思創S3C44B0X黃金開發板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         1200#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, 循環處理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 */    )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲主播在线观看| 久久成人麻豆午夜电影| 欧美丰满嫩嫩电影| 丁香六月综合激情| 六月婷婷色综合| 樱桃国产成人精品视频| 国产日韩欧美精品电影三级在线| 欧美日韩精品一二三区| 99精品国产一区二区三区不卡| 久久99日本精品| 午夜伊人狠狠久久| 亚洲精品欧美综合四区| 国产精品污www在线观看| 欧美一区二区三区免费视频| 91国偷自产一区二区三区成为亚洲经典 | 久久蜜桃av一区二区天堂| 欧洲色大大久久| hitomi一区二区三区精品| 国产另类ts人妖一区二区| 日本不卡在线视频| 亚洲成av人影院| 亚洲福利一二三区| 一区二区三区在线免费| 中文字幕视频一区| 中文字幕精品一区二区精品绿巨人 | 国产.欧美.日韩| 国模冰冰炮一区二区| 蜜臀99久久精品久久久久久软件| 亚洲第一电影网| 亚洲成人午夜影院| 亚洲午夜免费电影| 亚洲国产精品久久人人爱| 伊人夜夜躁av伊人久久| 中文字幕在线一区免费| 国产精品久久综合| 最新日韩av在线| 亚洲欧美综合另类在线卡通| 中文字幕一区二区三区四区| 中文在线一区二区| 日韩一区中文字幕| 亚洲综合成人在线视频| 亚洲综合免费观看高清完整版| 一区二区三区欧美日韩| 一区二区三区不卡视频在线观看 | 99久久久久久| 91蜜桃网址入口| 精品少妇一区二区三区免费观看| 777色狠狠一区二区三区| 91精品国产色综合久久不卡电影| 91精品国产全国免费观看| 日韩欧美一二区| 久久精品人人爽人人爽| 国产精品福利一区二区三区| 亚洲人成小说网站色在线| 亚洲精品中文在线| 亚洲成人你懂的| 久久成人综合网| jlzzjlzz亚洲女人18| 在线观看国产精品网站| 91精品国产入口| 国产亚洲欧美日韩在线一区| 国产精品不卡在线| 亚洲综合男人的天堂| 麻豆91免费观看| 懂色av一区二区三区免费观看| 91成人免费在线| 欧美一区二区成人6969| 精品福利在线导航| 综合精品久久久| 污片在线观看一区二区| 国产一区二区三区黄视频| 成人99免费视频| 欧美午夜影院一区| 久久综合精品国产一区二区三区| 国产精品电影院| 天堂va蜜桃一区二区三区漫画版| 日韩—二三区免费观看av| 国产一区二区三区日韩| 色综合av在线| www亚洲一区| 一区二区三区 在线观看视频 | 国产精品综合久久| 色激情天天射综合网| 日韩一级在线观看| 亚洲人精品午夜| 久久爱另类一区二区小说| 91视频观看视频| 日韩一区二区电影在线| 中文字幕亚洲一区二区va在线| 天天综合日日夜夜精品| 成人app软件下载大全免费| 在线不卡一区二区| 自拍偷拍亚洲综合| 国模套图日韩精品一区二区| 欧美日韩国产一级二级| 国产精品免费丝袜| 久久国产精品99精品国产 | 91麻豆精品国产91| 自拍偷拍亚洲激情| 国产成人日日夜夜| 欧美一级日韩免费不卡| 亚洲精品成人精品456| 国产高清不卡一区| 日韩午夜小视频| 亚洲成人tv网| 91成人在线免费观看| 欧美国产精品中文字幕| 久久精品国产99国产| 欧美日韩亚州综合| 亚洲靠逼com| 不卡电影一区二区三区| 久久久久久**毛片大全| 捆绑调教美女网站视频一区| 欧美午夜精品久久久久久超碰| 国产精品久久久久久亚洲伦| 精品制服美女丁香| 欧美一激情一区二区三区| 亚洲一区视频在线观看视频| 91日韩在线专区| 中文字幕一区二区在线播放 | 99视频热这里只有精品免费| 久久综合网色—综合色88| 日本人妖一区二区| 在线不卡的av| 天天av天天翘天天综合网 | 欧美裸体一区二区三区| 亚洲主播在线播放| 91久久香蕉国产日韩欧美9色| 亚洲免费观看高清在线观看| 成人app软件下载大全免费| 日本一区二区久久| 国产成人精品网址| 欧美韩日一区二区三区| 北岛玲一区二区三区四区| 国产精品久久久久久亚洲毛片| 国产69精品久久777的优势| 欧美国产精品一区二区三区| 国产激情精品久久久第一区二区| 久久久99免费| www.99精品| 亚洲码国产岛国毛片在线| 91美女福利视频| 夜夜嗨av一区二区三区中文字幕| 欧洲在线/亚洲| 日韩国产欧美一区二区三区| 91精品国产91综合久久蜜臀| 免费成人在线视频观看| 欧美刺激午夜性久久久久久久| 久久精品国产77777蜜臀| 久久久久久97三级| 色屁屁一区二区| 婷婷中文字幕一区三区| 日韩精品自拍偷拍| 国产精品18久久久久| 日韩理论在线观看| 精品视频在线免费观看| 奇米综合一区二区三区精品视频 | 亚洲欧洲精品一区二区精品久久久 | 欧美亚洲综合色| 男女视频一区二区| 久久精品一级爱片| 色婷婷国产精品综合在线观看| 日韩福利视频导航| 欧美经典一区二区| 91传媒视频在线播放| 久久99精品国产麻豆婷婷| 中文字幕欧美日本乱码一线二线| 日本黄色一区二区| 久久不见久久见免费视频1 | 老司机精品视频导航| 中文字幕的久久| 色香蕉成人二区免费| 伦理电影国产精品| 日韩一区有码在线| 欧美大黄免费观看| 色猫猫国产区一区二在线视频| 日韩中文字幕亚洲一区二区va在线 | 在线精品视频小说1| 美国毛片一区二区三区| 国产精品电影一区二区三区| 日韩丝袜美女视频| 成人免费三级在线| 日本亚洲免费观看| 亚洲人成精品久久久久久| 日韩精品在线一区二区| 91一区二区三区在线播放| 久久疯狂做爰流白浆xx| 亚洲精品国产成人久久av盗摄| 精品第一国产综合精品aⅴ| 91免费在线播放| 国产乱码字幕精品高清av| 亚洲成a人片综合在线| 欧美国产日韩亚洲一区| 日韩女优视频免费观看| 在线观看欧美精品| 懂色av中文字幕一区二区三区| 日韩—二三区免费观看av| 亚洲另类在线制服丝袜| 国产午夜精品久久久久久免费视| 欧美一区二区成人6969|