Как правильно разбить 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/