Как правильно разбить 24-битную посылку(16 и 8 либо 3 по 8) с конфигурацией АЦП для передачи по SPI?

Начинаю работать с АЦП 5101НВ035 от Миландра. Отладка LDM-HELPER-K1986BE4 подключена в качестве SPI мастера.

Во-первых, я чувствую что у меня какое-то фундаментальное непонимание того как работают регистры АЦП. Почему адреса регистров идут с шагом 1 байт, а не 4 (обычно для хранения int)? Как туда записать что-то больше 8 бит? Регистры

Функция предварительно такая. Закидываю 8 бит команду о том, что следующей операцией будет запись в регистр CFG. Дальше нужно закинуть 24 битную посылку, тут у меня затык.

Такой же вопрос возникает при чтении 16 или 20 битного значения из регистров DATA1-8

void spi_transactions(void) {
    SSP_SendData(MDR_SSP1, 0x2); // 0b00000010 COM: read STAT
    uint8_t stat = SSP_ReceiveData(MDR_SSP1, 0x0);
    while(stat & 0x1); // wait for init end

    SSP_SendData(MDR_SSP1, 0x4); // 0b00000100 COM: write to CFG

    SSP_SendData(MDR_SSP1, 0x2C0 ???); // 0b00000000 00000010 11000000 CFG: ch 1-8=вкл; FSS=000; MDS=010; CLKS=1; REFS=1; CONV=0; FRMT=0(16bit)
}

Библиотечная функция отправки по SPI

void SSP_SendData(MDR_SSP_TypeDef* SSPx, uint16_t Data)
{
  /* Check the parameters */
  assert_param(IS_SSP_ALL_PERIPH(SSPx));

  /* Transmit Data */
  SSPx->DR = Data;

}

Ссылки на АЦП и контроллер:

https://ic.milandr.ru/products/atsp_i_tsap/atsp/5101nv035/

https://ic.milandr.ru/products/mikrokontrollery_i_protsessory/8_razryadnye_mikrokontrollery/1886ve4u/


Ответы (0 шт):