МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 4

 

  Главная      Книги - Разные     МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019)

 

поиск по сайту            правообладателям  

 

   

 

   

 

содержание      ..     2      3      4      5     ..

 

 

 

МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 4

 

 

 

 

49 

8

 

Контроллер прямого доступа к памяти 

Основные свойства и отличительные особенности: 
- 24 канала DMA; 
- каждый  канал  DMA  имеет  свои  сигналы  управления  передачей  данных  и  

программируемый уровень приоритета; 

- каждый  уровень  приоритета  обрабатывается,  исходя  из  уровня  приоритета, 

определяемого номером канала DMA; 

- поддержка различного типа передачи данных в пределах внутреннего ОЗУ:  

память – память, память – периферия, периферия – память; 

- поддержка различных типов циклов DMA; 
- поддержка передачи данных различной разрядности; 
- каждому  каналу  DMA  доступна  первичная  и  альтернативная  структура 

управляющих данных канала; 

- все данные канала хранятся во внутреннем ОЗУ в структуре управляющих данных 

канала; 

- разрядность данных приемника равна разрядности данных передатчика; 
- количество передач в одном цикле DMA может программироваться от 1 до 1024; 
- инкремент адреса передачи может быть больше, чем разрядность данных. 
 
Аппаратные источники запросов каналов DMA указаны в таблице 8.1. 

Т а б л и ц а   8 . 1   – Аппаратные источники запросов каналов DMA 

Номер 

канала 

Аппаратный источник 

запросов 

Описание 

UART0_TX 

Канал DMA от UART0 по передаче 

UART1_TX 

Канал DMA от UART1 по передаче 

UART2_TX 

Канал DMA от UART2 по передаче 

UART3_TX 

Канал DMA от UART3 по передаче 

UART0_RX 

Канал DMA от UART0 по приему 

UART1_RX 

Канал DMA от UART1 по приему 

UART2_RX 

Канал DMA от UART2 по приему 

UART3_RX 

Канал DMA от UART3 по приему 

ADC_DMA0 

Канал 0 DMA контроллера АЦП 

ADC_DMA1 

Канал 1 DMA контроллера АЦП 

10 

ADC_DMA2 

Канал 2 DMA контроллера АЦП 

11 

ADC_DMA3 

Канал 3 DMA контроллера АЦП 

12 

ADC_DMA4 

Канал 4 DMA контроллера АЦП 

13 

ADC_DMA5 

Канал 5 DMA контроллера АЦП 

14 

ADC_DMA6 

Канал 6 DMA контроллера АЦП 

15 

ADC_DMA7 

Канал 7 DMA контроллера АЦП 

16 

SPI0_TX 

Канал DMA от SPI0 по передаче 

17 

SPI1_TX 

Канал DMA от SPI1 по передаче 

18 

SPI2_TX 

Канал DMA от SPI2 по передаче 

19 

SPI3_TX 

Канал DMA от SPI3 по передаче 

20 

SPI0_RX 

Канал DMA от SPI0 по приему 

21 

SPI1_RX 

Канал DMA от SPI1 по приему 

22 

SPI2_RX 

Канал DMA от SPI2 по приему 

23 

SPI3_RX 

Канал DMA от SPI3 по приему 

 
 
 

 

 

50 

8.1

 

Программное управление модулем DMA 

Контроллер  DMA выполняет  передачи 8-, 16- и 32-разрядных данных. Разрядность 

данных источника и приемника должны быть одинаковыми. 

Контроллер  DMA  позволяет  управлять  инкрементом  адреса  при  чтении  данных  из 

источника  и  при  записи  данных  в  приемник.  Инкремент  адреса  зависит  от  разрядности 
передаваемых  данных:  минимальная  величина  инкремента  адреса  всегда  соответствует 
разрядности  передаваемых  данных;  максимальная  величина  –  одно  слово.  Контроллер 
DMA может быть настроен на работу с фиксированным адресом (например, для работы c 
FIFO).  

Контроллер  DMA  имеет  возможность  обслуживать  сигналы  запроса  на  одиночный 

обмен  SREQ  и  запроса  на  пакетный  обмен  BREQ  блоков  UART,  SPI.  Блок  ADC 
генерирует только запросы на пакетный обмен BREQ.   

Каждому  каналу  DMA  соответствуют  две  структуры  управляющих  данных: 

первичная  и  альтернативная.  В  ОЗУ  должна  быть  отведена  область  для  хранения  этих 
структур.  

На  рисунке  8.1  показана  область  памяти,  необходимая  контроллеру  для  структур 

управляющих  данных  каналов,  при  использовании  всех  24  каналов  и  опциональной 
альтернативной структуры данных. 

 

 

 

Рисунок 8.1 – Карта памяти для 24 каналов DMA, включая альтернативную 

структуру  

 
Объем  структуры,  показанной  на  рисунке  8.1,  составляет  768  байт.  Контроллер 

использует  младшие  разряды  адреса  для  доступа  ко  всем  элементам  структуры 
управляющих  данных,  и  поэтому  разрешенные  значения  базового  адреса  для  первичной 
структуры управляющих данных XXXXX000h, XXXXX400h, XXXXX800h, XXXXXC00h. 

 

 

