I am using the MibSPI framework from the HalGen where I am using Transfer Group 0 and 1. These group are set to a length on 10 using a 16 bit data format. This is my maximim length I will need. However the transfer can be from 1 to 10 16-bit words and hence, I need to dynamically change the transfer length. To do this, I wrote the following function which I setup just before the MibSPI transfer command:
typedef enum {
QSPI_TRANSFER_OUTPUT_GROUP,
QSPI_TRANSFER_INPUT_GROUP,
QSPI_TRANSFER_LAST_GROUP
}QSPI_TRANSFER_GROUP_ENUM;
#define QSPI_PORT mibspiREG5
void QSPI_TransferSetup(uint16_t u16Size, QSPI_TRANSFER_GROUP_ENUM TransferGroup)
{
uint8_t loop;
uint32_t BufferSizeTotal;
transferGroupSize[TransferGroup] = (uint32_t)u16Size;
QSPI_PORT->TGCTRL[QSPI_TRANSFER_INPUT_GROUP] &= 0xFFFF0000;
QSPI_PORT->TGCTRL[QSPI_TRANSFER_INPUT_GROUP] |= (transferGroupSize[QSPI_TRANSFER_OUTPUT_GROUP] << 8);
BufferSizeTotal = transferGroupSize[QSPI_TRANSFER_OUTPUT_GROUP] + transferGroupSize[QSPI_TRANSFER_INPUT_GROUP];
for(loop = QSPI_TRANSFER_LAST_GROUP; loop < 8; loop++)
{
QSPI_PORT->TGCTRL[loop] &= 0xFFFF0000;
QSPI_PORT->TGCTRL[loop] |= (BufferSizeTotal << 8);
}
QSPI_PORT->TGCTRL[8U] = BufferSizeTotal << 8U;
QSPI_PORT->LTGPEND = (QSPI_PORT->LTGPEND & 0xFFFF00FFU) | ((BufferSizeTotal - 1U) << 8U);
}
Array transferGroupSize is just a local sortage of the new size per transfer group.
But this does not work. The transfer group size is always 10 when looking at the signals on an oscilloscope.
What am I missing?
but it did not help.
Andy