From 4809f7dacf70253f894460683be5c08d76a800a7 Mon Sep 17 00:00:00 2001 From: Fergus Noble Date: Tue, 4 Oct 2011 16:06:01 -0700 Subject: [PATCH] Added alternative function for doing an SPI transfer. --- include/libopencm3/stm32/spi.h | 1 + lib/stm32_common/spi.c | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/libopencm3/stm32/spi.h b/include/libopencm3/stm32/spi.h index 3cadaf8c..30366579 100644 --- a/include/libopencm3/stm32/spi.h +++ b/include/libopencm3/stm32/spi.h @@ -290,6 +290,7 @@ void spi_disable(u32 spi); void spi_write(u32 spi, u16 data); void spi_send(u32 spi, u16 data); u16 spi_read(u32 spi); +u16 spi_xfer(u32 spi, u16 data); void spi_set_bidirectional_mode(u32 spi); void spi_set_unidirectional_mode(u32 spi); void spi_set_bidirectional_receive_only_mode(u32 spi); diff --git a/lib/stm32_common/spi.c b/lib/stm32_common/spi.c index 7fb87115..71bb846c 100644 --- a/lib/stm32_common/spi.c +++ b/lib/stm32_common/spi.c @@ -77,7 +77,7 @@ void spi_write(u32 spi, u16 data) void spi_send(u32 spi, u16 data) { /* wait for transfer finished */ - while (SPI_SR(spi) & SPI_SR_BSY ); + while (!(SPI_SR(spi) & SPI_SR_TXE )); /* Write data (8 or 16 bits, depending on DFF) into DR. */ SPI_DR(spi) = data; @@ -85,6 +85,20 @@ void spi_send(u32 spi, u16 data) u16 spi_read(u32 spi) { + /* wait for transfer finished */ + while (!(SPI_SR(spi) & SPI_SR_RXNE )); + + /* Read the data (8 or 16 bits, depending on DFF bit) from DR. */ + return SPI_DR(spi); +} + +u16 spi_xfer(u32 spi, u16 data) +{ + spi_write(spi, data); + + /* wait for transfer finished */ + while (!(SPI_SR(spi) & SPI_SR_RXNE )); + /* Read the data (8 or 16 bits, depending on DFF bit) from DR. */ return SPI_DR(spi); }