51 

Базовый адрес для первичной структуры управляющих данных возможно установить 

путем записи соответствующего значения в регистр CTRL_BASE_PTR. 

В таблице 8.2 перечислены разряды адреса, обеспечивающие контроллеру доступ к 

различным элементам структуры управляющих данных. 

 

Т а б л и ц а   8 . 2   –  Разряды  адреса,  используемые  для  доступа  к  управляющим  данным 
24 каналов 

 

Разряды адреса 

 

 

 

Обозначение  Биты 

Действие 

Выбор структуры управляющих данных 

Первичная  

Альтернативная  

CHNL 

8-4 

Выбор канала.  
Допустимые значения 0h-18h 

EL 

3-0 

Выбор управляющего элемента 
0h  Указатель конца данных источника 
4h  Указатель конца данных приемника 
8h  Конфигурация структуры управляющих данных 
Ch  Не используется. Контроллер не имеет доступа к этому адресу  

 

Не  обязательно  вычислять  базовый  адрес  альтернативной  структуры  управляющих 

данных, он вычисляется автоматически и помещается в регистр ALT_CTRL_BASE_PTR. 

Любая из структур управляющих данных каждого канала состоит из двух указателей 

адреса (приемника и источника данных) и ячейки управления канала.  

 

Управление канала (CHANNEL_CFG) 

32-разрядная  ячейка  памяти,  содержащая  конфигурационную  информацию  для 

осуществления  передач  DMA  (на  рисунке  8.1  отмечена  как  «Управление»).  В  начале 
цикла  DMA  или  начале  2

R

  передачи  контроллер  DMA  считывает  значение  этой  ячейки. 

После  выполнения  2

R

  или  N  передач  он  сохраняет  обновленное  ее  значение  обратно  в 

память. Структура регистра CHANNEL_CFG приведена в таблице 8.3. 

 

Т а б л и ц а   8 . 3  – Структура управляющих данных канала 

 

CHANNEL_CFG 

 

 

 

 

 

 

 

 

52 

Продолжение таблицы 8.3 

Поле 

Биты 

Описание 

dst_inc 

31-30  Шаг инкремента адреса приемника. 

Код, записанный в поле dst_inc, задает шаг, который в свою 
очередь зависит от разрядности данных источника 

Код 

Разрядность данных источника 

Байт 

Слово (16 бит) 

Двойное слово (32 бита) 

00 

Шаг – байт  

Зарезервировано 

Зарезервировано 

01 

Шаг – слово (16 бит) 

Зарезервировано 

10 

Шаг – двойное слово (32 бита) 

11 

Нет инкремента. Адрес остается равным значению ячейки  
DST_DATA_END_PTR 

dst_size 

29-28  Разрядность данных приемника. 

Значение этого поля должно быть равно значению поля src_size 
 

П р и м е ч а н и е  – Если контроллер обнаруживает неравные 

значения этих полей, он при ближайшем обновлении поля N–1 
устанавливает значение поля dst_size, равное src_size. 

src_inc 

27-26  Шаг инкремента адреса источника. 

Код, записанный в поле, src_inc задает шаг, который в свою 
очередь зависит от разрядности данных источника 

Код 

Разрядность данных источника 

Байт 

Слово (16 бит) 

Двойное слово (32 бита) 

00 

Шаг – байт  

Зарезервировано 

Зарезервировано 

01 

Шаг – слово (16 бит) 

Зарезервировано 

10 

Шаг – двойное слово (32 бита) 

11 

Нет инкремента. Адрес остается равным значению ячейки 
SRC_DATA_END_PTR  

src_size  

25-24  Разрядность данных источника 

00  Байт 
01  Слово (16 бит) 
10  Двойное слово (32 бита) 
11  Зарезервировано. Не использовать! 

dst_prot_ctrl   23-21  Задает  параметры  защиты  шины  AHB-Lite  при  записи  данных  в 

приемник

 

 

Биты поля dst_prot_ctrl 

23 

22 

21 

Доступ не 
кэшируется 

Доступ не 
буферизуется

 

Доступ 
непривилегированный

 

Доступ 
кэшируется

 

Доступ 
буферизуется

 

Доступ 
привилегированный 

src_prot_ctrl   20-18  Задает  параметры  защиты  шины  AHB-Lite  при  чтении  данных  из 

источника

 

 

Биты поля src_prot_ctrl 

20 

19 

18 

Доступ не 
кэшируется 

Доступ не 
буферизуется

 

Доступ 
непривилегированный

 

Доступ 
кэшируется

 

Доступ 
буферизуется

 

Доступ 
привилегированный 

 
 

 

 

53 

Продолжение таблицы 8.3 

Поле 

Биты 

Описание 

R_power 

17-14  Параметр R.  

Задает  количество  передач  канала  DMA  до  выполнения 
контроллером процедуры арбитража (переарбитрации). 
Количество передач равно 2

R

 

Код  

Количество передач 

0h 

1 (арбитраж производится после каждой передачи DMA) 

1h 

2h 

3h 

4h 

16 

5h 

32 

6h 

64 

7h 

128 

8h 

256 

