Skip to content

Commit 127543a

Browse files
michaelstoopsMichael Stoops
andauthored
Fixing arithmetic underflow in SPI I/O loops #337 (#338)
Co-authored-by: Michael Stoops <spam@michaelstoops.com>
1 parent 9c3538e commit 127543a

File tree

1 file changed

+4
-4
lines changed
  • src/rp2_common/hardware_spi

1 file changed

+4
-4
lines changed

src/rp2_common/hardware_spi/spi.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ int __not_in_flash_func(spi_write_read_blocking)(spi_inst_t *spi, const uint8_t
7676
size_t rx_remaining = len, tx_remaining = len;
7777

7878
while (rx_remaining || tx_remaining) {
79-
if (tx_remaining && spi_is_writable(spi) && rx_remaining - tx_remaining < fifo_depth) {
79+
if (tx_remaining && spi_is_writable(spi) && rx_remaining < tx_remaining + fifo_depth) {
8080
spi_get_hw(spi)->dr = (uint32_t) *src++;
8181
--tx_remaining;
8282
}
@@ -125,7 +125,7 @@ int __not_in_flash_func(spi_read_blocking)(spi_inst_t *spi, uint8_t repeated_tx_
125125
size_t rx_remaining = len, tx_remaining = len;
126126

127127
while (rx_remaining || tx_remaining) {
128-
if (tx_remaining && spi_is_writable(spi) && rx_remaining - tx_remaining < fifo_depth) {
128+
if (tx_remaining && spi_is_writable(spi) && rx_remaining < tx_remaining + fifo_depth) {
129129
spi_get_hw(spi)->dr = (uint32_t) repeated_tx_data;
130130
--tx_remaining;
131131
}
@@ -147,7 +147,7 @@ int __not_in_flash_func(spi_write16_read16_blocking)(spi_inst_t *spi, const uint
147147
size_t rx_remaining = len, tx_remaining = len;
148148

149149
while (rx_remaining || tx_remaining) {
150-
if (tx_remaining && spi_is_writable(spi) && rx_remaining - tx_remaining < fifo_depth) {
150+
if (tx_remaining && spi_is_writable(spi) && rx_remaining < tx_remaining + fifo_depth) {
151151
spi_get_hw(spi)->dr = (uint32_t) *src++;
152152
--tx_remaining;
153153
}
@@ -192,7 +192,7 @@ int __not_in_flash_func(spi_read16_blocking)(spi_inst_t *spi, uint16_t repeated_
192192
size_t rx_remaining = len, tx_remaining = len;
193193

194194
while (rx_remaining || tx_remaining) {
195-
if (tx_remaining && spi_is_writable(spi) && rx_remaining - tx_remaining < fifo_depth) {
195+
if (tx_remaining && spi_is_writable(spi) && rx_remaining < tx_remaining + fifo_depth) {
196196
spi_get_hw(spi)->dr = (uint32_t) repeated_tx_data;
197197
--tx_remaining;
198198
}

0 commit comments

Comments
 (0)