Библиотека для работы с VDMA
Предупреждение
Этот документ не является достоверным. Описанные свойства могут не поддерживаться в ПО или поддерживаться не так как описано в документе. Свойства могут измениться при финальной реализации.
Данная библиотека предназначена для организации пересылок данных между внешней памятью и XYRAM. Библиотека позволяет настраивать как одиночные пересылки, так и множественные пересылки с использованием цепочек.
Данная библиотека является частью библиотеки elcore-runtime.
Для работы с библиотекой необходимо в файле с проектом подключить заголовочный файл dma.h.
Константы библиотеки VDMA
#define E50_DMA_CH0R 0x10223000
#define E50_DMA_CH1R 0x10223080
#define E50_DMA_CH2R 0x10223100
#define E50_DMA_CH3R 0x10223180
#define DmaCh0 ((E50_DmaChan*)E50_DMA_CH0R)
#define DmaCh1 ((E50_DmaChan*)E50_DMA_CH1R)
#define DmaCh2 ((E50_DmaChan*)E50_DMA_CH2R)
#define DmaCh3 ((E50_DmaChan*)E50_DMA_CH3R)
#define DMA_CFG_RD ((0 << 0) | (3 << 3) | (3 << 7))
#define DMA_CFG_WR ((1 << 0) | (3 << 3) | (3 << 7))
Константы DmaCh0-DmaCh3 определяют множество каналов VDMA.
Константы DMA_CFG_RD и DMA_CFG_WR определяют типовые конфигурации каналов VDMA.
Запуск одиночной пересылки
-
int DmaInit(volatile E50_DmaChan *ch, uint64_t xy, uint64_t mm, int32_t ofsext, int32_t ofsint, int len, int cfg);
Функция DmaInit() предназначена для настройки VDMA на одиночную пересылку.
Описание параметров функции:
chКанал VDMA. Возможные значения:
DmaCh0— VDMA канал 0.DmaCh1— VDMA канал 1.DmaCh2— VDMA канал 2.DmaCh3— VDMA канал 3.
xyАдрес памяти XYRAM.
mmАдрес во внешней памяти.
ofsextЗнаковое смещение прибавляемое к текущему адресу внешней памяти.
ofsintЗнаковое смещение прибавляемое к текущему адресу памяти XYRAM.
lenКоличество байт, передаваемых в рамках данной пересылки.
cfgКонфигурация канала. Возможные значения:
DMA_CFG_RD— пересылка данных из внешней памяти в XYRAM.DMA_CFG_WR— пересылка данных из XYRAM во внешнюю память.
Для более быстрого завершения пересылки необходимо, чтобы параметры xy, mm,
ofsext, ofsint и len были кратны степени двойки (максимум шестнадцати).
При этом максимально допустимое значение параметра len определяется произведением
65536 и максимальной степнью кратности.
В случае успеха функция DmaInit() возвращает нулевое значение.
-
void DmaRun(volatile E50_DmaChan *ch);
Функция DmaRun() предназначена для запуска одного VDMA канала, указанного
в качестве параметра функции.
-
void DmaWait(volatile E50_DmaChan *ch);
Функция DmaWait() предназначена для ожидания завершения одного VDMA канала,
указанного в качестве параметра функции.
Запуск множественных пересылок через цепочки
typedef struct E50_DmaChain {
size_t ntasks;
E50_DmaTask *tasks;
E50_DmaChain(size_t ntasks);
~E50_DmaChain();
int AddDmaChain(size_t pos, uint64_t xy, uint64_t mm, int32_t ofsext,
int32_t ofsint, int len, int cfg);
void SetDmaChainForChannel(volatile E50_DmaChan* ch);
} E50_DmaChain;
Для настройки цепочки заданий для VDMA необходимо:
Создать экземпляр структуры
E50_DmaChain, передав конструктору в качестве параметра количество цепочек.Для созданного экземпляра структуры
E50_DmaChainвызывать методAddDmaChain()для каждой цепочки. Описание параметров функции:
xyАдрес памяти XYRAM.
mmАдрес во внешней памяти.
ofsextЗнаковое смещение прибавляемое к текущему адресу внешней памяти после передачи одномерной части массива.
ofsintЗнаковое смещение прибавляемое к текущему адресу памяти XYRAM после передачи одномерной части массива.
lenКоличество байт, передаваемых в рамках данной пересылки.
cfgКонфигурация канала. Возможные значения:
DMA_CFG_RD— пересылка данных из внешней памяти в XYRAM.
DMA_CFG_WR— пересылка данных из XYRAM во внешнюю память.Для более быстрого завершения пересылки необходимо, чтобы параметры
xy,mm,ofsext,ofsintиlenбыли кратны степени двойки (максимум шестнадцати). При этом максимально допустимое значение параметраlenопределяется произведением 65536 и максимальной степнью кратности. В случае успеха функцияDmaInit()возвращает нулевое значение.Для экземпляра структуры
E50_DmaChainвызывать методSetDmaChainForChannel(), передав в качестве аргумента канал VDMA, который будет выполнять данные цепочки. Возможные значения параметра функции:
DmaCh0— VDMA канал 0.
DmaCh1— VDMA канал 1.
DmaCh2— VDMA канал 2.
DmaCh3— VDMA канал 3.Для запуска VDMA канала вызвать функцию
DmaRun().Дождаться завершения работы VDMA канала с помощью
DmaWait().