Цитата
О каких 60 МГц говорили Вы - Вам виднее.
О сферических в вакууме, естественно
Цитата
но лучше разобраться с DMA (SgDMA/mSgDMA).
ДМА имеет смысл если ядро чем то еще полезным нагружено, в данном же случае, я так понимаю вся нагрузка на ядро проца - это тосовка данных. Более того подозреваю что ядро проца появилось как раз из-за необходимости доступа к ДДР, через имеющийся в ядре интерфейс. В таком раскладе ДМА - лишнее усложнение и нестабильность
В атаче если будет интересно программное фифо, вам надо создать 2 буфера длинной в 1.2 мегобайта, и набивать один из входящего потока, как получите сигнал выдать данные, переходите на другой буффер, а первый отдаете пользователю.
какой смысл хранить данных больше чем у вас могут попросить?
использовать буферы так
Код
uint8_t DataBuf1[1.2*1024*1024+2]; //буфер для хранения его надо в ДДР пихануть
uint8_t DataBuf2[1.2*1024*1024+2]; //буфер для хранения его надо в ДДР пихануть
FIFOStr Buffer1;
FIFOStr Buffer2;
InitFIFOStr(Buffer1,DataBuf1, sizeof(DataBuf1));
InitFIFOStr(Buffer2,DataBuf2, sizeof(DataBuf2));
дальше пихаете туда данные через AddFIFOData
и забираете через GetFIFOData, буфер чиститься сам при забирании данных, но можно и вызвать функцию очистки
вам надо только поправить функцию добавления данных, потому что она не дает перезаписывать буфер, возвращая код ошибки при переполнении. А также надо понять что делать если данные запросили, но их в буфере меньше 1.2 МБ, может вам вообще надо сделать 1 буфер, и выдавать всегда его целиком, а писать его по кругу...