Цепочечные DMA-пересылки

Связывание DMA-пересылок позволяет контроллеру DMA автоматически инициализироваться для выполнения следующей DMA-последовательности по одному и тому же каналу. При использовании цепочечных DMA ADSP-21060 автоматически установит параметры следующей DMA-пересылки после того, как содержимое текущего буфера данных будет передано или принято. Для задания адреса во внутренней памяти, где хранятся параметры следующей DMA-последовательности (TCB-блок), используется 18-разрядный регистр указателя цепочки CPx. 17 младших битов регистра CPx содержат адрес TCB-блока (смещенный на 0x0002 0000), а старший бит (бит PCI) указывает на то, произойдет ли прерывание по окончании текущей DMA-последовательности. Если бит PCI установлен, то по окончании DMA-пересылки (сброс в 0 регистра Cx) будет сгенерировано маскируемое прерывание для данного DMA-канала. Значение бита PCI учитывается только в том случае, если для канала разрешен режим цепочечной DMA (бит CHEN в соответствующем регистре управления установлен). Если режим связывания DMA запрещен, то всегда по завершении DMA-пересылки будет генерироваться маскируемое прерывание для данного DMA-канала.

В процессе загрузки TCB-блока контроллер DMA автоматически читает значения из внутренней памяти и записывает их в регистры параметров DMA-канала. Порядок загрузки значений из внутренней памяти в регистры параметров имеет следующий вид.

 

Адрес Для каналов внешнего порта и линк-буферов № 4, 5 Для каналов последовательных портов и линк-буферов № 0-3
CPx-8 + 0x0002 0000 - LPATH3
CPx-7 + 0x0002 0000 ECx LPATH2
CPx-6 + 0x0002 0000 EMx LPATH1
CPx-5 + 0x0002 0000 EIx DBx (загружается только для 2D DMA)
CPx-4 + 0x0002 0000 GPx GPx
CPx-3 + 0x0002 0000 CPx CPx
CPx-2 + 0x0002 0000 Cx Cx (и DAx для 2D DMA)
CPx
CPx-1 + 0x0002 0000

IMx IMx
CPx + 0x0002 0000 IIx IIx

 

Примечания.

1. При загрузке TCB в режиме одномерной цепочечной DMA (1D DMA) в регистры DAx и DBx значения не загружаются. В режиме 2D DMA загружает только значение в регистр DBx, а в регистр DAx дублируется значение, загружаемое в регистр Cx.

2. Загрузка регистров LPATH3, LPATH2, LPATH1 выполняется, только если бит LMSP в регистре управления LCOM линк-буферов № 0,1,2 или 3 установлен (в режиме mesh multiprocessing).

3. Для линк-буферов № 4 и 5 всегда загружаются все 8 тех же регистров параметров, что используются для DMA через внешний порт, однако если используется DMA именно через линк-буферы, то регистры EIx, EMx и ECx не используются.

 

Для обеспечения корректной загрузки всех регистров параметров используется вспомогательный рабочий регистр. Перед началом загрузки TCB-блока в рабочий регистр загружается значение из регистра CPx. Во время загрузки параметров рабочий регистр декрементируется после загрузки каждого слова. По завершении загрузки в рабочий регистр копируется новое значение регистра CPx.

Запрос на использование шины для загрузки TCB-блока имеет свой приоритет и аналогично запросам на обслуживание от DMA-каналов защелкивается и удерживается DMA-контроллером до тех пор, пока не получит наивысший приоритет и не будет обслужен. Если имеют место запросы на загрузку TCB-блоков сразу для нескольких каналов, то в первую очередь загружаются новые параметры для канала с наивысшим приоритетом. Процесс загрузки TCB-блока не может быть прерван другим запросом, даже с более высоким приоритетом.

Для установки и запуск цепочки DMA-последовательностей может быть использован следующий алгоритм.

1. Инициализировать все TCB-блоки во внутренней памяти.

2. Записать необходимые значения в регистр управления DMA для соответствующего канала, установив при этом биты разрешения DMA (DEN) и разрешения режима цепочечной DMA (CHEN).

3. Записать адрес последнего слова (т.е. адрес значения IIx) в первом блоке параметров TCB в младшие 17 бит регистра CPx – это инициирует начало цепочечной DMA.

После этого DMA-контроллер автоматически загрузит первый TCB-блок и начнет выполнение первой DMA-последовательности. По ее завершении будет инициирована следующая DMA-пересылка, если загруженное в регистр CPx значение не будет равно нулю.