Skip to content

Commit 7499b1a

Browse files
author
Nathan Seidle
committed
Make the iomTransfer global to decrease single byte read/write time by 25%.
1 parent 1e9939e commit 7499b1a

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

libraries/SPI/src/SPI.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
const SPISettings DEFAULT_SPI_SETTINGS = SPISettings();
3030

31+
am_hal_iom_transfer_t iomTransfer = {0};
32+
3133
SPIClass::SPIClass(uint8_t iom_instance) : IOMaster(iom_instance)
3234
{
3335
_duplex = ap3_spi_full_duplex;
@@ -105,6 +107,15 @@ void SPIClass::begin()
105107
}
106108

107109
config(DEFAULT_SPI_SETTINGS);
110+
111+
//Set global's settings that won't change between transfers
112+
iomTransfer.ui32InstrLen = 0; // No instructions
113+
iomTransfer.ui32Instr = 0; // No instructions
114+
iomTransfer.bContinue = false;
115+
iomTransfer.ui8RepeatCount = 0; // ?
116+
iomTransfer.ui8Priority = 1; // ?
117+
iomTransfer.ui32PauseCondition = 0; // ?
118+
iomTransfer.ui32StatusSetClr = 0; // ?
108119
}
109120

110121
void SPIClass::config(SPISettings settings)
@@ -272,19 +283,9 @@ void SPIClass::transferIn(void *buf, size_t count)
272283

273284
void SPIClass::_transfer(void *buf_out, void *buf_in, size_t count)
274285
{
275-
am_hal_iom_transfer_t iomTransfer = {0};
276-
// iomTransfer.uPeerInfo.ui32SpiChipSelect = cs_pad;
277-
iomTransfer.ui32InstrLen = 0; // No instructions
278-
iomTransfer.ui32Instr = 0; // No instructions
279-
iomTransfer.ui32NumBytes = count; // How many bytes to transfer
280-
// iomTransfer.eDirection = AM_HAL_IOM_TX; // AM_HAL_IOM_FULLDUPLEX - Note: Ambiq SDK says that FULLDUPLEX is not yet supported // todo:
286+
iomTransfer.ui32NumBytes = count; // How many bytes to transfer
281287
iomTransfer.pui32TxBuffer = (uint32_t *)buf_out; // todo: does this have the proper lifetime?
282288
iomTransfer.pui32RxBuffer = (uint32_t *)buf_in;
283-
iomTransfer.bContinue = false;
284-
iomTransfer.ui8RepeatCount = 0; // ?
285-
iomTransfer.ui8Priority = 1; // ?
286-
iomTransfer.ui32PauseCondition = 0; // ?
287-
iomTransfer.ui32StatusSetClr = 0; // ?
288289

289290
// Determine direction
290291
if ((buf_out != NULL) && (buf_in != NULL))

0 commit comments

Comments
 (0)