9h 

512 

Ah – Fh  1024 (арбитраж не производится, так как максимальное 

количество передач DMA равно 1024) 

П р и м е ч а н и е   – Необходимо с осторожностью устанавливать 

большие значения R для низкоприоритетных каналов, так как это 
может привести к невозможности обслуживать запросы по 
высокоприоритетным каналам. 

N-1 

13-4 

Перед  выполнением  цикла  DMA  эти  разряды  указывают  общее 
количество передач DMA, из которых состоит цикл 

Код  

Количество передач 

000h 

001h 

… 

… 

3FFh 

1024 

П р и м е ч а н и е  – Контроллер обновит это поле перед тем, как 

произвести процесс арбитража. Это позволяет контроллеру хранить 
количество  оставшихся  передач  DMA  до  завершения  всего  цикла 
DMA.  

next_use_ 
burst 

Контролирует  установку  соответствующий каналу бита в регистре 
CHNL_USEBURST_SET, 

если 

контроллер 

работает 

в 

периферийном режиме  «разборка-сборка» и завершает цикл DMA, 
используя альтернативные управляющие данные 
 

П р и м е ч а н и е  

–  

Перед  завершением  цикла  DMA, 

использующего альтернативные  управляющие данные, контроллер 
сбрасывает 

соответствующий 

каналу 

бит 

в 

регистре 

CHNL_USEBURST_SET,  если  количество  оставшихся  передач 
DMA  меньше,  чем  2

R

.  Программирование  бита  next_use_burst 

определяет,  будет  ли  контроллер  дополнительно  переопределять 
состояние бита в регистре CHNL_USEBURST_SET. 
 
Если  контроллер  выполняет  цикл  DMA  в  периферийном  режиме 
«разборка-сборка»,  то  после  окончания  цикла,  использующего 
альтернативные управляющие данные, дальнейшие действия будут 
зависеть от состояния бита next_use_burst. 

 

 

54 

Окончание таблицы 8.3 

Поле 

Биты 

Описание 

next_use_ 
burst 

Контроллер  не  изменяет  значение  соответствующего  каналу 
бита в регистре CHNL_USEBURST_SET. 
Если  бит  Ci  в  CHNL_USEBURST_SET  сброшен,  то  при 
выполнении  циклов  DMA  c  использованием  альтернативных 
управляющих  данных  контроллер  отвечает,  как  на  запросы 
BREQ, так и запросы SREQ от периферии 

 

Контроллер изменяет значение соответствующего каналу бита 
в регистре CHNL_USEBURST_SET, а именно – устанавливает 
бит.  
Поэтому для оставшихся циклов DMA с использованием 
альтернативных управляющих данных контроллер реагирует 
только на запросы BREQ от периферии  

cycle_ctrl  

2-0 

Поле задания типа цикла DMA 
000b  Недействительный. 

Структура  управляющих  данных  канала  в  запрещенном 
состоянии.  

001b  Основной 
010b  Авто-запрос 
011b  «Пинг-понг» 
100b  Работа 

с  памятью  в  режиме  «разборка-сборка»  с 

использованием первичных управляющих данных канала 

101b  Работа 

с  памятью  в  режиме  «разборка-сборка»  с 

использованием  альтернативных  управляющих  данных 
канала 

110b  Работа  с  периферией  в  режиме  «разборка-сборка»  с 

использованием первичных управляющих данных канала 

111b  Работа  с  периферией  в  режиме  «разборка-сборка»  с 

использованием  альтернативных  управляющих  данных 
канала 

П р и м е ч а н и е   –   После  завершения  всего  цикла  передач 

DMA,  контроллер  устанавливает  значение  поля  cycle_ctrl  в  000b, 
переводя  тем  самым  тип  цикла  в  «недействительный».  Это 
позволяет избежать повторения выполненной передачи DMA.  

 

Указатель конца

 

данных источника (SRC_DATA_END_PTR) и указатель конца 

данных приемника (DST_DATA_END_PTR)

 

32-разрядные  ячейки  памяти,  которые  содержат  адрес  месторасположения  конца 

данных  источника  и  приемника,  соответственно.  Перед  тем,  как  контроллер  выполнит 
передачу  DMA,  необходимо  определить  их  значения.  Контроллер  считывает  значения 
этих областей перед началом 2

R

 передач DMA. 

Для  вычисления  адреса  источника  передачи  DMA,  контроллер  выполняет  сдвиг 

влево  значения  N–1  на  количество  разрядов,  соответствующее  полю  src_inc,  и  затем 
вычитает получившееся значение от значения SRC_DATA_END_PTR. 

Подобным образом вычисляется начальный адрес приемника передачи и контроллер 

DMA  выполняет  сдвиг  влево  значения  N–1  на  количество  разрядов,  соответствующее 
полю 

dst_inc, 

и 

затем 

вычитает 

получившееся 

значение 

от 

значения 

DST_DATA_END_PTR.  

 

 

 

55 

8.2

 

Правила обмена данными 

Следует  избегать  адресации  к  зарезервированным  или  неиспользованным  адресам, 

так как это может привести к непредсказуемым результатам. 

