ELIOT1 HAL
Загрузка...
Поиск...
Не найдено

Интерфейс драйвера прямого доступа к памяти Подробнее...

#include "hal_common.h"

См. исходные тексты.

Структуры данных

struct  _dma_descriptor
 Описатель следующего блока DMA (LLI) Подробнее...
 
struct  _dma_channel_reg
 Дескриптор на регистры канала DMA. Подробнее...
 
struct  dma_channel_ctl_cfg
 Описание конфигурации пересылки Подробнее...
 
struct  _dma_channel_config
 Конфигурация канала DMA. Подробнее...
 
struct  _dma_handle
 Управляющая структура передачи Подробнее...
 
struct  _dma_multiblock_config
 Конфигурация многоблочной передачи Подробнее...
 

Макросы

#define HAL_DMA_DRIVER_VERSION   (MAKE_VERSION(1, 0, 0))
 Версия драйвера
 
#define DMA_AHB_MAX_BLOCK_SIZE   (4095U)
 Максимальный размер транзакции на AHB шине
 
#define HAL_FEATURE_DMA_NUMBER_OF_CHANNELS   (8U)
 Число каналов одного контроллера DMA.
 
#define HAL_FEATURE_DMA_MAX_NUMBER_HW_HANDSHAKES   (16U)
 Максимальное число аппаратных интерфейсов запросов DMA.
 
#define HAL_FEATURE_DMA_ALL_CHANNELS   (HAL_FEATURE_DMA_NUMBER_OF_CHANNELS * 2U)
 Общее число каналов DMA.
 
#define HAL_FEATURE_DMA_LINK_DESCRIPTOR_ALIGN_SIZE   (4U)
 Размер выравнивания дескриптора
 
#define DMA_ALLOCATE_HEAD_DESCRIPTORS(name, number)    dma_descriptor_t name[number] __attribute__((aligned(HAL_FEATURE_DMA_LINK_DESCRIPTOR_ALIGN_SIZE)))
 Объявление дескриптора и выравнивание адреса дескриптора
 
#define REG_OFFSET   (0x58)
 Разница адресов идентичных регистров из соседних каналов
 
#define DMA_HANDSHAKE_UART0_TX   (0U)
 Номер handshake запроса UART0 TX.
 
#define DMA_HANDSHAKE_UART0_RX   (1U)
 Номер handshake запроса UART0 RX.
 
#define DMA_HANDSHAKE_UART1_TX   (2U)
 Номер handshake запроса UART1 TX.
 
#define DMA_HANDSHAKE_UART1_RX   (3U)
 Номер handshake запроса UART1 RX.
 
#define DMA_HANDSHAKE_UART2_TX   (0U)
 Номер handshake запроса UART2 TX.
 
#define DMA_HANDSHAKE_UART2_RX   (1U)
 Номер handshake запроса UART2 RX.
 
#define DMA_HANDSHAKE_UART3_TX   (2U)
 Номер handshake запроса UART3 TX.
 
#define DMA_HANDSHAKE_UART3_RX   (3U)
 Номер handshake запроса UART3 RX.
 
#define DMA_HANDSHAKE_SPI0_TX   (4U)
 Номер handshake запроса SPI0 TX.
 
#define DMA_HANDSHAKE_SPI0_RX   (5U)
 Номер handshake запроса SPI0 RX.
 
#define DMA_HANDSHAKE_SPI1_TX   (6U)
 Номер handshake запроса SPI1 TX.
 
#define DMA_HANDSHAKE_SPI1_RX   (7U)
 Номер handshake запроса SPI1 RX.
 
#define DMA_HANDSHAKE_SPI2_TX   (8U)
 Номер handshake запроса SPI2 TX.
 
#define DMA_HANDSHAKE_SPI2_RX   (9U)
 Номер handshake запроса SPI2 RX.
 
#define DMA_HANDSHAKE_I2C0_TX   (10U)
 Номер handshake запроса I2C0 TX.
 
#define DMA_HANDSHAKE_I2C0_RX   (11U)
 Номер handshake запроса I2C0 RX.
 
#define DMA_HANDSHAKE_I2C1_TX   (12U)
 Номер handshake запроса I2C1 TX.
 
#define DMA_HANDSHAKE_I2C1_RX   (13U)
 Номер handshake запроса I2C1 RX.
 
#define DMA_HANDSHAKE_QSPI_TX   (14U)
 Номер handshake запроса QSPI TX.
 
#define DMA_HANDSHAKE_QSPI_RX   (15U)
 Номер handshake запроса QSPI RX.
 

Функции

API HAL для драйвера модуля DMA
void DMA_Init (DMA_Type *base)
 Включение DMA.
 
void DMA_Deinit (DMA_Type *base)
 Отключение DMA.
 
dma_status_t DMA_CreateHandle (dma_handle_t *handle, DMA_Type *base, uint32_t channel)
 Инициализация структуры dma_handle_t.
 
static void DMA_EnableChannel (DMA_Type *base, uint32_t channel)
 Активация канала
 
void DMA_DisableChannel (DMA_Type *base, uint32_t channel)
 Выключение канала
 
static void DMA_EnableChannelPeriphRq (DMA_Type *base, uint32_t channel)
 Установка запроса на передачу с периферией
 
void DMA_HardwareHandshakeEnable (dma_handle_t *handle, bool enable, uint32_t req_num)
 Установка аппаратного интерфейса запроса DMA.
 
void DMA_SetChannelPriority (DMA_Type *base, uint32_t channel, dma_priority_t priority)
 Установка приоритета канала
 
