aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFergus Noble2011-10-04 16:06:01 -0700
committerStephen Caudle2011-10-12 22:20:22 -0400
commit878c0948719436f36862feef3908ed0c78cccbdd (patch)
treee4c0088248ba4d96ec5c274bd415c2640ace7459 /lib
parent14dcda91b06c517d5a7e5485ceac040d72978a31 (diff)
Added alternative function for doing an SPI transfer.
Diffstat (limited to 'lib')
-rw-r--r--lib/stm32_common/spi.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/stm32_common/spi.c b/lib/stm32_common/spi.c
index 7fb8711..71bb846 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);
}