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

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

?? sngks32csio.c.bak

?? tornado開發(fā) 三星s3c44b0x開發(fā)板 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 思創(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         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, 循環(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 */    )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人app网站| 精品欧美一区二区久久| 亚洲国产一区二区三区| 欧美婷婷六月丁香综合色| 亚洲中国最大av网站| 欧美日韩视频在线观看一区二区三区 | 国产成人综合精品三级| 国产亚洲精品福利| 91欧美一区二区| 午夜精品成人在线视频| 日韩欧美一级在线播放| 国产一区二区剧情av在线| 国产精品免费av| 在线免费av一区| 久久精品国产秦先生| 国产欧美日韩不卡免费| 在线影院国内精品| 久久丁香综合五月国产三级网站 | 亚洲女爱视频在线| 5858s免费视频成人| 国产一区二区三区综合| 中文字幕日本乱码精品影院| 欧美午夜精品电影| 韩国在线一区二区| 亚洲免费看黄网站| 日韩视频免费观看高清完整版| 国产毛片精品国产一区二区三区| 综合久久久久综合| 日韩一区二区三区三四区视频在线观看| 国内一区二区视频| 亚洲黄色小说网站| 精品久久99ma| 91麻豆国产自产在线观看| 日韩在线一区二区三区| 国产欧美日韩激情| 欧美日韩成人综合天天影院| 国产麻豆视频一区| 亚洲伊人色欲综合网| 久久久精品国产免大香伊| 91国在线观看| 国产成人无遮挡在线视频| 亚洲在线免费播放| 久久精品亚洲一区二区三区浴池 | 国产精品久久久久久久久快鸭| 欧美亚洲精品一区| 国产精一区二区三区| 亚洲香肠在线观看| 国产日本欧洲亚洲| 欧美精品亚洲一区二区在线播放| 国产精品一区二区黑丝| 性久久久久久久久久久久| 国产日韩精品一区二区浪潮av | 91麻豆精品91久久久久久清纯| 国产盗摄女厕一区二区三区| 婷婷丁香激情综合| 国产精品伦理在线| 日韩欧美久久久| 欧美在线free| 成人免费毛片app| 日韩成人一区二区| 亚洲美女区一区| 久久久亚洲精华液精华液精华液| 欧美日韩日本视频| av激情亚洲男人天堂| 黄一区二区三区| 视频一区中文字幕| 亚洲三级电影网站| 亚洲国产激情av| 精品国产乱码久久久久久久久| 欧美在线999| 92国产精品观看| 国产成人av影院| 久久99精品久久只有精品| 亚洲成av人片在线观看| 中文字幕制服丝袜一区二区三区| 久久综合资源网| 91精品婷婷国产综合久久性色| 色悠久久久久综合欧美99| 国产成人精品亚洲777人妖| 久久国产精品色| 丝袜亚洲另类欧美综合| 一区二区在线免费| 亚洲欧洲美洲综合色网| 久久精品视频免费观看| 欧美成人欧美edvon| 4438亚洲最大| 精品视频一区 二区 三区| 色综合色狠狠综合色| 成人的网站免费观看| 国产成人综合自拍| 国产精品中文字幕日韩精品| 久热成人在线视频| 美女视频网站久久| 蜜桃av噜噜一区| 日本va欧美va瓶| 肉色丝袜一区二区| 午夜av一区二区三区| 亚洲自拍与偷拍| 亚洲最大成人网4388xx| 亚洲男人的天堂网| 一区二区三区成人| 亚洲自拍偷拍九九九| 亚洲国产中文字幕| 亚洲高清免费在线| 亚洲成av人在线观看| 亚洲成人在线网站| 亚洲风情在线资源站| 亚洲一区二区精品3399| 亚洲一区中文日韩| 午夜伦欧美伦电影理论片| 视频一区欧美日韩| 日韩国产精品久久久久久亚洲| 日本不卡视频在线观看| 日韩1区2区日韩1区2区| 免播放器亚洲一区| 乱一区二区av| 国产精品1024| 成人动漫一区二区在线| 一本一道久久a久久精品综合蜜臀| 91亚洲国产成人精品一区二区三| 91一区二区在线| 一本到三区不卡视频| 欧美日韩一区二区欧美激情| 911国产精品| 精品国内片67194| 欧美激情一区二区三区蜜桃视频 | 337p亚洲精品色噜噜噜| 91精品免费在线| 精品理论电影在线| 欧美国产激情一区二区三区蜜月| 中文字幕亚洲视频| 一区二区三区在线免费视频| 午夜精品aaa| 久久99精品久久久久久国产越南| 国产乱子伦一区二区三区国色天香| 国产成人精品综合在线观看 | 一本久道久久综合中文字幕| 欧美日韩一区二区在线观看 | 欧美电影免费观看高清完整版 | 青草国产精品久久久久久| 久久国产尿小便嘘嘘尿| 国产传媒欧美日韩成人| 色系网站成人免费| 欧美一区二区三区日韩| 久久久www成人免费毛片麻豆| 国产精品久久网站| 亚洲妇女屁股眼交7| 激情综合色播激情啊| 成人激情av网| 欧美日韩你懂得| 久久久不卡网国产精品二区| 亚洲免费av观看| 日韩av高清在线观看| 国产精品自拍三区| 在线观看国产日韩| 欧美成人一级视频| 亚洲同性同志一二三专区| 午夜av电影一区| 丁香一区二区三区| 欧美片网站yy| 国产日韩欧美精品在线| 亚洲一区二区三区四区不卡| 久久97超碰国产精品超碰| 99久久精品国产一区| 欧美一区二区视频观看视频| 国产欧美精品日韩区二区麻豆天美| 一区二区三区国产| 国产美女一区二区三区| 在线观看亚洲一区| 久久亚洲二区三区| 亚洲一区二区三区中文字幕| 激情久久五月天| 欧美三级在线视频| 国产日产亚洲精品系列| 日韩国产一二三区| 不卡一二三区首页| 精品久久久久久无| 亚洲午夜激情网站| 国产不卡视频在线播放| 欧美福利视频一区| 1024成人网| 国内国产精品久久| 欧美日韩激情一区二区| 国产精品理论在线观看| 全国精品久久少妇| 在线欧美小视频| 国产午夜亚洲精品羞羞网站| 午夜在线电影亚洲一区| jizzjizzjizz欧美| 26uuu亚洲综合色| 亚洲成国产人片在线观看| 成人动漫一区二区三区| 2020国产成人综合网| 婷婷中文字幕一区三区| 99久久精品情趣| 久久你懂得1024| 欧美96一区二区免费视频| 91一区二区在线观看| 久久精品一区二区三区四区| 日本va欧美va瓶|