Необходимо  заполнять  неиспользуемые  или  зарезервированные  разряды  регистров 

нулями при записи и игнорировать значения таких разрядов при считывании. 

Системный  сброс  или  сброс  по  установке  питания  сбрасывает  все  регистры  в 

состояние 00000000h, если не указано иное. 

Контроллер  DMA  использует  правила  обмена  данными  (см.  таблицу  8.4),  при 

соблюдении следующих условий: 

-  канал  DMA  включен  (установлены,  соответствующие  каналу,  биты  в  регистре 

CHNL_ENABLE_SET и MASTER_ENBL в регистре CFG); 

-  запросы  канала  не  замаскированы  (сброшен,  соответствующий  каналу,  бит  в 

регистре CHNL_REQ_MASK_SET). 

 

Т а б л и ц а   8 . 4   –  Перечень  правил,  при  которых  передача  по  каналам  разрешена  и 
запросы не маскируются (i – номер канала) 

Номер 

правила 

Описание 

Если канал не активен (передача не идет в данный момент), то установка бита 
Ci  в  регистре  CHNL_SW_REQUEST  или  запрос  от  соответствующей 
периферии, инициирует передачу по каналу i

 

Одновременно активен может быть только один канал 

Если  запрос  от  периферии  происходит  в  момент,  когда  канал  активен,  то 
контроллер обслужит этот запрос после завершения текущей передачи 

Если  приходит  сразу  несколько  запросов  от  периферии  для  одного  канала  в 
момент,  когда  канал  активен,  то  контроллер  обслужит  только  первый  запрос 
после завершения текущей передачи 

Для  циклов  DMA,  отличных  по  типу  от  периферийного  режима  «разборка-
сборка»,  по  окончании  2

R

  передач  контроллер  сбрасывает  бит  Ci  в  регистре 

CHNL_USEBURST_SET, если количество оставшихся передач меньше, чем 2

R

Позволяя периферии завершить передачи, используя как SREQ запросы, так и 
BREQ. 
В  периферийном  режиме  «разборка/сборка»  контроллер  сбрасывает  бит  Ci  в 
регистре CHNL_USEBURST_SET только, если количество оставшихся передач 
с  использованием  альтернативной  структуры  управляющих  данных  меньше, 
чем 2

R

 

Контроллер 

игнорирует 

запрос 

SREQ, 

если 

бит 

Ci 

регистра 

WAITONREQ_STATUS 

сброшен  или  установлен  бит  Ci  регистра 

CHNL_USEBURST_SET

 

Необходимо 

с 

осторожностью 

устанавливать 

разряды 

регистра 

CHNL_USEBURST_SET. Если значение, указанное в регистре N–1 меньше, чем 
значение  2

R

,  то  контроллер  не  очистит  разряды  CHNL_USEBURST_SET  и 

поэтому  одиночные  запросы  SREQ  будут  запрещены.  Если  программные 
запросы через регистр CHNL_SW_REQUEST не генерируются, и периферия не 
осуществляет  запросов  на  пакетную  обработку  BREQ,  то  контроллер  никогда 
не выполнит необходимых передач 

 
 
 
 
 

 

 

56 

Окончание таблицы 8.4 

Номер 

правила 

Описание 

Для  типов  циклов  DMA,  отличных  от  периферийного  режима  «разборка-
сборка», если придет запрос SREQ, то контроллер выполнит одну передачу. 
В  периферийном  режиме  «Исполнение  с  изменением  конфигурации»,  если 
придет  запрос  SREQ,  контроллер  выполняет  2

R

  передач  с  использованием 

первичной  структуры  управляющих  данных.  Затем  без  осуществления 
арбитража  выполняет  одну  передачу,  используя  альтернативную  структуру 
управляющих данных 

Для  типов  циклов  DMA,  отличных  от  периферийного  режима  «разборка-
сборка»,  если  одновременно  пришли  запросы  SREQ  и  BREQ,  то  приоритет 
предоставляется  BREQ,  и  контроллер  выполняет  2

R

  DMA  передач  (или  число 

передач, указанное в поле N–1). 
В  периферийном  режиме  «разборка-сборка»,  если  одновременно  пришли 
запросы  SREQ  и  BREQ,  то  приоритет  также  предоставляется  BREQ,  и 
контроллер  выполняет  2

R

  передач  с  использованием  первичной  структуры 

управляющих  данных.  Затем  без  осуществления  арбитража  выполняет  2

R

  

передач (или число передач, указанное в поле N–1), используя альтернативную 
структуру управляющих данных 

10 

В  периферийном  режиме  «разборка-сборка»,  если  бит  next_use_burst  в 
CHANNEL_CFG  установлен,  то  контроллер  устанавливает  соответствующий 
каналу бит  в  регистре  CHNL_USEBURST_SET после окончания цикла DMA, 
использующего альтернативные управляющие данные 

11 

Когда  установлен  бит  Ci  регистра  CHNL_REQ_MASK_SET,  контроллер 
игнорирует запросы SREQ и BREQ 

 
При  отключении  канала  (бит  Ci  регистра  CHNL_ENABLE_SET  сброшен) 

контроллер  DMA  осуществляет  передачи  согласно  правилам,  представленным  в 
таблице 8.5. 

 

