在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Atmega32單片機串口驅(qū)動程序

            Atmega32單片機串口驅(qū)動程序

            作者: 時間:2013-12-12 來源:網(wǎng)絡(luò) 收藏

            /* ******************************************************************
            * Filename: uart.c
            * Author: lstzixing
            * Mail: [email protected]
            * Date: 2009-5-26
            * Description: 串口數(shù)據(jù)收發(fā)接口. For
            * ****************************************************************** */

            #include "app.h"

            // 對發(fā)送緩沖,信號計數(shù)為空閑字符數(shù)
            // 對接收緩沖,計數(shù)為緩沖已有計數(shù)
            typedef struct _FIFO
            {
            INT8U * buf; // FIFO緩沖區(qū)
            INT8U * in, * out; // FIFO讀寫指針
            OS_EVENT * sem; // FIFO讀寫同步信號量
            }FIFO;

            static INT8U UartTxBuf[ UART_TX_LEN ]; // 發(fā)送緩沖
            static INT8U UartRxBuf[ UART_RX_LEN ]; // 接收緩沖
            static FIFO UartTxFifo, UartRxFifo; // 收發(fā)緩沖控制FIFO結(jié)構(gòu)

            OS_SEM_DATA SemData;

            static INT8U UartPutRxChar( INT8U c );
            static INT8U UartGetTxChar( INT8U * err );

            #define UartStartTx() { UCSRB |= 1UDRIE; }
            #define UartStopTx() { UCSRB = ~(1UDRIE); }
            #define UartStartRx() { UCSRB |= 1RXCIE; }
            #define UartStopRx() { UCSRB = ~( 1RXCIE ); }
            /* ****************************************************************
            * UartFlush()
            * 功能:緩沖清空
            * 參數(shù): isTxBuf ------ 是否為發(fā)送緩沖
            * 返回值:None
            * 說明:清空收發(fā)緩沖
            * *************************************************************** */
            void UartFlush( INT8U isTxBuf )
            {
            #if OS_CRITICAL_METHOD == 3
            OS_CPU_SR cpu_sr;
            #endif
            INT8U cnt;

            OS_ENTER_CRITICAL();

            if( isTxBuf )
            {
            UartTxFifo.buf = UartTxBuf; // 復(fù)位發(fā)送緩沖讀寫指針
            UartTxFifo.in = UartTxBuf;
            UartTxFifo.out = UartTxBuf;
            OSSemQuery( UartTxFifo.sem, SemData );
            cnt = UART_TX_LEN - SemData.OSCnt; // 在其它地方必須保證SemData.OSCnt UART_TX_LEN
            while( cnt-- )
            OSSemPost( UartTxFifo.sem ); // 復(fù)位發(fā)送信號量值為UART_TX_LEN
            }

            else
            {
            UartRxFifo.buf = UartRxBuf; // 復(fù)位接收緩沖讀寫指針
            UartRxFifo.in = UartRxBuf;
            UartRxFifo.out = UartRxBuf;
            while( OSSemAccept( UartRxFifo.sem ) ); // 復(fù)位接收信號量值為0

            }

            OS_EXIT_CRITICAL();
            }

            void UartPutStr( char * str )
            {
            char * ptr;

            ptr = (char *)str;

            while(*ptr != '