Tiva C Series TM4C123GH6PZ - SPI čtení problém

Zdravím,
už dlouho se snažím rozchodit korektní čtení na SPI na ARMovém kontroléru TM4C123GH6PZ. Prostředí IAR workbench.
Podle datasheetu bych měl poslat tři bajty obsahující 0x02, 0x00 a následně adresu registru ze kterého chci číst. Podé by mělo následovat poslání něčeho např 0x00 aby měl slave clocky, nyní je možné vyčíst ne vstupním FIFO nějaký balast a následují validní data (poslat 0x00, vyčíst bajt, poslat 0x00, vyčíst vajt, atd). Bohužel mě to čtení trochu nějak blbne, bajty mi to čte ve zvláštním pořadí. Můžete někdo zkusit projít tento kód, jestli je to v pořádku?

Po tomto čtení mám hned v prvním čteném bajtu validní data … tedy někdy, ne vždy :frowning:.

//INIT 
void AOutInit(void)    
{
  // SSI0 setup - for DAC module
  SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
  GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE, GPIO_PIN_3);
  GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_2);
  SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 100000, 8);
  SSIEnable(SSI0_BASE);
  
  // set DAC error inputs
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
  GPIOPinTypeGPIOInput(GPIO_PORTH_BASE, DAC_ERR1);
  GPIOPinTypeGPIOInput(GPIO_PORTH_BASE, DAC_ERR2);

  // set output mode
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
  GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, DAC_UI_CH1);
  GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, DAC_UI_CH2);
}

V této funkci je čtení

void AOutUpdateStatus(void)
{
  uint32_t buffer1 [3];
  buffer1 [0] = 1;
  buffer1 [1] = 2;
  buffer1 [2] = 3;
  uint16_t reading = 0;  
  
  GPIOPinWrite(GPIO_PORTA_BASE, DAC_CH_SS, DAC_CH1_SS_LOW);     //Latch low
  SSIDataPut(SSI0_BASE, DAC_RD_REG);  //send read command .. 0x02
  SSIDataPut(SSI0_BASE, 0x00);                       //send NOP condition
  SSIDataPut(SSI0_BASE, DAC_RD_DAC);         //desired read address
  while(SSIBusy(SSI0_BASE));                   //wait till transmit is complete
  GPIOPinWrite(GPIO_PORTA_BASE, DAC_CH_SS, AC_CH1_SS_HIGH);    //Latch high
  
  vTaskDelay(1 / portTICK_RATE_MS);
  
  GPIOPinWrite(GPIO_PORTA_BASE, DAC_CH_SS, DAC_CH1_SS_LOW);     //Latch low
SSIDataPut(SSI0_BASE, 0x00);         //transmit providing clock for MISO
  SSIDataGet(SSI0_BASE, buffer1 + 0); // first byte from FIFO (nondefined byte - trash)                 
  SSIDataPut(SSI0_BASE, 0x00);   //transmit providing clock for MISO
  SSIDataGet(SSI0_BASE, buffer1 + 1);      // second byte from FIFO (first valid byte)   
  SSIDataPut(SSI0_BASE, 0x00);       //transmit providing clock for MISO
  SSIDataGet(SSI0_BASE, buffer1 + 2);   / third byte from FIFO (second valid byte)
  while(SSIBusy(SSI0_BASE));     //transmit providing clock for MISO
  GPIOPinWrite(GPIO_PORTA_BASE, DAC_CH_SS, AC_CH1_SS_HIGH);    //Latch high  
}