Блок прямого доступа к памяти (ПДП): различия между версиями

Материал из MIK32 микроконтроллер
Строка 222: Строка 222:


===== Регистры CHx_DST =====
===== Регистры CHx_DST =====
Смещение: 0x00+(x-1)*0x10, x - номер канала (от 1 до 4).  Значение после подачи сброса: 0x0000;
Смещение: 0x00+(x-1)*0x10, x - номер канала (от 1 до 4).  Значение после подачи сброса: 0x00000000;
{| class="wikitable"
{| class="wikitable"
|31  
|31  
Строка 327: Строка 327:
|rw
|rw
|}Биты 31:0 A'''y''' - 32-х битный регистр "адреса назначения" данных канала.
|}Биты 31:0 A'''y''' - 32-х битный регистр "адреса назначения" данных канала.
===== Регистры CHx_SRC =====
Смещение: 0x04+(x-1)*0x10, x - номер канала (от 1 до 4).  Значение после подачи сброса: 0x00000000;
{| class="wikitable"
|31
|30
|29
|28
|27
|26
|25
|24
|23
| 22
|21
|20
|19
|18
|17
|16
|-
|A31
|A30
|A29
|A28
|A27
|A26
|A25
|A24
|A23
|A22
|A21
|A20
|A19
|A18
|A17
|A16
|-
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|}
{| class="wikitable"
|15
|14
|13
|12
|11
|10
|9
|8
|7
|6
|5
|4
|3
|2
|1
|0
|-
|A15
|A14
|A13
|A12
|A11
|A10
|A9
|A8
|A7
|A6
|A5
|A4
|A3
|A2
|A1
|A0
|-
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|rw
|}Биты 31:0 A'''y''' - 32-х битный регистр "адреса источника" данных канала.

Версия от 07:19, 12 мая 2023

Введение

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

Контроллер ПДП имеет 4 независимых каналов, обеспечивающих работу в режимах память-память, периферия-периферия, память-периферия.

Каждый из каналов ПДП имеет программируемый уровень приоритетов обработки запросов, задаваемый пользователем.

При работе с периферией контроллер ПДП, контролирует состояние внутренних буферов периферийных устройств с автоматической обработкой забросов и сигналов подтверждения.  Структурная схема ПДП контроллера изображена на рисунке

Структурная схема ПДП контроллера

Доступ к шине

Контроллер управления шиной (AHB_master), при наличии данных в каналах ПДП, реализует непрерывный доступ к шине. При поддержке программных настроек управления сигнала подтверждения (нужен не для всех периферийный блоков) время выставлений транзакций на шину различается.

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

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

Сигнал запроса на запись обрабатывается только тогда, когда в буфере канала есть данные. В случае конфликтов при формировании внутренних сигналов запросов со стороны конечных автоматов каналов, запросы обрабатываются в соответствии с установленным уровнем приоритета каждого из каналов. В случае совпадения уровней программного приоритета, обрабатывается запрос в соответствии с уровнем статического приоритета, равному номеру канала (младший канал имеет наивысший приоритет).

Примеры доступа к шине показаны на временных диаграммах, на рисунках ниже (длительность доступа к шине показана условно в 3 такта).

Временная диаграмма длительности доступа к шине для одного канала
Временная диаграмма длительности доступа к шине для двух каналов
Временная диаграмма длительности доступа к шине для одного канала с формированием сигнала снятия запроса

Арбитраж

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

  • приоритетный (очень высокой);
  • высокий;
  • средний;
  • низкий.

В случае активности одного канала, запрос не может быть обработан немедленно: после завершения обработки запроса добавляется один такт на выключение канала (или обработки сигнала подтверждения) и два такта для обработки нового запроса.

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

Временные диаграммы работы нескольких каналов

Тактирование каналов

Для каждого из каналов предусмотрено автоматическое перекрытие тактирования на основе сигнала разрешения работы канала.

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

При этом каждый из каналов сохраняет состояния регистров, на котором была завершена его работа.

Выключение каналов

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

В случае передачи команды выключения во время транзакции, мастер-интерфейс контроллера завершает начатую передачу блока данных в соответствии с установкой канала, при этом данные передаваемые после выключения не являются валидными. Временная диаграмма представлена на рисунке

Временная диаграмма передачи команды выключения во время транзакции, мастер-интерфейс контроллера

Блочные транзакции

