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

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

?? usart.c

?? AT91SAM9263的USB Device端口驅動
?? C
字號:
/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support  -  ROUSSET  -
 * ----------------------------------------------------------------------------
 * Copyright (c) 2006, Atmel Corporation

 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaiimer below.
 * 
 * - Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the disclaimer below in the documentation and/or
 * other materials provided with the distribution. 
 * 
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission. 
 * 
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------

#include "usart.h"
#include <utility/trace.h>

//------------------------------------------------------------------------------
//         Exported functions
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/// Configures an USART peripheral with the specified parameters.
/// \param usart  Pointer to the USART peripheral to configure.
/// \param mode  Desired value for the USART mode register (see the datasheet).
/// \param baudrate  Baudrate at which the USART should operate (in Hz).
/// \param masterClock  Frequency of the system master clock (in Hz).
//------------------------------------------------------------------------------
void USART_Configure(AT91S_USART *usart,
                            unsigned int mode,
                            unsigned int baudrate,
                            unsigned int masterClock)
{
    // Reset and disable receiver & transmitter
    usart->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX
                   | AT91C_US_RXDIS | AT91C_US_TXDIS;

    // Configure mode
    usart->US_MR = mode;

    // Configure baudrate
    // Asynchronous, no oversampling
    if (((mode & AT91C_US_SYNC) == 0)
        && ((mode & AT91C_US_OVER) == 0)) {
    
        usart->US_BRGR = (masterClock / baudrate) / 16;
    }
    // TODO other modes
}

//------------------------------------------------------------------------------
/// Enables or disables the transmitter of an USART peripheral.
/// \param usart  Pointer to an USART peripheral
/// \param enabled  If true, the transmitter is enabled; otherwise it is
///                 disabled.
//------------------------------------------------------------------------------
void USART_SetTransmitterEnabled(AT91S_USART *usart,
                                        unsigned char enabled)
{
    if (enabled) {

        usart->US_CR = AT91C_US_TXEN;
    }
    else {

        usart->US_CR = AT91C_US_TXDIS;
    }
}

//------------------------------------------------------------------------------
/// Enables or disables the receiver of an USART peripheral
/// \param usart  Pointer to an USART peripheral
/// \param enabled  If true, the receiver is enabled; otherwise it is disabled.
//------------------------------------------------------------------------------
void USART_SetReceiverEnabled(AT91S_USART *usart,
                                     unsigned char enabled)
{
    if (enabled) {

        usart->US_CR = AT91C_US_RXEN;
    }
    else {

        usart->US_CR = AT91C_US_RXDIS;
    }
}

//------------------------------------------------------------------------------
/// Sends one packet of data through the specified USART peripheral. This
/// function operates synchronously, so it only returns when the data has been
/// actually sent.
/// \param usart  Pointer to an USART peripheral.
/// \param data  Data to send including 9nth bit and sync field if necessary (in
///              the same format as the US_THR register in the datasheet).
/// \param timeOut  Time out value (0 = no timeout).
//------------------------------------------------------------------------------
void USART_Write(
    AT91S_USART *usart,
    unsigned short data,
    volatile unsigned int timeOut)
{
    if (timeOut == 0) {

        while ((usart->US_CSR & AT91C_US_TXEMPTY) == 0);
    }
    else {

        while ((usart->US_CSR & AT91C_US_TXEMPTY) == 0) {

            if (timeOut == 0) {

                trace_LOG(trace_ERROR, "-E- USART_Write: Timed out.\n\r");
                return;
            }
            timeOut--;
        }
    }

    usart->US_THR = data;
}

//------------------------------------------------------------------------------
/// Sends the contents of a data buffer through the specified USART peripheral.
/// This function returns immediately (1 if the buffer has been queued, 0
/// otherwise); poll the ENDTX and TXBUFE bits of the USART status register
/// to check for the transfer completion.
/// \param usart  Pointer to an USART peripheral.
/// \param buffer  Pointer to the data buffer to send.
/// \param size  Size of the data buffer (in bytes).
//------------------------------------------------------------------------------
unsigned char USART_WriteBuffer(
    AT91S_USART *usart,
    void *buffer,
    unsigned int size)
{
    // Check if the first PDC bank is free
    if ((usart->US_TCR == 0) && (usart->US_TNCR == 0)) {

        usart->US_TPR = (unsigned int) buffer;
        usart->US_TCR = size;
        usart->US_PTCR = AT91C_PDC_TXTEN;

        return 1;
    }
    // Check if the second PDC bank is free
    else if (usart->US_TNCR == 0) {

        usart->US_TNPR = (unsigned int) buffer;
        usart->US_TNCR = size;

        return 1;
    }
    else {

        return 0;
    }
}

