From 9180233b971aecb621ae54307c72ef074773640f Mon Sep 17 00:00:00 2001 From: Perry Hung Date: Tue, 14 Sep 2010 23:09:38 -0400 Subject: Check different set of flags for SPI master transmit Tested on wishield, would like some more testing if anybody has more things that speak spi --- libmaple/spi.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'libmaple/spi.c') diff --git a/libmaple/spi.c b/libmaple/spi.c index 68855a5..4b02f44 100644 --- a/libmaple/spi.c +++ b/libmaple/spi.c @@ -115,14 +115,14 @@ void spi_init(uint32 spi_num, uint8 spi_tx_byte(uint32 spi_num, uint8 data) { SPI *spi; - ASSERT(spi_num == 1 || spi_num == 2); - spi = (spi_num == 1) ? (SPI*)SPI1_BASE : (SPI*)SPI2_BASE; + while (!(spi->SR & SR_TXE)) + ; + spi->DR = data; - while (!(spi->SR & SR_TXE) || - (spi->SR & SR_BSY)) + while (!(spi->SR & SR_RXNE)) ; return spi->DR; @@ -141,11 +141,14 @@ uint8 spi_tx(uint32 spi_num, uint8 *buf, uint32 len) { } while (i < len) { + while (!(spi->SR & SR_TXE)) + ; + spi->DR = buf[i]; - while (!(spi->SR & SR_TXE) || - (spi->SR & SR_BSY) || - !(spi->SR & SR_RXNE)) + + while (!(spi->SR & SR_RXNE)) ; + rc = spi->DR; i++; } -- cgit v1.2.3