void DMA_SetCallback (dma_handle_t *handle, dma_callback callback, void *user_data)
 Установка функции обратного вызова
 
static bool DMA_ChannelIsActive (DMA_Type *base, uint32_t channel)
 Функция для проверки работы DMA канала
 
dma_priority_t DMA_GetChannelPriority (DMA_Type *base, uint32_t channel)
 Получение информации о приоритете канала
 
uint64_t DMA_GetCTLCfgMask (struct dma_channel_ctl_cfg *ctlxcfg)
 Получение маски для конфигурации пересылки
 
void DMA_PrepareChannelTransfer (dma_channel_config_t *config, void *src_addr, void *dst_addr, uint64_t xfer_cfg)
 Подготовка канала к передаче
 
dma_status_t DMA_SubmitChannelTransfer (dma_handle_t *handle, dma_channel_config_t *config)
 Отправление конфигурации передачи
 
void DMA_SubmitChannelDescriptor (dma_handle_t *handle, dma_descriptor_t *descriptor)
 Отправка дескриптора передачи
 
uint32_t DMA_GetDescriptorCount (uint32_t size_bytes, uint8_t transfer_width)
 Расчёт количества дескрипторов многоблочной передачи
 
void DMA_AbortTransfer (dma_handle_t *handle)
 Прерывание передачи без потери данных
 
dma_status_t DMA_StartTransfer (dma_handle_t *handle)
 Начать транзакцию
 
void DMA_EnableChannelInterrupt (DMA_Type *base, uint32_t channel, uint8_t int_mask)
 Разрешение источника прерывания
 
void DMA_DisableChannelInterrupt (DMA_Type *base, uint32_t channel, uint8_t int_mask)
 Отключение источника прерывания
 
void DMA_SetupDescriptor (dma_descriptor_t *desc, uint64_t xfercfg, void *src_addr, void *dst_addr, void *next_desc)
 Инициализация дескриптора
 
dma_status_t DMA_SubmitChannelTransferParameter (dma_handle_t *handle, uint64_t xfer_cfg, void *src_addr, void *dst_addr)
 Отправка конфигурации передачи в таблицу дескрипторов
 
void DMA_ChannelIRQHandle (dma_handle_t *handle)
 Обработчик прерываний
 
void DMA_ScatterGatherEnable (struct dma_channel_ctl_cfg *ctlxcfg, bool scatter_en, bool gather_en)
 Разрешение режимов Разброса/Сбора
 
void DMA_SetupSrcGather (dma_handle_t *handle, uint32_t count, uint32_t interval)
 Настройка режима сбора источника
 
void DMA_SetupDstScatter (dma_handle_t *handle, uint32_t count, uint32_t interval)
 Настройка режима разброса приемника
 
void DMA_InitMultiblockDescriptor (dma_descriptor_t *desc, dma_multiblock_config_t *config)
 Функция, инициализирующая DMA дескрипторы многоблочной передачи.
 

CHANNEL_CTL - Регистр управления каналом

#define DMA_CHANNEL_CTL_BLOCKSIZE_MASK   (0xFFF00000000ULL)
 
#define DMA_CHANNEL_CTL_BLOCKSIZE_SHIFT   (32ULL)
 
#define DMA_CHANNEL_CTL_BLOCKSIZE(x)   (((uint64_t)((uint64_t)(x)) << DMA_CHANNEL_CTL_BLOCKSIZE_SHIFT) & DMA_CHANNEL_CTL_BLOCKSIZE_MASK)
 Размер блока
 
#define DMA_CHANNEL_CTL(blockSize, srcEnChain, dstEnChain, transferType, scatter, gather, srcMSize, dstMSize, sInc, dInc, srcTransferWidth, dstTransferWidth, int_en)
 Конфигурация регистра CTL.
 
enum  
 Разрядность передачи канала DMA. Подробнее...
 
enum  
 Размер пакета передачи в словах данных разрядностью DMA_TransferBitWidth. Подробнее...
 
enum  
 Тип изменения адреса при пересылке Подробнее...
 
enum  _dma_status
 Статусы возврата из функций для драйвера DMA. Подробнее...
 
enum  _dma_priority
 Приоритеты каналов Подробнее...
 
enum  _dma_int
 Источники прерываний DMA. Подробнее...
 
enum  _dma_transfer_type
 Тип пересылок DMA и управление размером блока Подробнее...
 
typedef enum _dma_status dma_status_t
 Статусы возврата из функций для драйвера DMA.
 
typedef enum _dma_priority dma_priority_t
 Приоритеты каналов
 
typedef enum _dma_int dma_irq_t
 Источники прерываний DMA.
 
typedef enum _dma_transfer_type dma_transfer_type_t
 Тип пересылок DMA и управление размером блока
 
typedef struct _dma_descriptor dma_descriptor_t
 Описатель следующего блока DMA (LLI)
 
typedef struct _dma_channel_reg dma_channel_regs
 Дескриптор на регистры канала DMA.
 
typedef struct _dma_channel_config dma_channel_config_t
 Конфигурация канала DMA.
 
typedef void(* dma_callback) (struct _dma_handle *handle, void *user_data, dma_irq_t intmode)
 Функция обратного вызова
 
typedef struct _dma_handle dma_handle_t
 Управляющая структура передачи
 
typedef struct _dma_multiblock_config dma_multiblock_config_t
 Конфигурация многоблочной передачи
 

Подробное описание

Интерфейс драйвера прямого доступа к памяти