Контроллер ПДП предусматривает возможность трансфера блочных транзакций, поддерживая смешанную передачу данных. К примеру, чтение байтового буфера и запись слов. При этом, вводимые значения для трансфера данных должны находится в строгом соотношении с вводимым значением длины пересылки и делением на блоки при чтении и записи. Примеры организации блочных транзакций показаны на временных диаграммах ниже (рисунки 8–10):

  1. чтение байтов, запись полуслова. Длина пересылки: 4 байта, размер блока чтения: 1 байт, размер блока записи 2 байта;
  2. чтение байтов, запись полуслова. Длина пересылки: 4 байта, размер блока чтения: 1 байт, размер блока записи 4 байта;
  3. чтение байтов, запись полуслова. Длина пересылки: 4 байта, размер блока чтения: 2 байт, размер блока записи 4 байта.
Временная диаграмма организации блочных транзакций 1
Временная диаграмма организации блочных транзакций 2
Временная диаграмма организации блочных транзакций 3

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

Формирование прерываний

Контроллер ПДП поддерживает три типа маскируемых прерываний:

  • прерывания каналов о завершении задания;
  • глобальное прерывание о завершении всех заданий;
  • прерывание об ошибке.

Прерывания каналов формируются в случае установки разрешения на прерывания, по умолчанию выключены.

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

Контроллер ПДП формирует ошибку на основе отклика об ошибке со стороны шины. Канал, обнаруживший ошибку, завершает свою задачу. Остальные каналы могут продолжать свою работу.

Передача в режиме периферии.

В режиме передачи с периферийными устройствами от устройства формируется запрос на транзакцию чтения или записи. Контроллер позволяет соотнести любой канал с периферийным устройством.  Для настройки соответствия канала и линии от периферийного устройства используются поля Read requets, Write requets регистра Config. Соответствие между значениями этих полей и линиями периферии представлено в таблице

Линии запросов  от периферии ПДП контроллера
Устройство Значение Read requets/ Write requets
USART_0 0
USART_0 1
CRYPTO 2
SPI_0 3
SPI_1 4
I2C_0 5
I2C_1 6
SPIFI 7
Timer32_1 8
Timer32_2 9
DAC0 10
DAC1 11
Timer32_0 12

Регистры контроллера ПДП

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

Список регистров

Регистры ПДП контроллера
Адрес/смещение Описание регистра Название Доступ
0x00 Регистр адреса назначения канала 1 CH1_DST R/W
0x04 Регистр адреса источника канала 1 CH1_SRC R/W
0x08 Регистр размера передаваемых данных канала 1 CH1_LEN R/W
0x0C Регистр управления и конфигурации канала 1 CH1_CFG R/W
0x10 Регистр адреса назначения канала 2 CH2_DST R/W
0x14 Регистр адреса источника канала 2 CH2_SRC R/W
0x18 Регистр размера передаваемых данных канала 2 CH2_LEN R/W
0x1C Регистр управления и конфигурации канала 2 CH2_CFG R/W
0x20 Регистр адреса назначения канала 3 CH3_DST R/W
0x24 Регистр адреса источника канала 3 CH3_SRC R/W
0x28 Регистр размера передаваемых данных канала 3 CH3_LEN R/W
0x2C Регистр управления и конфигурации канала 3 CH3_CFG R/W
0x30 Регистр адреса назначения канала 4 CH4_DST R/W
0x34 Регистр адреса источника канала 4 CH4_SRC R/W
0x38 Регистр размера передаваемых данных канала 4 CH4_LEN R/W
0x3C Регистр управления и конфигурации канала 4 CH4_CFG R/W
0x40 Регистр прерываний и настройки контроллера DMA_CNTR R/W

Описание регистров

Регистры CHx_DST

Смещение: 0x00+(x-1)*0x10, x - номер канала (от 1 до 4). Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
A31 A30 A29 A28 A27 A26 A25 A24 A23 A22 A21 A20 A19 A18 A17 A16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Биты 31:0 Ay - 32-х битный регистр "адреса назначения" данных канала.

Регистры CHx_SRC

Смещение: 0x04+(x-1)*0x10, x - номер канала (от 1 до 4). Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
A31 A30 A29 A28 A27 A26 A25 A24 A23 A22 A21 A20 A19 A18 A17 A16
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Биты 31:0 Ay - 32-х битный регистр "адреса источника" данных канала.