From e92073f86f6c6cb5002e235a4bc6f39b6609d177 Mon Sep 17 00:00:00 2001 From: Marti Bolivar Date: Wed, 14 Sep 2011 20:38:26 -0400 Subject: usart: Add usart_rx(). usart_rx() is a nonblocking USART receive. Add it for symmetry with usart_tx(). --- libmaple/usart.c | 16 ++++++++++++++++ libmaple/usart.h | 1 + 2 files changed, 17 insertions(+) (limited to 'libmaple') diff --git a/libmaple/usart.c b/libmaple/usart.c index 998da17..0bdc37a 100644 --- a/libmaple/usart.c +++ b/libmaple/usart.c @@ -191,6 +191,22 @@ uint32 usart_tx(usart_dev *dev, const uint8 *buf, uint32 len) { return txed; } +/** + * @brief Nonblocking USART receive. + * @param dev Serial port to receive bytes from + * @param buf Buffer to store received bytes into + * @param len Maximum number of bytes to store + * @return Number of bytes received + */ +uint32 usart_rx(usart_dev *dev, uint8 *buf, uint32 len) { + uint32 rxed = 0; + while (usart_data_available(dev) && rxed < len) { + *buf++ = usart_getc(dev); + rxed++; + } + return rxed; +} + /** * @brief Transmit an unsigned integer to the specified serial port in * decimal format. diff --git a/libmaple/usart.h b/libmaple/usart.h index e747e65..ed00e16 100644 --- a/libmaple/usart.h +++ b/libmaple/usart.h @@ -259,6 +259,7 @@ void usart_enable(usart_dev *dev); void usart_disable(usart_dev *dev); void usart_foreach(void (*fn)(usart_dev *dev)); uint32 usart_tx(usart_dev *dev, const uint8 *buf, uint32 len); +uint32 usart_rx(usart_dev *dev, uint8 *buf, uint32 len); void usart_putudec(usart_dev *dev, uint32 val); /** -- cgit v1.2.3