aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmaple/spi.c11
-rw-r--r--wirish/comm/HardwareSPI.cpp8
-rw-r--r--wirish/comm/HardwareSPI.h4
3 files changed, 13 insertions, 10 deletions
diff --git a/libmaple/spi.c b/libmaple/spi.c
index 4f34d1a..aa75c5f 100644
--- a/libmaple/spi.c
+++ b/libmaple/spi.c
@@ -130,7 +130,8 @@ uint8 spi_tx_byte(uint32 spi_num, uint8 data) {
uint8 spi_tx(uint32 spi_num, uint8 *buf, uint32 len) {
SPI *spi;
- uint32 i;
+ uint32 i = 0;
+ uint8 rc;
ASSERT(spi_num == 1 || spi_num == 2);
spi = (spi_num == 1) ? (SPI*)SPI1_BASE : (SPI*)SPI2_BASE;
@@ -140,13 +141,15 @@ uint8 spi_tx(uint32 spi_num, uint8 *buf, uint32 len) {
}
while (i < len) {
- spi->DR = buf[len];
+ spi->DR = buf[i];
while (!(spi->SR & SR_TXE) ||
- (spi->SR & SR_BSY))
+ (spi->SR & SR_BSY) ||
+ !(spi->SR & SR_RXNE))
;
+ rc = spi->DR;
i++;
}
- return spi->DR;
+ return rc;
}
static void spi_gpio_cfg(const spi_dev *dev) {
diff --git a/wirish/comm/HardwareSPI.cpp b/wirish/comm/HardwareSPI.cpp
index 4379a0d..3dfe10a 100644
--- a/wirish/comm/HardwareSPI.cpp
+++ b/wirish/comm/HardwareSPI.cpp
@@ -118,12 +118,12 @@ void HardwareSPI::begin(void) {
* @brief send a byte out the spi peripheral
* @param data byte to send
*/
-void HardwareSPI::send(uint8 data) {
- spi_tx_byte(this->spi_num, data);
+uint8 HardwareSPI::send(uint8 data) {
+ return spi_tx_byte(this->spi_num, data);
}
-void HardwareSPI::send(uint8 *buf, uint32 len) {
- spi_tx(this->spi_num, buf, len);
+uint8 HardwareSPI::send(uint8 *buf, uint32 len) {
+ return spi_tx(this->spi_num, buf, len);
}
diff --git a/wirish/comm/HardwareSPI.h b/wirish/comm/HardwareSPI.h
index 04d67ba..e606c0c 100644
--- a/wirish/comm/HardwareSPI.h
+++ b/wirish/comm/HardwareSPI.h
@@ -49,8 +49,8 @@ class HardwareSPI {
HardwareSPI(uint32 spi_num);
void begin(void);
void begin(SPIFrequency freq, uint32 endianness, uint32 mode);
- void send(uint8 data);
- void send(uint8 *data, uint32 length);
+ uint8 send(uint8 data);
+ uint8 send(uint8 *data, uint32 length);
uint8 recv(void);
};