Во-первых, эти АЦП-шки можно подключить не параллельно, а последовательно в цепь, daisy-chain называется (схема со стр.23). И тогда можно одним потоком принять байты с обеих АЦП, 4 байта сразу, не заморачиваясь с переключением CS между ними.
А во-вторых, если SPI работает только на прием, то его остановить можно только принудительно, после приема желаемого количества байтов. То есть, в прерывании по приему SPI нужно считать принятые байты, и как только приняли все, останавливаем прием, выключив SPI. Ну а там, после этого, если все-же АЦП-шки подсоединены параллельно, переключаем CS на другую АЦП и запускаем SPI опять.
В вашем выложенном коде не хватает секции приема - как она у вас сделана, нам не известно.
Скорее всего, проблема именно в несвоевременном переключении CS. Оно ведь вручную (программно) идет.
Инициализация "напрямую" через CMSIS записывается очень легко :
PHP код:
|
/* .....................
* Настройка SPI
* Master, 1/32 APB1, 16 bit, RX, SSI
*/
RCC-›APB1ENR |= RCC_APB1ENR_SPI2EN; // Тактирование SPI
SPI2-›CR1 |= SPI_CR1_SSM | SPI_CR1_SSI | // Soft select master mode
SPI_CR1_RXONLY | // Режим RX
SPI_CR1_DFF | // 16-бит
SPI_CR1_MSTR | // Master
SPI_CR1_BR_2 ; // Скорость интерфейса, 1/32 AHB1
SPI2-›CR2 |= SPI_CR2_RXNEIE; // Разрешены прерывания
//от заполнения буфера приема
NVIC_EnableIRQ (SPI2_IRQn); // Разрешен вектор прерывания от SPI2
SPI2-›CR1 |= SPI_CR1_SPE; // Разрешена работа SPI
|