Добрый день,
Пишу периферию для NIOS.
Задача периферийного блока - по SPI выдавать данные в несколько SPI ЦАПов.
Алгоритм работы блока такой:
Процессорное ядро по прерыванию от таймера кладет в FIFO набор выборок
для ЦАПов, устанавливает бит начала передачи и выходит из прерывания.
Блок по этому биту начинает передавать данные в ЦАПы по SPI выбирая
нужный чипселектом.
Блок работает следующим образом.
Ждет разрешающий бит (флаг) от NIOS.
Выставляет 1-й SS.
Читает данные из FIFO. Выход FIFO подключен непосредственно к
сдвиговому регистру SPI.
Модуль "control" начинает передачу сигналом на линии "go" и ждет
завершения передачи по линии "done".
Модуль "spi_master" по сигналу "go" фиксирует значение из FIFO в
сдвиговом регисте, и начинает передачу.
Окончания передачи передается по линии "done".
Далее модуль "control" выставляет следующий SS, читает из FIFO, так далее до
завершения передачи во все ЦАПы,
Завершение обмена фиксирует флагом (битом) в управляющем регистре периферийного блока.
Собственно вопрос по взаимодействию между модулями.
Модуль "control" должен дать команду на выдачу модулю "spi_master" по
линии "go", и дождаться окончания передачи по линии "done".
Каким сигналом (способом) передавать? Держать на линии go всегда лог. 1 и убирать
его когда придет сигнал "done"?
Или передавать стробами длительностью 1 период тактового сигнала?
Если уровнем, то как организовать правильность снятия сигналов?