RK系列开发板音频驱动适配指南(二)

背景:

上一篇文章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. 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. 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配置等。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值