背景:
上一篇文章 RK 系列开发板音频驱动适配指南 -DAI 模块适配中曾经论述音频驱动适配的 DAI 模块适配步骤以及外围代码的展现,本次次要介绍音频驱动适配中的 DMA 模块适配。
RK 系列开发板 DMA 模块适配:
DMA 是一种无须要 CPU 的参加就能够让外设与零碎内存之间进行双向数据传输的硬件机制,其次要作用是实现音频数据在 SoC 设施与内存之间的传输,并对循环缓存中的数据进行治理。ADM 定义的 DMA 接口包含:DMA 设施初始化、内存的调配与开释、DMA 通道的申请与配置、DMA 预处理、暂停与复原、音频数据的提交与悬挂和循环缓存治理共 11 个接口。
在适配器模块中实例化 ADM 定义的 DAI 两个构造体:PlatformData(DMA 数据集)和 AudioDmaOps(DMA 操作集);在操作集模块中实现 DMA 的业务接口函数;配置 DMA 设施节点私有参数,若有须要,则可配置 DMA 相干寄存器信息等公有参数。
RK 系列开发板 DMA 模块关系
RK 系列开发板_dma-classes.puml
1.1.RK 系列开发板 dmaadapter
•实例化 DMA 操作集:g_dmaDeviceOps,核心成员字段值定义如下:
–DmaBufAlloc = RK 系列开发板 DmaBufAlloc;
–DmaBufFree = RK 系列开发板 DmaBufFree;
–DmaRequestChannel = RK 系列开发板 DmaRequestChannel;
–DmaConfigChannel = RK 系列开发板 DmaConfigChannel;
–DmaPrep = RK 系列开发板 DmaPrep;
–DmaSubmit = RK 系列开发板 DmaSubmit;
–DmaPending = RK 系列开发板 DmaPending;
–DmaPause = RK 系列开发板 DmaPause;
–DmaResume = RK 系列开发板 DmaResume;
–DmaPointer = RK 系列开发板 PcmPointer。
•实例化 DMA 数据集:g_platformData,核心成员字段值定义如下:
–PlatformInit= RK 系列开发板 DmaDeviceInit;
–ops = &g_dmaDeviceOps,DMA 操作集地址。
•实例化 HdfDriverEntry 类型的 DAI 驱动实体:g_platformDriverEntry,核心成员字段值定义如下:
–moduleVersion = 1,模块版本号;
–moduleName = “DMA_RK 系列开发板 ”,模块名;
–Bind = DmaDriverBind;
–Init = DmaDriverInit;
–Release = DmaDriverRelease。
•DMA 驱动注册到鸿蒙零碎:HDFINIT(gplatformDriverEntry)。
•实现以下函数:
–DmaDriverInit,DMA 驱动初始化函数;
–DmaDriverBind,DMA 驱动绑定函数;
–DmaDriverRelease,DMA 驱动开释函数。
1.2.RK 系列开发板 dmaops
•实现以下函数:
–RK 系列开发板 DmaDeviceInit,初始化 DMA 设施函数;
–RK 系列开发板 DmaBufAlloc,调配数据内存函数;
–RK 系列开发板 DmaBufFree,开释数据内存函数;
–RK 系列开发板 DmaRequestChannel,申请 DMA 通道函数;
–RK 系列开发板 DmaConfigChannel,配置 DMA 通道函数;
–RK 系列开发板 DmaPrep,DMA 预处理函数;
–RK 系列开发板 DmaPause,暂停函数;
–RK 系列开发板 DmaResume,复原函数;
–RK 系列开发板 DmaSubmit,提交数据函数;
–RK 系列开发板 DmaPending,悬挂数据函数;
–RK 系列开发板 PcmPointer,治理数据缓存函数。
总结:
本文具体介绍 DMA 的适配步骤以及外围代码,置信读者会对音频适配会有一个更分明深刻的理解,之后的文章中,会逐渐更新音频驱动的 Codec 模块适配、Audio HCS 配置等。