summaryrefslogtreecommitdiff
path: root/shared-module/bitbangio
diff options
context:
space:
mode:
authorJeff Epler <jepler@unpythonic.net>2021-03-26 12:06:25 -0500
committerJeff Epler <jepler@unpythonic.net>2021-03-26 12:24:09 -0500
commita70b679ed52529f8cc317959b180fd8a34bd220d (patch)
tree1d33fddf8a2d7ef67d87113732d63ed06a093c64 /shared-module/bitbangio
parent2bc61b458070f9e1e5a49442a72c43c0d9ea721f (diff)
bitbangio.SPI.read: Support write_value, fix some other nits
Diffstat (limited to 'shared-module/bitbangio')
-rw-r--r--shared-module/bitbangio/SPI.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/shared-module/bitbangio/SPI.c b/shared-module/bitbangio/SPI.c
index 8be6cac5f..65511964a 100644
--- a/shared-module/bitbangio/SPI.c
+++ b/shared-module/bitbangio/SPI.c
@@ -176,7 +176,7 @@ bool shared_module_bitbangio_spi_write(bitbangio_spi_obj_t *self, const uint8_t
}
// Reads in len bytes while outputting zeroes.
-bool shared_module_bitbangio_spi_read(bitbangio_spi_obj_t *self, uint8_t *data, size_t len) {
+bool shared_module_bitbangio_spi_read(bitbangio_spi_obj_t *self, uint8_t *data, size_t len, uint8_t write_data) {
if (len > 0 && !self->has_miso) {
mp_raise_ValueError(translate("Cannot read without MISO pin."));
}
@@ -210,8 +210,12 @@ bool shared_module_bitbangio_spi_read(bitbangio_spi_obj_t *self, uint8_t *data,
common_hal_digitalio_digitalinout_set_value(&self->mosi, false);
}
for (size_t i = 0; i < len; ++i) {
+ uint8_t data_out = write_data;
uint8_t data_in = 0;
- for (int j = 0; j < 8; ++j) {
+ for (int j = 0; j < 8; ++j, data_out <<= 1) {
+ if (self->has_mosi) {
+ common_hal_digitalio_digitalinout_set_value(&self->mosi, (data_out >> 7) & 1);
+ }
if (self->phase == 0) {
common_hal_mcu_delay_us(delay_half);
common_hal_digitalio_digitalinout_set_value(&self->clock, 1 - self->polarity);