| 434 | } |
| 435 | |
| 436 | static void modSPITxCommon(modSPIConfiguration config, uint8_t *data, uint16_t count, uint8_t endian, modSPIBufferLoader loader) |
| 437 | { |
| 438 | uint8_t loaded; |
| 439 | |
| 440 | if (3 & (int)data) { |
| 441 | modLog("SPI tx data address not long aligned"); |
| 442 | return; |
| 443 | } |
| 444 | |
| 445 | modSPIActivateConfiguration(config); |
| 446 | |
| 447 | if (kSPIEndianLittle == endian) |
| 448 | WRITE_PERI_REG(SPI_FLASH_USER(HSPI), SPI_FLASH_DOUT); |
| 449 | else |
| 450 | WRITE_PERI_REG(SPI_FLASH_USER(HSPI), SPI_FLASH_DOUT | SPI_WR_BYTE_ORDER); // byte swap each 32-bit long as it is transmitted |
| 451 | |
| 452 | loaded = (loader)(data, (count <= SPI_BUFFER_SIZE) ? count : SPI_BUFFER_SIZE); |
| 453 | if (loaded >= count) |
| 454 | gSPIDataCount = 0; |
| 455 | else { |
| 456 | gSPIBufferLoader = loader; |
| 457 | gSPIData = data + loaded; |
| 458 | gSPIDataCount = count - loaded; |
| 459 | } |
| 460 | |
| 461 | modSPIStartSend(); |
| 462 | |
| 463 | if (config->sync) |
| 464 | modSPIFlush(); |
| 465 | } |
| 466 | |
| 467 | void modSPITx(modSPIConfiguration config, uint8_t *data, uint16_t count) |
| 468 | { |
no test coverage detected