From fd26797490c9c78cce4d4a1894f9413f3c858f2d Mon Sep 17 00:00:00 2001 From: Marti Bolivar Date: Mon, 25 Apr 2011 18:00:34 -0400 Subject: Adding nonblocking USART transmit, usart_tx(). Other USART transmission functions are still blocking, but are now implemented in terms of usart_tx(). --- libmaple/usart.h | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) (limited to 'libmaple/usart.h') diff --git a/libmaple/usart.h b/libmaple/usart.h index 02f23da..b2bb034 100644 --- a/libmaple/usart.h +++ b/libmaple/usart.h @@ -26,6 +26,8 @@ /** * @file usart.h + * @author Marti Bolivar , + * Perry Hung * @brief USART definitions and prototypes */ @@ -251,20 +253,12 @@ extern usart_dev *UART4; extern usart_dev *UART5; #endif -#ifdef STM32_MEDIUM_DENSITY -#define NR_USARTS 3 -#elif defined(STM32_HIGH_DENSITY) -#define NR_USARTS 5 -#else -#warn "Only medium and high density devices are currently supported" -#endif - void usart_init(usart_dev *dev); void usart_set_baud_rate(usart_dev *dev, uint32 clock_speed, uint32 baud); void usart_enable(usart_dev *dev); void usart_disable(usart_dev *dev); void usart_foreach(void (*fn)(usart_dev *dev)); -void usart_putstr(usart_dev *dev, const char*); +uint32 usart_tx(usart_dev *dev, const uint8 *buf, uint32 len); void usart_putudec(usart_dev *dev, uint32 val); /** @@ -276,16 +270,32 @@ static inline void usart_disable_all(void) { /** * @brief Transmit one character on a serial port. + * + * This function blocks until the character has been successfully + * transmitted. + * * @param dev Serial port to send on. * @param byte Byte to transmit. */ static inline void usart_putc(usart_dev* dev, uint8 byte) { - usart_reg_map *regs = dev->regs; - - while ((regs->SR & USART_SR_TXE) == 0) + uint8 buf[] = {byte}; + while (!usart_tx(dev, buf, 1)) ; +} - regs->DR = byte; +/** + * @brief Transmit a character string on a serial port. + * + * This function blocks until str is completely transmitted. + * + * @param dev Serial port to send on + * @param str String to send + */ +static inline void usart_putstr(usart_dev *dev, const char* str) { + uint32 i = 0; + while (str[i] != '\0') { + usart_putc(dev, str[i]); + } } /** -- cgit v1.2.3