The USART device driver implements buffered, interrupt controlled serial communication. In opposite to the AVR UART Device Driver it supports software and hardware handshake, 9-bit communication, half duplex and synchronous operation.
The driver's code is devided into a general part and a hardware dependant part, which simplifies porting it to different USART chips. The AVR USART Devices provide support for the ATmega128/103 on-chip USARTs.
Modules | |
AVR USART Devices | |
AVR USART hardware dependant implementation. | |
Data Structures | |
struct | _RINGBUF |
Character device ring buffer structure. More... | |
struct | _RINGBUF |
Character device ring buffer structure. More... | |
struct | _USARTDCB |
USART device low level information structure. More... | |
struct | _USARTDCB |
USART device low level information structure. More... | |
Initial UART Configuration | |
#define | USART_INITSPEED 115200 |
Initial bit rate. | |
Ring Buffer | |
#define | USART_RXBUFSIZ 256 |
Initial receive buffer size. | |
#define | USART_RXHIWMARK 240 |
Receiver's initial high water mark. | |
#define | USART_RXLOWMARK 208 |
Receiver's initial low water mark. | |
#define | USART_TXBUFSIZ 64 |
Initial transmit buffer size. | |
#define | USART_TXHIWMARK 56 |
Transmitter's initial high water mark. | |
#define | USART_TXLOWMARK 40 |
Transmitter's initial low water mark. | |
typedef _RINGBUF | RINGBUF |
Character device ring buffer type. | |
Defines | |
#define | USART_MF_BLOCKREAD 0x0800 |
#define | USART_MF_BUFFERMASK 0x0300 |
#define | USART_MF_CONTROLMASK 0x0005 |
#define | USART_MF_COOKEDMODE 0x0080 |
#define | USART_MF_CTSSENSE 0x0002 |
#define | USART_MF_DCDSENSE 0x0010 |
#define | USART_MF_DSRSENSE 0x0008 |
#define | USART_MF_DTRCONTROL 0x0004 |
#define | USART_MF_HALFDUPLEX 0x0400 |
#define | USART_MF_LINEBUFFER 0x0200 |
#define | USART_MF_LOCALECHO 0x0040 |
#define | USART_MF_NOBUFFER 0x0100 |
#define | USART_MF_RTSCONTROL 0x0001 |
#define | USART_MF_SENSEMASK 0x001A |
#define | USART_MF_XONXOFF 0x0020 |
Software handshake. | |
#define | USART_SF_CTSOFF 0x0002 |
#define | USART_SF_DCDOFF 0x0010 |
#define | USART_SF_DSROFF 0x0008 |
#define | USART_SF_DTROFF 0x0004 |
#define | USART_SF_RTSOFF 0x0001 |
#define | USART_SF_RXDISABLED 0x0080 |
#define | USART_SF_TXDISABLED 0x0040 |
Typedefs | |
typedef _USARTDCB | USARTDCB |
Functions | |
int | UsartClose (NUTFILE *fp) |
Close an USART device. | |
int | UsartInit (NUTDEVICE *dev) |
Initialize the USART device. | |
int | UsartIOCtl (NUTDEVICE *dev, int req, void *conf) |
Perform USART control functions. | |
NUTFILE * | UsartOpen (NUTDEVICE *dev, CONST char *name, int mode, int acc) |
Open an USART device. | |
int | UsartRead (NUTFILE *fp, void *buffer, int size) |
Read from device. | |
long | UsartSize (NUTFILE *fp) |
Retrieves the number of characters in input buffer. | |
int | UsartWrite (NUTFILE *fp, CONST void *buffer, int len) |
Write a device or file. | |
int | UsartWrite_P (NUTFILE *fp, PGM_P buffer, int len) |
Write a device or file. |
#define USART_MF_BLOCKREAD 0x0800 |
Block read enabled
#define USART_MF_BUFFERMASK 0x0300 |
Masks buffering mode flags.
#define USART_MF_CONTROLMASK 0x0005 |
Handshake control mask.
#define USART_MF_COOKEDMODE 0x0080 |
Should be used in stream, not device.
#define USART_MF_CTSSENSE 0x0002 |
DTE input.
#define USART_MF_DCDSENSE 0x0010 |
DTE input.
#define USART_MF_DSRSENSE 0x0008 |
DTE input.
#define USART_MF_DTRCONTROL 0x0004 |
DTE output.
#define USART_MF_HALFDUPLEX 0x0400 |
Half duplex control.
#define USART_MF_LINEBUFFER 0x0200 |
Line buffered.
#define USART_MF_LOCALECHO 0x0040 |
Should be used in stream, not device.
#define USART_MF_NOBUFFER 0x0100 |
No buffering.
#define USART_MF_RTSCONTROL 0x0001 |
DTE output.
#define USART_MF_SENSEMASK 0x001A |
Handshake sense mask.
#define USART_MF_XONXOFF 0x0020 |
Software handshake.
It is recommended to set a proper read timeout with software handshake. In this case a timeout may occur, if the communication peer lost our last XON character. The application may then use ioctl() to disable the receiver and do the read again. This will send out another XON.
#define USART_RXHIWMARK 240 |
Receiver's initial high water mark.
Disables receiver handshake.
#define USART_RXLOWMARK 208 |
Receiver's initial low water mark.
Enables receiver handshake.
#define USART_SF_CTSOFF 0x0002 |
Set if CTS line is off.
#define USART_SF_DCDOFF 0x0010 |
Set if DCD line is off.
#define USART_SF_DSROFF 0x0008 |
Set if DSR line is off.
#define USART_SF_DTROFF 0x0004 |
Set if DTR line is off.
#define USART_SF_RTSOFF 0x0001 |
Set if RTS line is off.
#define USART_SF_RXDISABLED 0x0080 |
Receiver disabled.
#define USART_SF_TXDISABLED 0x0040 |
Transmitter disabled.
#define USART_TXHIWMARK 56 |
Transmitter's initial high water mark.
Starts the transmitter.
#define USART_TXLOWMARK 40 |
Transmitter's initial low water mark.
Wakes up transmitting threads.
int UsartClose | ( | NUTFILE * | fp | ) |
Close an USART device.
This function is called by the low level close routine of the C runtime library, using the _NUTDEVICE::dev_close entry.
fp | Pointer to a _NUTFILE structure, obtained by a previous call to UsartOpen(). |
int UsartInit | ( | NUTDEVICE * | dev | ) |
Initialize the USART device.
This function is called by NutRegisterDevice(), using the _NUTDEVICE::dev_init entry. It will call the low level driver's _USARTDCB::dcb_init routine to initialize the hardware.
dev | Identifies the device to initialize. |
int UsartIOCtl | ( | NUTDEVICE * | dev, | |
int | req, | |||
void * | conf | |||
) |
Perform USART control functions.
This function is called by the ioctl() function of the C runtime library.
dev | Identifies the device that receives the device-control function. | |
req | Requested control function. May be set to one of the following constants:
| |
conf | Points to a buffer that contains any data required for the given control function or receives data from that function. |
Open an USART device.
This function is called by the low level open routine of the C runtime library, using the _NUTDEVICE::dev_open entry.
dev | Pointer to the NUTDEVICE structure. | |
name | Ignored, should point to an empty string. | |
mode | Operation mode. Any of the following values may be or-ed: | |
acc | Ignored, should be zero. |
int UsartRead | ( | NUTFILE * | fp, | |
void * | buffer, | |||
int | size | |||
) |
Read from device.
This function is called by the low level input routines of the C runtime library, using the _NUTDEVICE::dev_read entry.
The function may block the calling thread until at least one character has been received or a timeout occurs.
It is recommended to set a proper read timeout with software handshake. In this case a timeout may occur, if the communication peer lost our last XON character. The application may then use ioctl() to disable the receiver and do the read again. This will send out another XON.
fp | Pointer to a _NUTFILE structure, obtained by a previous call to UsartOpen(). | |
buffer | Pointer to the buffer that receives the data. If zero, then all characters in the input buffer will be removed. | |
size | Maximum number of bytes to read. |
long UsartSize | ( | NUTFILE * | fp | ) |
Retrieves the number of characters in input buffer.
This function is called by the low level size routine of the C runtime library, using the _NUTDEVICE::dev_size entry.
fp | Pointer to a _NUTFILE structure, obtained by a previous call to UsartOpen(). |
int UsartWrite | ( | NUTFILE * | fp, | |
CONST void * | buffer, | |||
int | len | |||
) |
Write a device or file.
This function is called by the low level output routines of the C runtime library, using the _NUTDEVICE::dev_write entry.
The function may block the calling thread.
fp | Pointer to a _NUTFILE structure, obtained by a previous call to UsartOpen(). | |
buffer | Pointer to the data to be written. If zero, then the output buffer will be flushed. | |
len | Number of bytes to write. |
int UsartWrite_P | ( | NUTFILE * | fp, | |
PGM_P | buffer, | |||
int | len | |||
) |
Write a device or file.
Similar to UsartWrite() except that the data is located in program memory.
This function is called by the low level output routines of the C runtime library, using the _NUTDEVICE::dev_write_P entry.
The function may block the calling thread.
fp | Pointer to a NUTFILE structure, obtained by a previous call to UsartOpen(). | |
buffer | Pointer to the data in program space to be written. | |
len | Number of bytes to write. |