Эээ... Проблема в расчете границы необработанных данных.
Да уж, проблема:
INLINE static uint16_t GetTrfCnt()
{
CRITICAL_SECTION();
return DMA_CH->TRFCNT;
}
volatile uint8_t RxBuffer[400];
uint16_t RxNext, RxFirst;
void main()
{
////
////
while (1) {
// расчёт индекса принятых даннных
uint16_t dma_rx_index=rx_dma::GetTrfCnt();
RxNext=sizeof(RxBuffer)-dma_rx_index;
if (RxNext!=RxFirst) {
}
а тут нужно считать ручками.
Так и пусть считает - на то он и МК.
В ФИФО все сделано аппаратно, а тут нужно считать ручками. -
В ФИФИ тоже не всё аппаратно - чтобы его считать, МК должен его прочитать, вот если бы оно само как-нибудь, тогда да...