亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩精品资源二区在线| 国产精品白丝jk白祙喷水网站| 欧美激情中文字幕| 久久精品综合网| wwww国产精品欧美| 日韩欧美自拍偷拍| 精品久久久久久久一区二区蜜臀| 91超碰这里只有精品国产| 欧美日韩激情一区二区三区| 欧美精品色一区二区三区| 91精品免费观看| 日韩欧美一区二区视频| 欧美mv日韩mv国产网站app| 日韩欧美高清一区| 亚洲精品一区二区三区99| 久久久久亚洲综合| 国产精品美女www爽爽爽| 中文字幕一区二区三区乱码在线| 中文字幕一区二区三区乱码在线| 中文字幕一区二区三区在线不卡| 激情小说亚洲一区| 激情综合网最新| 国产高清无密码一区二区三区| 国产福利一区二区| 91在线观看一区二区| 日本二三区不卡| 欧美丰满美乳xxx高潮www| 欧美精品成人一区二区三区四区| 日韩一卡二卡三卡四卡| 国产午夜精品久久久久久久 | 专区另类欧美日韩| 亚洲永久精品国产| 美腿丝袜亚洲色图| 国产91精品精华液一区二区三区| 一本高清dvd不卡在线观看 | 亚洲美女免费在线| 天堂久久久久va久久久久| 久久电影国产免费久久电影| 成熟亚洲日本毛茸茸凸凹| 91福利视频久久久久| 欧美大度的电影原声| 亚洲欧洲日韩在线| 免费高清在线一区| 不卡一区二区三区四区| 欧美喷潮久久久xxxxx| 国产午夜一区二区三区| 亚洲国产日产av| 国产精品99久久久久久似苏梦涵| 色综合久久久久| 欧美不卡视频一区| 亚洲精品网站在线观看| 日本伊人色综合网| 91碰在线视频| 26uuuu精品一区二区| 亚洲综合一二三区| 国产精品一区二区在线看| 欧美日韩在线综合| 亚洲国产精品ⅴa在线观看| 午夜精品123| www.66久久| 精品国产制服丝袜高跟| 亚洲综合另类小说| 成人三级在线视频| 精品国产人成亚洲区| 亚洲午夜三级在线| 99re这里只有精品6| 精品处破学生在线二十三| 亚洲6080在线| 色哟哟精品一区| 国产精品美女一区二区| 精品在线视频一区| 欧美日韩国产区一| 一区二区三区欧美| 成人黄色综合网站| 国产亚洲精品超碰| 麻豆国产欧美一区二区三区| 欧美日韩亚州综合| 悠悠色在线精品| 91免费版pro下载短视频| 精品亚洲成a人| 欧美日本不卡视频| 一区二区三区色| caoporm超碰国产精品| 久久精品视频一区| 国产在线乱码一区二区三区| 91精品国产aⅴ一区二区| 亚洲一区二区三区在线看| 91蜜桃在线免费视频| 自拍偷自拍亚洲精品播放| 成人免费av网站| 日本一区二区动态图| 国精产品一区一区三区mba桃花| 91精品麻豆日日躁夜夜躁| 午夜精品一区在线观看| 欧美日韩一区精品| 一区二区不卡在线播放 | 久久久久久久久99精品| 久久精品72免费观看| 日韩你懂的在线播放| 日本最新不卡在线| 日韩亚洲国产中文字幕欧美| 天堂一区二区在线| 日韩一级大片在线| 九九视频精品免费| 久久色在线观看| 国产成人无遮挡在线视频| 久久久久久久久99精品| 国产91精品欧美| 日韩久久一区二区| 色香蕉久久蜜桃| 午夜精品久久久久久久久久久| 欧美日韩一区二区不卡| 天天影视色香欲综合网老头| 777午夜精品视频在线播放| 蜜臀a∨国产成人精品| 日韩精品专区在线影院观看 | 欧美情侣在线播放| 久草这里只有精品视频| 国产亚洲一区二区在线观看| 床上的激情91.| 亚洲精品日韩综合观看成人91| 欧美亚洲免费在线一区| 偷拍与自拍一区| 精品国产不卡一区二区三区| 国产ts人妖一区二区| 亚洲美女视频在线| 在线不卡欧美精品一区二区三区| 免费成人在线网站| 欧美激情一区二区三区全黄| 91丨porny丨最新| 日本最新不卡在线| 国产片一区二区三区| 色老头久久综合| 免费在线观看成人| 欧美国产日韩精品免费观看| 色老头久久综合| 精品系列免费在线观看| 一色桃子久久精品亚洲| 欧美日韩国产综合草草| 国产乱码精品1区2区3区| 亚洲欧美在线aaa| 欧美一区二区三区精品| 成人h动漫精品| 日韩电影在线看| 国产精品不卡在线| 欧美一级高清片| 91在线码无精品| 蜜臂av日日欢夜夜爽一区| 国产精品午夜电影| 欧美一区二区精品在线| www.亚洲精品| 欧美一区二区三区白人| 国产成人午夜视频| 香蕉影视欧美成人| 亚洲欧洲三级电影| 精品欧美久久久| 91福利在线免费观看| 国产精品99久久久久久久vr| 亚洲成人动漫在线观看| 国产精品久久久久影视| 欧美成人乱码一区二区三区| 日本高清成人免费播放| 国产精品资源网站| 日本亚洲免费观看| 亚洲四区在线观看| 久久婷婷一区二区三区| 欧美日韩国产欧美日美国产精品| 成人性生交大片免费看视频在线| 奇米影视7777精品一区二区| 亚洲免费电影在线| 国产欧美日韩激情| 日韩精品一区二| 欧美精品久久久久久久多人混战 | 性做久久久久久久免费看| 国产精品国产自产拍高清av| 精品久久久久一区二区国产| 欧美日韩视频在线观看一区二区三区| 国产成人av网站| 美女视频免费一区| 亚洲h在线观看| 一区二区久久久久| 亚洲欧美欧美一区二区三区| 国产精品色呦呦| 久久久美女艺术照精彩视频福利播放| 欧美在线不卡视频| 一本大道久久a久久精二百| 成人精品电影在线观看| 国产精品69毛片高清亚洲| 裸体一区二区三区| 日韩国产欧美在线播放| 亚洲一区二区三区四区五区中文| 亚洲天堂福利av| 国产精品久久久爽爽爽麻豆色哟哟 | 91网站最新网址| 成熟亚洲日本毛茸茸凸凹| 国产精品一区二区无线| 精品一区二区在线免费观看| 日本91福利区| 久久99最新地址| 国产综合一区二区|