Т а б л и ц а   8 . 5  – Перечень правил осуществления передач для запрещенных каналов  

Номер 

правила 

Описание 

Если  приходит  запрос  на  пакетную  обработку  BREQ  от  периферии,  то 
происходит  вызов  прерывания  канала  DMA  (если  было  включено).  Это 
позволяет сигнализировать о запросе, даже если канал выключен 

Если  приходит  запрос  на  одиночную  передачу  SREQ  от  периферии,  то 
происходит вызов прерывания канала DMA (если было включено) при условии, 
что  бит  Ci  регистра  WAITONREQ_STATUS  установлен,  а  бит  Ci  регистра 
CHNL_USEBURST_SET  сброшен.  Это  позволяет  сигнализировать  о  запросе, 
даже если канал выключен 

 

8.3

 

Правила арбитража  

Контроллер имеет возможность настройки момента арбитража при передачах DMA. 

Эта  возможность  позволяет  уменьшить  время  отклика  при  обслуживании  каналов  с 
высоким приоритетом. 

Контроллер  имеет  настройки,  которые  определяют  количество  передач  по  шине 

AHB-Lite до повторения арбитража (переарбитрации). Это значение задается параметром 
R  (поле  R_power  в  регистре  CHANNEL_CFG  структуры  управляющих  данных  канала). 

 

 

57 

Количество транзакций одного канала до переарбитрации при этом равно 2

R

. Например, 

если R = 4, то арбитраж будет проводиться через каждые 16 передач DMA. 

Необходимо  с  осторожностью  устанавливать  большие  значения  R  для 

низкоприоритетных  каналов,  так  как  это  может  привести  к  невозможности  обслуживать 
запросы по высокоприоритетным каналам. 

При N > 2

R

 (N – номер передачи) и если результат деления 2

R

 на N не целое число, 

контроллер всегда выполняет последовательность из 2

R

 передач до тех пор, пока не станет 

верным N < 2

R

. Контроллер выполняет оставшиеся N передач в конце цикла DMA. 

 
Приоритет 

При  проведении  арбитража  определяется  канал  для  обслуживания  в  следующем 

цикле DMA. На выбор следующего канала влияют: 

- номер канала; 
- уровень приоритета, присвоенного каналу. 
 
Каждому  каналу  может  быть  присвоен  уровень  приоритета  по  умолчанию  или 

высокий.  Изменение  уровня  приоритета  осуществляется  установкой  соответствующего 
бита Ci (i – номер канала) в регистрах CHNL_PRIORITY_SET и CHNL_PRIORITY_CLR. 
Канал 0 имеет наивысший уровень приоритета. 

Порядок каналов по уменьшению уровня приоритета представлен в таблице 8.6. 
После  окончания  цикла  DMA  контроллер  выбирает  следующий  для  обслуживания 

канал  из  всех  включенных  каналов  DMA.  Рисунок  8.2  иллюстрирует  процесс  выбора 
следующего канала для обслуживания. 

 

 

 

Рисунок 8.2 –

 

Алгоритм выбора (полинга) следующего канала для обслуживания 

 
 
 
 
 
 
 

 

 

58 

Т а б л и ц а   8 . 6  – Распределение приоритетов 

Номер 

канала 

Ci 

Состояние бита Ci в 

регистре 

CHNL_PRIORITY_SET 

Уровень приоритета 

Порядок 

изменения уровня 

приоритета 

Высокий 

Наивысший 

Высокий 

 

 

С

ни

же

ни

е уровня п

ри

ори

тета

 

 

 

 

Высокий 

Высокий 

… 

… 

… 

22 

Высокий 

23 

Высокий 

По умолчанию 

По умолчанию 

По умолчанию 

По умолчанию 

… 

… 

… 

22 

По умолчанию 

23 

По умолчанию 

Низший 

 

8.4

 

Типы циклов 

Для  всех  типов  циклов  DMA  повторный  арбитраж  происходит  после  2

R

  передач 

DMA. Если установить длинный период арбитража на низкоприоритетном канале, то это 
заблокирует  все  запросы  на  обработку  от  других  каналов  до  тех  пор,  пока  не  будут 
выполнены  2

R

  передач  DMA  по  данному  каналу.  Поэтому,  устанавливая  значение  R, 

необходимо  учитывать,  что  это  может  привести  к  повышенному  времени  отклика  на 
запрос на обработку от высокоприоритетных каналов. 

Поддерживаются следующие типы циклов DMA: 
- недействительный  (структура  управляющих  данных  канала  в  запрещенном 

состоянии); 

- основной; 
- авто-запрос; 
- «пинг-понг»; 
- работа с памятью в режиме «разборка-сборка» (scatter-gather); 
- работа с периферией в режиме «разборка-сборка». 
 
Задание  типа  цикла  DMA  осуществляется  программированием  поля  cycle_ctrl 

регистра CHANNEL_CFG структуры управляющих данных канала.

 

 
Недействительный цикл 

После  окончания  цикла  DMA  контроллер  устанавливает  тип  цикла  в  значение 

«недействительный» для предотвращения повтора выполненного цикла DMA. 

 
Основной цикл 