//------------------------------------------------------------------------------
/// Reads and return a packet of data on the specified USART peripheral. This
/// function operates asynchronously, so it waits until some data has been
/// received.
/// \param usart  Pointer to an USART peripheral.
/// \param timeOut  Time out value (0 -> no timeout).
//------------------------------------------------------------------------------
unsigned short USART_Read(
    AT91S_USART *usart,
    volatile unsigned int timeOut)
{
    if (timeOut == 0) {

        while ((usart->US_CSR & AT91C_US_RXRDY) == 0);
    }
    else {

        while ((usart->US_CSR & AT91C_US_RXRDY) == 0) {

            if (timeOut == 0) {

                trace_LOG(trace_ERROR, "-E- USART_Read: Timed out.\n\r");
                return 0;
            }
            timeOut--;
        }
    }

    return usart->US_RHR;
}

//------------------------------------------------------------------------------
/// Reads data from an USART peripheral, filling the provided buffer until it
/// becomes full. This function returns immediately with 1 if the buffer has
/// been queued for transmission; otherwise 0.
/// \param usart  Pointer to an USART peripheral.
/// \param buffer  Pointer to the buffer where the received data will be stored.
/// \param size  Size of the data buffer (in bytes).
//------------------------------------------------------------------------------
unsigned char USART_ReadBuffer(AT91S_USART *usart,
                                      void *buffer,
                                      unsigned int size)
{
    // Check if the first PDC bank is free
    if ((usart->US_RCR == 0) && (usart->US_RNCR == 0)) {

        usart->US_RPR = (unsigned int) buffer;
        usart->US_RCR = size;
        usart->US_PTCR = AT91C_PDC_RXTEN;

        return 1;
    }
    // Check if the second PDC bank is free
    else if (usart->US_RNCR == 0) {

        usart->US_RNPR = (unsigned int) buffer;
        usart->US_RNCR = size;

        return 1;
    }
    else {

        return 0;
    }
}

