Browse Source

Use word count with word optimized block transfers

main
PaulStoffregen 4 years ago
parent
commit
574ab8c7a8
1 changed files with 3 additions and 3 deletions
  1. +3
    -3
      SPI.h

+ 3
- 3
SPI.h View File



void inline transfer(void *buf, size_t count) { void inline transfer(void *buf, size_t count) {
#if 0 #if 0
// Ethernet library fails if this is used. Why?
// TODO: byte order still needs work to match SPISettings
if (__builtin_constant_p(count)) { if (__builtin_constant_p(count)) {
if (count < 1) return; if (count < 1) return;
if (((count & 3) == 0) && (((uint32_t)buf & 3) == 0)) { if (((count & 3) == 0) && (((uint32_t)buf & 3) == 0)) {
// size is multiple of 4 and buffer is 32 bit aligned // size is multiple of 4 and buffer is 32 bit aligned
transfer32(buf, buf, count);
transfer32(buf, buf, count >> 2);
return; return;
} }
if (((count & 1) == 0) && (((uint32_t)buf & 1) == 0)) { if (((count & 1) == 0) && (((uint32_t)buf & 1) == 0)) {
// size is multiple of 2 and buffer is 16 bit aligned // size is multiple of 2 and buffer is 16 bit aligned
transfer16(buf, buf, count);
transfer16(buf, buf, count >> 1);
return; return;
} }
} }

Loading…
Cancel
Save