В данном режиме контроллер работает либо с первичными, либо с альтернативными 

управляющими данными канала, совершая по 2

R

 передач по каждому запросу. 

Перед началом работы необходимо включить контроллер DMA и разрешить работу 

канала:  установить  соответствующий  каналу  бит  в  регистре  CHNL_ENABLE_SET  и  бит 
MASTER_ENBL  в  регистре  CFG,  а  также  проверить,  что  запросы  канала  не 
замаскированы 

(сброшен 

соответствующий 

каналу 

бит 

в 

регистре 

CHNL_REQ_MASK_SET). 

 

 

 

59 

После того, как разрешена работа канала, цикл DMA выглядит следующим образом: 
1 Контроллер  ожидает  получения  запроса  (программного  либо  от  периферии)  на 

обработку. Если запрос получен, то контроллер переходит к шагу 2. 

2 Контроллер выполняет  2

R

  передач. Если число  оставшихся передач 0, контроллер 

переходит к шагу 4, иначе выполняется шаг 3. 

3 Происходит  осуществление  арбитража:  если  высокоприоритетный  канал  выдает 

запрос  на  обработку,  то  контроллер  начинает  обслуживание  этого  канала,  иначе 
происходит ожидание очередного запроса на обработку по каналу, и если периферийный 
блок или программа его выдает, то контроллер переходит к шагу 2. 

4 Контроллер  указывает  центральному  процессору  на  завершение  цикла  DMA. 

Вызывается соответствующее каналу прерывание (если было включено). 

 
Авто-запрос 

Контроллеру  необходим  лишь  одиночный  запрос  для  разрешения  работы  и 

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

Перед началом работы необходимо включить контроллер DMA и разрешить работу 

канала:  установить  соответствующий  каналу  бит  в  регистре  CHNL_ENABLE_SET  и  бит 
MASTER_ENBL  в  регистре  CFG,  а  также  проверить,  что  запросы  канала  не 
замаскированы 

(сброшен, 

соответствующий 

каналу, 

бит 

в 

регистре 

CHNL_REQ_MASK_SET). 

После того, как разрешена работа канала, цикл DMA выглядит следующим образом: 
1 Контроллер  ожидает  получения  запроса  (программного  либо  от  периферии)  на 

обработку. Если запрос получен, то контроллер переходит к шагу 2. 

2 Контроллер выполняет  2

R

  передач. Если число  оставшихся передач 0, контроллер 

переходит к шагу 4, иначе выполняется шаг 3. 

3 Осуществление  арбитража:  если  высокоприоритетный  канал  выдает  запрос  на 

обработку,  то  контроллер  начинает  обслуживание  этого  канала,  иначе  контроллер 
переходит к шагу 2. 

4 Контроллер  указывает  центральному  процессору  на  завершение  цикла  DMA. 

Вызывается соответствующее каналу прерывание (если было включено). 

Отличие  от  режима  «основной»  состоит  в  том,  что  в  режиме  «авто-запрос» 

контроллер позволит осуществить все N транзакций по одному запросу, в то время как в 
основном режиме по каждому запросу будет выполняться лишь 2

R

 передач. 

 
«Пинг-понг» 

Контроллер  выполняет  цикл  DMA,  используя  одну  из  первичных  структур 

управляющих данных, а затем выполняет еще один цикл DMA, используя альтернативную 
структуру  управляющих  данных.  Контроллер  выполняет  циклы  DMA  с  переключением 
структур  до  тех  пор,  пока  не  считает  режим  «недействительный»  или  «основной»,  или 
пока процессор не запретит работу канала. 

На  рисунке  8.3  показан  пример  функционирования  контроллера  DMA  в  режиме 

«пинг-понг». Пояснения к рисунку 8.3 представлены в виде таблицы 8.7. 

 
 

 

 

60 

 

 

Рисунок 8.3 – Пример функционирования контроллера в режиме «пинг-понг» 

 

Т а б л и ц а   8 . 7  – Пояснения к схеме на рисунке 8.3 

Шаг 

Действия процессора и контроллера 

Процессор включает контроллер DMA и разрешает работу канала.  
В  программе  устанавливаются  первичная  структура  управляющих  данных  для 
шага  А  и  альтернативная  структура  управляющих  данных  для  шага  В.  Это 
позволит  контроллеру  переключиться  к  шагу  В  незамедлительно  после 
выполнения шага А, при условии, что контроллер не получит запрос на обработку 
от высокоприоритетного канала. 
Контроллер получает запрос и выполняет 4 передачи DMA.  
Контроллер выполняет арбитраж. После получения запроса на обработку от этого 
же 

канала, 

контроллер 

продолжает 

цикл 

в 

ситуации 

отсутствия 

высокоприоритетных запросов. 
Контроллер выполняет оставшиеся 2 передачи DMA. 
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет 
его вызов. 
 

П р и м е ч а н и е   –  После  выполнения  шага  А  процессор  может  установить 

первичные  управляющие  данные  канала  для  шага  С.  Это  позволит  контроллеру 
переключиться к шагу С незамедлительно после выполнения шага В, при условии, 
что контроллер не получит запрос на обработку от высокоприоритетного канала. 
После  получения  нового  запроса  на  обработку  от  канала  при  условии  его 
наивысшего приоритета исполняется шаг В. 
 

 

 

 

61 

Окончание таблицы 8.7 

Шаг 

Действия процессора и контроллера 

Контроллер выполняет 4 передачи DMA. 
Контроллер выполняет арбитраж. После получения запроса на обработку от этого 
же 

канала 

контроллер 

продолжает 

цикл 

в 

ситуации 

отсутствия 

высокоприоритетных запросов. 
Контроллер выполняет 4 передачи DMA. 
Контроллер выполняет арбитраж. После получения запроса на обработку от этого 
же 

канала 

контроллер 

продолжает 

цикл 

в 

ситуации 

отсутствия 

высокоприоритетных запросов. 
Контроллер выполняет оставшиеся 4 передачи DMA. 
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет 
его вызов. 
 

П р и м е ч а н и е   –  После  выполнения  шага  В  процессор  может  установить 

альтернативные управляющие данные канала для шага D. 
После  получения  нового  запроса  на  обработку  от  канала  при  условии  его 
наивысшего приоритета исполняется шаг С. 
 

Контроллер выполняет 2 передачи DMA. 
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет 
его вызов. 
 

П р и м е ч а н и е   –  После  выполнения  шага  С  процессор  может  установить 

первичные управляющие данные канала для шага E. 
После  получения  нового  запроса  на  обработку  от  канала  при  условии  его 
наивысшего приоритета исполняется шаг D. 
 

Контроллер выполняет 4 передачи DMA. 
Контроллер выполняет арбитраж. После получения запроса на обработку от этого 
же 

канала 

контроллер 

продолжает 

цикл 

в 

ситуации 

отсутствия 

высокоприоритетных запросов. 
Контроллер выполняет оставшуюся передачу DMA. 
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет 
его вызов. 
 

П р и м е ч а н и е   –  После  получения  нового  запроса  на  обработку  от  канала 

при условии его наивысшего приоритета исполняется шаг E. 
 

Контроллер выполняет 4 передачи DMA. 
Контроллер выполняет арбитраж. После получения запроса на обработку от этого 
же 

канала 

контроллер 

продолжает 

цикл 

в 

ситуации 

отсутствия 

высокоприоритетных запросов. 
Контроллер выполняет оставшиеся 3 передачи DMA. 
Контроллер входит в процедуру арбитража. Если прерывание включено, то произойдет 
его вызов 

 
Если  контроллер  получит  новый  запрос  на  обработку  от  данного  канала  и  этот 

запрос  будет  самым  приоритетным,  контроллер  предпримет  попытку  выполнения 
следующего  шага.  Однако  из-за  того,  что  процессор  не  установил  альтернативные 
управляющие  данные,  и  по  окончании  шага  D  контроллер  установил  поле  cycle_ctrl 
альтернативной управляющей структуры в состояние 000b, передачи DMA прекращаются. 

 

 

62 

Работа с памятью в режиме «разборка-сборка» 

Алгоритм  работы  данного  режима  является  оптимальным  именно  для  работы  с 

памятью,  но,  несмотря  на  это,  его  использование  возможно  для  любого  типа  передачи 
данных:  память – память,  периферия – память,  память – периферия,  с  помощью,  как 
программных запросов, так и запросов от периферии. 

В  данном  режиме  контроллер  использует  первичные  управляющие  данные  для 

программирования альтернативных управляющих данных.  

Контроллер, получая начальный запрос на обработку, выполняет  4 передачи DMA, 

заполняя  альтернативную  структуру  канала  данными,  доступными  для  первичной 
управляющей  структуры.  По  окончании  этих  передач  контроллер  входит  в  процедуру 
арбитража,  и  если  более  высокоприоритетных  запросов  не  обнаружено,  начинает  цикл 
DMA, используя обновленные альтернативные  управляющие данные. После  – арбитраж, 
затем  контроллер  выполняет  еще  4  передачи  DMA,  вновь  заполняя  альтернативную 
структуру данными с помощью первичной структуры. 

Контроллер  продолжает  выполнять  циклы  DMA,  меняя  структуры  управляющих 

данных, пока не произойдет одно из следующих условий: 

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

выполнена в режиме цикла «основной»; 

- контроллер  считает  «неправильную»  структуру  управляющих  данных.  После 

исполнения контроллером N передач с использованием первичных управляющих данных 
он  делает  эти  управляющие  данные  «неправильными»  путем  записи  в  поле  cycle_ctrl 
значения 000b. 

Контроллер  устанавливает  прерывание  канала  DMA  в  этом  режиме  работы  только 

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

В таблице 8.8 указаны константы, которые должны быть записаны пользователем в 

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

 

Т а б л и ц а   8 . 8   –  Конфигурация  первичной  структуры  управляющих  данных  канала  для 
работы с памятью в режиме «разборка-сборка» 

 

CHANNEL_CFG 

 

 

 

 

 

Поле 

Биты  Конс-

танта 

Пояснение 

dst_inc 

31-30 

10b 

Контроллер производит инкремент адреса с шагом в 
двойное слово. 

dst_size 

29-28 

10b 

Контроллер осуществляет передачу двойным словом. 

src_inc  

27-26 

10b 

Контроллер производит инкремент адреса с шагом в 
двойное слово. 

src_size  

25-24 

10b 

Контроллер осуществляет передачу двойными словами. 

dst_prot_ctrl  

23-21 

– 

Управление защитой шины при записи данных в 
приемник. Задается пользователем. 

src_prot_ctrl 

20-18 

– 

Управление защитой шины при чтении данных из 
источника. Задается пользователем. 

 
 

 

 

63 

Окончание таблицы 8.8 

Поле 

Биты 

Конс-

танта 

Пояснение 

R_power 

17-14 

0010b  Контроллер выполняет 4 передачи DMA (2

R

 = 2

2

 = 4)  

N-1 

13-4 

– 

Настраивает контроллер на выполнение N передач DMA.  
Так как поле R_power задает значение 2, то необходимо 
задавать значение N, кратное 4. Число, равное N/4, это 
количество раз, которое нужно настраивать 
альтернативные управляющие данные.  
Задается пользователем. 

next_use_burst  3 

Для данного режима бит должен быть сброшен. 

cycle_ctrl  

2-0 

100b 

Контроллер 

работает 

с 

памятью 

в 

режиме 

«разборка/сборка» 

с 

использованием 

первичных 

управляющих данных канала.

 

 

В  указатель  конца  данных  источника  SRC_DATA_END_PTR  первичной  структуры 

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

В указатель конца данных приемника  DST_DATA_END_PTR первичной структуры 

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

На рисунке 8.4 показан пример функционирования контроллера в режиме «разборка-

сборка». Пояснения к рисунку 8.4 приведены ниже. 
 

 

 

Рисунок 8.4 –

 

Пример функционирования контроллера в режиме             

«разборка-сборка» 

 

 

64 

Инициализация 
1 Первичная структура управляющих данных настраивается для работы с памятью в 

режиме «разборка-сборка» путем записи в cycle_ctrl значения 100b. Так как управляющие 
данные  канала  состоят  из  четырех  слов,  R_power  =  0010b.  Поскольку  количество  задач 
равно четырем, то N = 16, т. е. в значение поля N–1 = 00Fh. 

2 Управляющие данные для  шагов A,  B, C, D располагаются в области ОЗУ.  Адрес 

конца этой области заносится в регистр SRC_DATA_END_PTR первичных управляющих 
данных.    Пример  размещения  и  заполнения  управляющих  данных  для  альтернативной 
структуры  показан  в  таблице  8.9.  Исходя  из  примера,  в  регистр  SRC_DATA_END_PTR 
первичной управляющей структуры необходимо занести значение  2000015Ch. 
 
Т а б л и ц а   8 . 9   –  Пример  размещения  управляющих  данных  для  альтернативной 
структуры 

Тип данных 

Адрес 

ОЗУ 

Регистр 

Значение 

Управляющие 
данные для 
задачи D 

2000015Ch  Не используется 

XXXXXXXXh 

20000158h  CHANNEL_CFG 

cycle_ctrl = 001b, 2

R

 = 4, N = 4 

20000154h  DST_DATA_END_PTR 

2000DE00h 

20000150h  SRC_DATA_END_PTR 

2000D000h 

Управляющие 
данные для 
задачи C 

2000016Ch  Не используется 

XXXXXXXXh 

20000168h  CHANNEL_CFG 

cycle_ctrl = 101b, 2

R

 = 8, N = 5 

20000164h  DST_DATA_END_PTR 

2000CE00h 

20000160h  SRC_DATA_END_PTR 

2000C000h 

Управляющие 
данные для 
задачи B 

2000017Ch  Не используется 

XXXXXXXXh 

20000178h  CHANNEL_CFG 

cycle_ctrl = 101b, 2

R

 = 2, N = 8 

20000174h  DST_DATA_END_PTR 

2000BE00h 

20000170h  SRC_DATA_END_PTR 

2000B000h 

Управляющие 
данные для 
задачи A 

2000018Ch  Не используется 

XXXXXXXXh 

20000188h  CHANNEL_CFG 

cycle_ctrl = 101b, 2

R

 = 4, N = 3 

20000184h  DST_DATA_END_PTR 

2000AE00h 

20000180h  SRC_DATA_END_PTR 

2000A000h 

 

В регистр DST_DATA_END_PTR первичной структуры необходимо занести адрес 

конца альтернативной структуры управляющих данных используемого канала. Например, 
при использовании канала 9 в регистр DST_DATA_END_PTR необходимо занести 
значение XXXXX29Ch. 

3 Включается  контроллер  DMA  и  разрешается  работа  канала  путем  установки 

соответствующего каналу бита в регистре CHNL_ENABLE_SET и бита MASTER_ENBL в 
регистре CFG. Также необходимо удостовериться, что запросы канала не замаскированы 
(сброшен соответствующий каналу бит в регистре CHNL_REQ_MASK_SET). 

 
 
 
 
 
 
 
 
 
 

 

 

 

 

 

 

 

содержание      ..     2      3      4      5     ..