Задача такая: была старая плата с 2186 и кодеком AD73322. После сброса кодека он инициализируется по SPORT последовательностью из 16 слов, после чего начинается его "нормальная" работа по 2 слова в цикл.
Реализовано было так: режим автобуферизации передачи, указываем буфер с последовательностью слов конфигурации и размером 16 слов. Ждем, пока указатель перескочит на начало буфера - конфигурация передана в кодек. Теперь переключаем автобуферизацию на "рабочий" буфер размером в 2 слова и далее работаю по прерыванию по заполнению этого буфера.
Все чудесно работает.
Теперь задача та-же, но процессор ADSP-2191.
Делал следующее:
1. Загрузку конфигурации пытался делать вручную пословно - грузил слово в SP0_TX, ждал флага опустошения TXS в SP0_STATR. Так вот - не выставляется такой флаг никогда, если не включен DMA (либо я что-то не так делаю).
2. Режим автобуферизации - так как DMA имеет буфер на 8 слов приходится задавать длину буфера на 8 слов больше нужного. При этом никакими средствами не получается точно определить, что передача первых 16 слов завершена (именно передача через SPORT). В общем что-то пытается работать, но каждый раз по разному и соответственно криво.
Т.е. проблема имеено с определением момента завершения передачи первых 16 слов и перенастройки "на лету" (так как данный кодек является "автором" всех сигналов синхронизации SPORT) на другой буфер передачи/приема.