?? uart_usb_lib.c
字號:
//!
//! @file uart_usb_lib.c,v
//!
//! Copyright (c) 2006 Atmel.
//!
//! Please read file license.txt for copyright notice.
//!
//! @brief This file controls the UART USB functions.
//!
//! @version 1.3 at90usb128-demo-cdc-1_0_3 $Id: uart_usb_lib.c,v 1.3 2006/03/17 13:06:22 rletendu Exp $
//!
/*_____ I N C L U D E S ____________________________________________________*/
#include "config.h"
#include "lib_mcu\usb\usb_drv.h"
#include "usb_descriptors.h"
#include "uart_usb_lib.h"
/*_____ M A C R O S ________________________________________________________*/
/*_____ D E F I N I T I O N ________________________________________________*/
Uchar tx_counter;
Uchar rx_counter;
/*_____ D E C L A R A T I O N ______________________________________________*/
/**
* @brief Initializes the uart_usb library
*/
void uart_usb_init(void)
{
tx_counter = 0;
rx_counter = 0;
}
/**
* @brief This function checks if a character has been received on the USB bus.
*
* @return bit (true if a byte is ready to be read)
*/
bit uart_usb_test_hit(void)
{
if (!rx_counter)
{
Usb_select_endpoint(RX_EP);
if (Is_usb_receive_out())
{
rx_counter = Usb_byte_counter();
if (!rx_counter)
{
Usb_ack_receive_out();
}
}
}
return (rx_counter!=0);
}
/**
* @brief This function reads one byte from the USB bus
*
* If one byte is present in the USB fifo, this byte is returned. If no data
* is present in the USB fifo, this function waits for USB data.
*
* @return U8 byte received
*/
char uart_usb_getchar(void)
{
register Uchar data_rx;
Usb_select_endpoint(RX_EP);
if (!rx_counter) while (!uart_usb_test_hit());
data_rx=Usb_read_byte();
rx_counter--;
if (!rx_counter) Usb_ack_receive_out();
return data_rx;
}
/**
* @brief This function checks if the USB emission buffer is ready to accept at
* at least 1 byte
*
* @return Boolean. TRUE if the firmware can write a new byte to transmit.
*/
bit uart_usb_tx_ready(void)
{
if (!Is_usb_write_enabled())
{
return FALSE;
}
return TRUE;
}
/**
* @brief This function fills the USB transmit buffer with the new data. This buffer
* is sent if complete. To flush this buffer before waiting full, launch
* the uart_usb_flush() function.
*
* @param data_to_send
*
* @return
*/
int uart_usb_putchar(int data_to_send)
{
Usb_select_endpoint(TX_EP);
while(!uart_usb_tx_ready()); // Wait Endpoint ready
Usb_write_byte(data_to_send);
tx_counter++;
if(!Is_usb_write_enabled()) //If Endpoint full -> flush
{
uart_usb_flush();
}
return data_to_send;
}
/**
* @brief This function sends the data stored in the USB transmit buffer.
* This function does nothing if there is no data in the buffer.
*/
void uart_usb_flush (void)
{
Usb_select_endpoint(TX_EP);
Usb_send_in();
tx_counter = 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -