Регистр статуса DMA-каналов (DMASTAT)
DMA-контроллер ADSP-21060 отображает состояния DMA-пересылок по каждому каналу в регистре статуса DMASTAT, доступном только для чтения. Биты с 0 по 9 отображают состояние соответствующих DMA-каналов, причем активное состояние бита означает, что DMA-пересылка по данному каналу разрешена и текущая DMA-последовательность еще не завершена. Сброшенный бит означает, что в данный момент времени по каналу выполняется передача TCB-блока (загрузка параметров следующей DMA-пересылки) или что DMA для данного канала запрещена.
Биты с 10 по 19 показывают текущий статус цепочечного связывания DMA-пересылок по соответствующему каналу. Если бит установлен, то выполняется пересылка TCB-блока (или ожидается пересылка TCB-блока), т.е. когда процесс связывания не закончен. В противном случае (цепочечная DMA запрещена или по данному каналу передаются данные) бит сброшен.
В качестве альтернативы использованию прерываний для отслеживания завершения единичной (не цепочечной) DMA-пересылки по какому-либо каналу может быть использовано чтение соответствующих ему битов в регистре DMASTAT. Если оба статусных бита для данного канала сброшены, то DMA-пересылка завершена.
Например, чтобы приостановить выполнение задачи ядром процессора до окончания выполнения пересылки по DMA-каналу № 6 (буфер внешнего порта EPB0), следует выполнить следующие действия:
R0 = dm(DMASTAT); // напрямую нельзя работать, так как в памяти
wait: BTST R0 BY 0x6; // проверка канала № 6 на передачу данных
IF NOT SZ JUMP wait; // вернуться если бит=1 (DMA-пересылка активна)
BTST R0 BY 0x10; // проверка канала № 6 на передачу TCB
IF NOT SZ JUMP wait; // вернуться если бит=1 (загрузка TCB)
// далее можно работать с полученным буфером
....................