RXNE выставляется после передачи байта. Полюбому, чисто, чтобы вы
не забыли вычитать данные(на самом деле, хуй его знает, зачем этот
флаг). Смотрите первые два сообщения по сцылке про это. И пофиг,
передаётся 8 или 16 бит. Это косяг, ессно. Флаг должэн взводиться
после завершения базовой транзакции, т.к. при передаче одновременно
идёт и приём. Т.е. сигнала BUSY или TXE достаточно. Хотя TXE тожэ
нах не упёрся, они оба-три дублируют друг друга. Нижэ код работы с
АЦП. https://caxapa.ru/1318658.html
void TIM4_IRQHandler(void) //два АЦП стоят daisy chain, таймер на 4мкс
{
TIM4->INTFR&=~TIM_IT_Update;
ADCswapChannel=0; //сигнализируем для прерывания СПИ, что пойдут данные с первого АЦП и начинаем приём, загрузив в DATAR "0"
SPI2->DATAR=(uint16_t)0; //start SPI16
}
void SPI2_IRQHandler(void) //по TXEIE
{
if(ADCswapChannel==0) //смотрим, какое АЦП интеруптнуло
{
ADCswapChannel=(int)-1; //если первое, кладём данные из буфера в норку и запускаем передачу данных со второго
ADCdataHighSense=SPI2->DATAR;
SPI2->DATAR=(uint16_t)0; //start SPI16
}
else
{ //если второе, то кладём данные в норку и перезапускаем преобразование CNV
GPIOB->BSHR=bit12ResetBSHR; //CNV=0
ADCdataLowSense=SPI2->DATAR;
ADCdataHere=-1; //сообщаем фону, что, "таки, да"
}
GPIOB->BSHR=bit12SetBSHR; //CNV=1
}