//------------------------------------------------------------------------------
/// Returns 1 if some data has been received and can be read from an USART;
/// otherwise returns 0.
/// \param usart  Pointer to an AT91S_USART instance.
//------------------------------------------------------------------------------
unsigned char USART_IsDataAvailable(AT91S_USART *usart)
{
    if ((usart->US_CSR & AT91C_US_RXRDY) != 0) {

        return 1;
    }
    else {

        return 0;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看一区日韩| 国产成人aaa| 亚洲欧美色图小说| 日本一区二区三区高清不卡| 日韩精品在线看片z| 91精品久久久久久蜜臀| 欧美精品一卡二卡| 日韩一区二区在线播放| 日韩欧美不卡一区| 国产亚洲欧美在线| 国产精品欧美一级免费| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产欧美一区二区精品婷婷| 国产情人综合久久777777| 中文字幕精品一区二区精品绿巨人| 日本一区二区三级电影在线观看| 欧美激情一区二区在线| 亚洲日本韩国一区| 亚洲福利国产精品| 日韩不卡在线观看日韩不卡视频| 蜜臀av性久久久久av蜜臀妖精| 九九九精品视频| 国产成人av网站| 欧美伊人久久大香线蕉综合69 | 精品无人区卡一卡二卡三乱码免费卡| 麻豆成人91精品二区三区| 国产91高潮流白浆在线麻豆| 91在线观看一区二区| 欧美久久久久免费| 久久精品人人做人人综合| 亚洲欧美色图小说| 精品亚洲欧美一区| 99久久精品国产观看| 69精品人人人人| 国产日韩欧美高清| 亚洲高清中文字幕| 高清不卡一区二区在线| 欧美主播一区二区三区| 欧美激情资源网| 麻豆精品新av中文字幕| 欧洲亚洲精品在线| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品美女久久久久久久网站| 亚洲v日本v欧美v久久精品| 国产成人免费xxxxxxxx| 欧美精品一二三| 亚洲日韩欧美一区二区在线| 首页国产丝袜综合| 97精品国产97久久久久久久久久久久| 欧美一级夜夜爽| 亚洲欧美电影一区二区| 国产iv一区二区三区| 这里是久久伊人| 亚洲色图一区二区三区| 国产激情91久久精品导航| 欧美精品99久久久**| 亚洲美女屁股眼交| kk眼镜猥琐国模调教系列一区二区| 日韩一区二区三区高清免费看看| 亚洲色图欧洲色图婷婷| 国产suv一区二区三区88区| 欧美α欧美αv大片| 日韩精品乱码av一区二区| 欧美色图片你懂的| 亚洲精品菠萝久久久久久久| 国产91高潮流白浆在线麻豆 | 欧美午夜视频网站| 亚洲色欲色欲www| 91丨九色丨尤物| 国产精品日产欧美久久久久| 国产成人久久精品77777最新版本| 日韩一区二区三区三四区视频在线观看 | 国产成人免费视频网站| 久久免费午夜影院| 国产福利一区二区三区| 国产精品视频一区二区三区不卡| 国产精品一二三四区| 久久久久久久性| 国产精品综合在线视频| 欧美高清一级片在线观看| 国产成人在线视频免费播放| 欧美激情资源网| 91视视频在线直接观看在线看网页在线看 | 日韩一区二区影院| 狠狠色丁香九九婷婷综合五月| 精品国产免费一区二区三区香蕉| 精品一区二区三区视频在线观看 | 国产在线乱码一区二区三区| 久久久夜色精品亚洲| 成人精品视频一区二区三区| 日韩毛片精品高清免费| 欧美日韩一区二区三区不卡| 美女网站色91| 日本一区二区在线不卡| 99久久精品免费看国产| 亚洲一级二级在线| 精品国产免费久久 | 欧美日韩精品久久久| 三级一区在线视频先锋| 26uuu亚洲| 日本道色综合久久| 另类人妖一区二区av| 国产精品久久久久毛片软件| 色综合 综合色| 久久国产精品无码网站| 亚洲欧洲av在线| 欧美一级在线观看| 99re这里只有精品视频首页| 日韩成人免费在线| 欧美国产日韩a欧美在线观看| 在线观看日韩电影| 国产老妇另类xxxxx| 亚洲一区影音先锋| 久久九九久久九九| 欧美日韩午夜在线| 成人性生交大片免费看视频在线| 亚洲国产日日夜夜| 久久丝袜美腿综合| 欧美浪妇xxxx高跟鞋交| 成人福利视频在线| 另类欧美日韩国产在线| 亚洲成人资源在线| 国产精品污网站| 日韩亚洲电影在线| 在线一区二区三区四区五区| 国产传媒一区在线| 美女一区二区三区在线观看| 亚洲日本成人在线观看| 国产午夜亚洲精品不卡| 欧美mv和日韩mv的网站| 欧美日韩国产在线观看| 欧洲av一区二区嗯嗯嗯啊| 成人免费看视频| 国产曰批免费观看久久久| 天涯成人国产亚洲精品一区av| 亚洲欧美激情小说另类| 国产精品久久久久四虎| 欧美国产精品中文字幕| 久久久久9999亚洲精品| 欧美精品一区二区在线观看| 69av一区二区三区| 欧美情侣在线播放| 欧美精品 国产精品| 欧美视频日韩视频在线观看| 99re这里都是精品| 色美美综合视频| 97精品久久久久中文字幕| 成人av片在线观看| 99久久精品免费看| 91在线看国产| 日本韩国一区二区三区视频| 99麻豆久久久国产精品免费 | 日韩av电影免费观看高清完整版在线观看| 成人免费一区二区三区在线观看| 中文字幕中文字幕一区| 亚洲免费观看高清在线观看| 自拍偷自拍亚洲精品播放| 综合激情网...| 亚洲永久免费av| 午夜精品久久久久影视| 秋霞国产午夜精品免费视频| 日本美女视频一区二区| 久久99国产精品麻豆| 成人精品免费网站| 色香色香欲天天天影视综合网| 在线观看亚洲a| 日韩无一区二区| 国产欧美日韩视频一区二区| 国产精品视频观看| 亚洲综合精品久久| 久久国产婷婷国产香蕉| www.综合网.com| 欧美日韩在线播放一区| 日韩欧美国产系列| 国产精品免费aⅴ片在线观看| 亚洲一区二区三区中文字幕| 婷婷一区二区三区| 丰满亚洲少妇av| 91官网在线免费观看| 91麻豆精品国产91久久久使用方法| 日韩欧美在线综合网| 国产精品成人网| 免费在线观看一区二区三区| 国产精品一二三在| 欧美精品一卡二卡| 亚洲欧洲精品天堂一级| 免费在线观看精品| 91蝌蚪porny| 久久亚洲精精品中文字幕早川悠里 | 日韩视频免费直播| 中文字幕一区二区三区四区| 天堂影院一区二区| 成人av网站在线观看免费| 欧美一区二区三区在线电影| 国产精品嫩草99a| 狂野欧美性猛交blacked| 色综合久久久网| 久久久久久9999| 丝袜亚洲另类丝袜在线| 91麻豆精品一区二区三区|