Цитата(prussta @ Mar 31 2015, 09:12)

Всем доброго времени суток! Подскажите, как лучше организовать систему. Система в целом выглядит так: Есть софт процессор NiosII - он выполняет основные задачи: отвечает на запросы пользователя, принимает какие-то данные, обрабатывает их, выдает ответы и прочее. Также есть два SPI: SPI1 - он принимает данные из вне как только вся система запустилась и SPI2 в который мне нужно эти данные (определенное количество) выплюнуть (этот SPI от Ethernet платки). Получается, что мне нужно постоянно гнать данные из SPI1 в SPI2. Причем, иногда мне нужно в этот поток данных добавлять еще байт своих данных. Как это можно организовать с минимальным участием проца? Чтобы он успевал делать свою основную работу и меньше отвлекался на эту передачу? Может есть какая-то переферия для таких задач? Подскажите куда посмотреть? Частота работа Niosa 100MГц, а данные на SPI1 приходят с частотой 24Мгц.
Пока у меня рисуется стандартный вариант: по прерыванию на прием по SPI1 я через DMA записываю поступившие данные в память, как только пришло необходимое кол-во байт, выставляю флаг. И в основном цикле программы по этому флагу отправляю эти данные в SPI2.
Мне кажется тут проще иметь столько буферных хранилишь для данных, сколько типов данных. Т.о. в момент готовности передать в SPI2 нужно взять в соответствии с протоколом данные из разных буферных хранилищь и передать. В качестве хранилишщь удобно использовать FIFO.
Если функционально расписать по блокам:
1)блоки FIFO;
2) простенький блочек, который соберет в кучу данные с разных FIFO в соответствии с протоколом;
3) SPI передатчик.
FIFO может заполняться с различной частотой, а вычитываться из всех FIFO будет с одной частотой равной частоте передачи данный SPI2.
В итоге процессор сможет в режиме прямого доступа в память все сливать в своё FIFO, другие типы памятей тоже заполнятся как им будет удобно, а все вычитываться будет строго со скоростью SPI2.
ИМХО
Победа - это когда N раз упал и N+1 раз встал.