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

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

?? sci.c

?? ucosII在TMS320LF2407成功移植的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                              Shanghai Maritime University
*                                Pudong Avenue 1550#
*
*                            (c)Copyright 2005,SMSC,Shanghai,China
*                                  All Rights Reserved
*
*
*
*
* Filename   : SCI.C
* Programmer : Chen Jutao (Modified from Jean J. Labrosse's COMMRTOS.c and COMMBGND.c 
* Description : This file provides the serial communication functions.
*
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                                     INCLUDES
*********************************************************************************************************
*/

#include "C2407_REG_C.h"
#include "includes.h"
#include "SCI_CFG.H"

/*
*********************************************************************************************************
*                                               LOCAL FUNCTION DECLARATION
*********************************************************************************************************
*/
static void CommTxIntTrigger(void);
/*
*********************************************************************************************************
*                                                    DATA TYPES
*********************************************************************************************************
*/

typedef struct {
    INT16U     RingBufRxCtr;                /* Number of characters in the Rx ring buffer              */
#if MULTITASK == 1
    OS_EVENT  *RingBufRxSem;                /* Pointer to Rx semaphore                                 */
#endif
    INT8U     *RingBufRxInPtr;              /* Pointer to where next character will be inserted        */
    INT8U     *RingBufRxOutPtr;             /* Pointer from where next character will be extracted     */
    INT8U      RingBufRx[COMM_RX_BUF_SIZE]; /* Ring buffer character storage (Rx)                      */
    INT16U     RingBufTxCtr;                /* Number of characters in the Tx ring buffer              */
#if MULTITASK == 1
    OS_EVENT  *RingBufTxSem;                /* Pointer to Tx semaphore                                 */
#endif
    INT8U     *RingBufTxInPtr;              /* Pointer to where next character will be inserted        */
    INT8U     *RingBufTxOutPtr;             /* Pointer from where next character will be extracted     */
    INT8U      RingBufTx[COMM_TX_BUF_SIZE]; /* Ring buffer character storage (Tx)                      */
} COMM_RING_BUF;

/*
*********************************************************************************************************
*                                            GLOBAL VARIABLES
*********************************************************************************************************
*/

COMM_RING_BUF  CommBuf;
static volatile INT16U *sciccr = SCICCR;
static volatile INT16U *scictl1 = SCICTL1;
static volatile INT16U *scictl2 = SCICTL2;
static volatile INT16U *scihbaud = SCIHBAUD;
static volatile INT16U *scilbaud = SCILBAUD;
static volatile INT16U *scipri = SCIPRI;
static volatile INT16U *scirxbuf = SCIRXBUF;
static volatile INT16U *scitxbuf = SCITXBUF;

/*
************************************************************************************************************
*/


#if MULTITASK == 1   /* In Multitasking mode */
/*
*********************************************************************************************************
*                                    REMOVE CHARACTER FROM RING BUFFER
*                                           ( In Singletasking mode )
*
* Description : This function is called by your application to obtain a character from the communications
*               channel.  The function will wait for a character to be received on the serial channel or
*               until the function times out.
* Arguments   : 'to'    is the amount of time (in clock ticks) that the calling function is willing to
*                       wait for a character to arrive.  If you specify a timeout of 0, the function will
*                       wait forever for a character to arrive.
*                     'err'   is a pointer to where an error code will be placed:
*                           *err is set to COMM_NO_ERR     if a character has been received
*                           *err is set to COMM_RX_TIMEOUT if a timeout occurred
* Returns     : The character in the buffer (or NUL if a timeout occurred)
*********************************************************************************************************
*/
INT8U  CommGetChar (INT16U to, INT8U *err)
{
    INT8U          c;
    INT8U          oserr;
    COMM_RING_BUF *pbuf;
    pbuf = & CommBuf;
	
    OSSemPend(pbuf->RingBufRxSem, to, &oserr);             /* Wait for character to arrive             */
    if (oserr == OS_TIMEOUT) {                             /* See if characters received within timeout*/
        *err = COMM_RX_TIMEOUT;                            /* No, return error code                    */
        return (NUL);
    } else {
        OS_ENTER_CRITICAL();
        pbuf->RingBufRxCtr--;                              /* Yes, decrement character count           */
        c = *pbuf->RingBufRxOutPtr++;                      /* Get character from buffer                */
        if (pbuf->RingBufRxOutPtr == &pbuf->RingBufRx[COMM_RX_BUF_SIZE]) {     /* Wrap OUT pointer     */
            pbuf->RingBufRxOutPtr = &pbuf->RingBufRx[0];
        }
        OS_EXIT_CRITICAL();
        *err = COMM_NO_ERR;
        return (c);
    }
	

}

#else  /* In Singletasking mode */
/*
*********************************************************************************************************
*                                    REMOVE CHARACTER FROM RING BUFFER
*                                            (In Singletasking mode )
*
* Description : This function is called by your application to obtain a character from the communications
*               channel.
* Arguments   :  'err'   is a pointer to where an error code will be placed:
*                           *err is set to COMM_NO_ERR   if a character is available
*                           *err is set to COMM_RX_EMPTY if the Rx buffer is empty
* Returns     : The character in the buffer (or NUL if the buffer is empty)
*********************************************************************************************************
*/
INT8U  CommGetChar (INT8U *err)
{
  
    INT8U          c;
    COMM_RING_BUF *pbuf;
    
    pbuf = & CommBuf;
   OS_ENTER_CRITICAL();
    if (pbuf->RingBufRxCtr > 0) {                          /* See if buffer is empty                   */
        pbuf->RingBufRxCtr--;                              /* No, decrement character count            */
        c = *pbuf->RingBufRxOutPtr++;                      /* Get character from buffer                */
        if (pbuf->RingBufRxOutPtr == &pbuf->RingBufRx[COMM_RX_BUF_SIZE]) {     /* Wrap OUT pointer     */
            pbuf->RingBufRxOutPtr = &pbuf->RingBufRx[0];
        }
        OS_EXIT_CRITICAL();
        *err = COMM_NO_ERR;
        return (c);
    } else {
        OS_EXIT_CRITICAL();
        *err = COMM_RX_EMPTY;
        c    = NUL;                                        /* Buffer is empty, return NUL              */
        return (c);
    }
}

#endif

/*
*********************************************************************************************************
*                                  GET TX CHARACTER FROM RING BUFFER
*
*
* Description : This function is called by the Tx ISR to extract the next character from the Tx buffer.
*               The function returns FALSE if the buffer is empty after the character is extracted from
*               the buffer.  This is done to signal the Tx ISR to disable interrupts because this is the
*               last character to send.
* Arguments   :  'err'   is a pointer to where an error code will be deposited:
*                           *err is set to COMM_NO_ERR         if at least one character was available
*                                                              from the buffer.
*                           *err is set to COMM_TX_EMPTY       if the Tx buffer is empty.
* Returns     : The next character in the Tx buffer or NUL if the buffer is empty.
*********************************************************************************************************
*/

INT8U  CommGetTxChar (INT8U *err)
{
    INT8U          c;
    COMM_RING_BUF *pbuf;

     pbuf = &CommBuf;
            
    if (pbuf->RingBufTxCtr > 0) {                          /* See if buffer is empty                   */
        pbuf->RingBufTxCtr--;                              /* No, decrement character count            */
        c = *pbuf->RingBufTxOutPtr++;                      /* Get character from buffer                */
        if (pbuf->RingBufTxOutPtr == &pbuf->RingBufTx[COMM_TX_BUF_SIZE]) {     /* Wrap OUT pointer     */
            pbuf->RingBufTxOutPtr = &pbuf->RingBufTx[0];
        }
#if MULTITASK == 1
        OSSemPost(pbuf->RingBufTxSem);                     /* Indicate that character will be sent     */
#endif
        *err = COMM_NO_ERR;
        return (c);                                        /* Characters are still available           */
    } else {
        *err = COMM_TX_EMPTY;
        return (NUL);                                      /* Buffer is empty                          */
    }
}


/*
*********************************************************************************************************
*                                  INITIALIZE COMMUNICATIONS MODULE
*
*
* Description : This function is called by your application to initialize the communications module.  You
*               must call this function before calling any other functions.
* Arguments   : none
*********************************************************************************************************
*/

void  CommInit (void)
{
    COMM_RING_BUF *pbuf;


    pbuf                  = &CommBuf;                     /*  Initialize the ring buffer  */
    pbuf->RingBufRxCtr    = 0;
    pbuf->RingBufRxInPtr  = &pbuf->RingBufRx[0];
    pbuf->RingBufRxOutPtr = &pbuf->RingBufRx[0];
#if MULTITASK == 1
    pbuf->RingBufRxSem    = OSSemCreate(0);
#endif
    pbuf->RingBufTxCtr    = 0;
    pbuf->RingBufTxInPtr  = &pbuf->RingBufTx[0];
    pbuf->RingBufTxOutPtr = &pbuf->RingBufTx[0];
#if MULTITASK == 1
    pbuf->RingBufTxSem    = OSSemCreate(COMM_TX_BUF_SIZE);
#endif

}

/*
*********************************************************************************************************
*                                   SEE IF RX CHARACTER BUFFER IS EMPTY
*
*
* Description : This function is called by your application to see if any character is available from the
*               communications channel.  If at least one character is available, the function returns
*               FALSE otherwise, the function returns TRUE.
* Arguments   : viod
* Returns     : TRUE    if the buffer IS empty.
*                   FALSE   if the buffer IS NOT empty or you have specified an incorrect channel.
*********************************************************************************************************
*/

BOOLEAN  CommIsEmpty (void)
{
    BOOLEAN        empty;
    COMM_RING_BUF *pbuf;

   pbuf = &CommBuf;
            
    OS_ENTER_CRITICAL();
    if (pbuf->RingBufRxCtr > 0) {                          /* See if buffer is empty   */
        empty = FALSE;                                     /* Buffer is NOT empty    */
    } else {
        empty = TRUE;                                      /* Buffer is empty   */
    }
    OS_EXIT_CRITICAL();
    return (empty);
}


/*
*********************************************************************************************************
*                                   SEE IF TX CHARACTER BUFFER IS FULL
*
*
* Description : This function is called by your application to see if any more characters can be placed
*               in the Tx buffer.  In other words, this function check to see if the Tx buffer is full.
*               If the buffer is full, the function returns TRUE otherwise, the function returns FALSE.
* Arguments   : NULL
* Returns     : TRUE    if the buffer IS full.
*                   FALSE   if the buffer IS NOT full or you have specified an incorrect channel.
*********************************************************************************************************
*/

BOOLEAN  CommIsFull (void)
{
    BOOLEAN        full;
    COMM_RING_BUF *pbuf;

     pbuf = &CommBuf;
             
    OS_ENTER_CRITICAL();
    if (pbuf->RingBufTxCtr < COMM_TX_BUF_SIZE) {           /* See if buffer is full  */
        full = FALSE;                                      /* Buffer is NOT full   */
    } else {
        full = TRUE;                                       /* Buffer is full    */
    }
    OS_EXIT_CRITICAL();
    return (full);
}

#if MULTITASK == 1    /* In Multitasking mode */
/*
*********************************************************************************************************
*                                            OUTPUT CHARACTER
*                                          ( In Multitasking mode )
*
* Description : This function is called by your application to send a character on the communications

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本乱码高清不卡字幕| 久久99精品国产麻豆婷婷| 国产女人18毛片水真多成人如厕| 久久国产精品99久久久久久老狼| 日韩午夜电影av| 久久9热精品视频| 国产无人区一区二区三区| 国产美女久久久久| 国产精品女上位| 在线观看免费成人| 日本不卡1234视频| 久久这里只有精品首页| 成人性生交大片免费看在线播放| 一本一道久久a久久精品综合蜜臀| 亚洲女与黑人做爰| 69堂成人精品免费视频| 捆绑紧缚一区二区三区视频| 国产人成亚洲第一网站在线播放 | 久久国产婷婷国产香蕉| www久久精品| 91原创在线视频| 日日夜夜免费精品| 国产日韩高清在线| 在线免费观看日本一区| 麻豆精品一区二区三区| 国产精品丝袜91| 国内精品伊人久久久久av影院| 国产精品欧美久久久久一区二区| 欧美中文字幕久久| 久久99久久精品| 国产精品国产自产拍在线| 欧美日韩国产精品自在自线| 国产精品自在欧美一区| 亚洲国产精品久久人人爱| 久久久午夜电影| 欧美影视一区在线| 国产91高潮流白浆在线麻豆| 亚洲一区二区三区四区不卡| 欧美极品少妇xxxxⅹ高跟鞋| 欧美二区三区91| www.综合网.com| 久久精品理论片| 亚洲综合999| 国产精品免费观看视频| 91麻豆精品国产91久久久久 | 成人免费视频一区二区| 午夜精品久久久久久久| 亚洲欧洲日本在线| 久久久亚洲午夜电影| 欧美日韩免费高清一区色橹橹 | 日本大香伊一区二区三区| 久久成人av少妇免费| 亚洲成av人片在线观看无码| 成人av高清在线| 另类综合日韩欧美亚洲| 亚洲午夜成aⅴ人片| 中日韩av电影| 91老师片黄在线观看| 国产一区二区三区美女| 日本不卡一二三区黄网| 亚洲狠狠爱一区二区三区| 国产精品第13页| 久久久久国产成人精品亚洲午夜| 91精品国产91久久综合桃花| 欧美日精品一区视频| 色天天综合色天天久久| 99久久婷婷国产| 成人视屏免费看| 成人黄色大片在线观看| 国产激情一区二区三区桃花岛亚洲| 丝瓜av网站精品一区二区| 亚洲乱码国产乱码精品精98午夜| 中文字幕精品三区| 国产精品欧美极品| 日本一二三四高清不卡| 亚洲国产精品成人综合| 国产精品色哟哟| 中文一区二区在线观看| 中文字幕精品一区| 国产精品久久久久aaaa| 中文字幕 久热精品 视频在线| 国产清纯美女被跳蛋高潮一区二区久久w| 精品国产乱码久久久久久免费| 日韩欧美中文字幕精品| 欧美一级片在线| 欧美一区二区视频在线观看| 日韩亚洲欧美在线| 精品国产凹凸成av人导航| 久久久久久久久久美女| 欧美激情综合五月色丁香小说| 欧美极品另类videosde| 亚洲天堂网中文字| 亚洲综合色网站| 天涯成人国产亚洲精品一区av| 麻豆国产精品一区二区三区| 激情综合亚洲精品| 国产成人a级片| 91麻豆精品秘密| 欧美日韩一级二级三级| 日韩午夜精品视频| 中文字幕乱码日本亚洲一区二区| 亚洲欧美怡红院| 亚洲777理论| 九九视频精品免费| 成人黄色av电影| 欧美伦理影视网| 国产三级一区二区三区| 自拍视频在线观看一区二区| 亚洲成a人片在线不卡一二三区 | 欧美国产一区视频在线观看| 亚洲嫩草精品久久| 日本v片在线高清不卡在线观看| 国产在线播放一区三区四| 成人黄色免费短视频| 欧美日韩五月天| 久久久天堂av| 一区二区三区精品| 精品综合久久久久久8888| 成人午夜视频在线观看| 欧美日韩国产一二三| 国产欧美日韩另类视频免费观看| 一区二区在线观看视频在线观看| 日韩av网站免费在线| 不卡的电影网站| 91精品国产综合久久久久久漫画| 中文字幕欧美三区| 日本特黄久久久高潮| 成人av小说网| 日韩视频免费观看高清在线视频| 国产精品色眯眯| 日本网站在线观看一区二区三区| 成人激情av网| 精品国产麻豆免费人成网站| 亚洲精品免费电影| 懂色中文一区二区在线播放| 欧美精品国产精品| 亚洲天堂免费在线观看视频| 国产在线精品一区二区不卡了| 在线视频国内自拍亚洲视频| 中文一区一区三区高中清不卡| 另类中文字幕网| 久久精品国产秦先生| 欧美亚洲国产一区二区三区| 国产日韩精品一区二区三区 | 精品成人a区在线观看| 亚洲一级电影视频| 99精品视频一区| 国产亚洲精品bt天堂精选| 免费在线成人网| 欧美午夜精品一区二区三区| 亚洲欧洲av一区二区三区久久| 精品无人码麻豆乱码1区2区| 欧美日韩国产高清一区二区| 亚洲精品国产精华液| 成人黄色777网| 国产欧美日韩卡一| 国产盗摄一区二区| 精品国产乱码久久久久久牛牛| 免费高清在线视频一区·| 欧美日韩视频在线一区二区| 一区二区三区**美女毛片| 97精品国产露脸对白| 国产精品久久久99| 成人做爰69片免费看网站| 国产午夜亚洲精品羞羞网站| 国产最新精品免费| 久久先锋影音av| 国产乱理伦片在线观看夜一区| 国产 欧美在线| 欧美激情一区二区在线| 国产大片一区二区| 久久精品一级爱片| 国产成人av网站| 国产精品久久久久久久久快鸭| 成人av在线资源网| 亚洲精品免费看| 精品视频一区二区三区免费| 亚洲成在人线在线播放| 在线观看免费亚洲| 亚洲成人一区二区| 91精品国产全国免费观看| 奇米四色…亚洲| 国产成人在线看| 日本一区二区综合亚洲| 亚洲精品乱码久久久久久久久| 色又黄又爽网站www久久| 亚洲精品中文在线观看| 欧美在线综合视频| 青青青爽久久午夜综合久久午夜| 日韩一级免费观看| 国产寡妇亲子伦一区二区| 中文字幕乱码久久午夜不卡| 91婷婷韩国欧美一区二区| 亚洲动漫第一页| 欧美xxxxx牲另类人与| 国产美女视频一区| 亚洲黄色在线视频| 欧美一区日韩一区| 亚洲美女屁股眼交3| 制服.丝袜.亚洲.中文.综合|