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
- 实例化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驱动释放函数。
- 实现以下函数:
- 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配置等。
RK系列开发板音频驱动适配指南(二)相关推荐
- RK系列开发板音频驱动适配指南(一)
背景: 多媒体系统目前在Linux操作系统,windows操作系统已经非常成熟,并且应用场景广泛,但是,基于OpenAtom OpenHarmony(以下简称"OpenHarmony&quo ...
- 如何从零开始开发一款嵌入式产品(20年的嵌入式经验分享学习,来自STM32神舟系列开发板设计师的总结)
转载: 来源:www.armjishu.com 作者:jesse 我的另一篇文章:<STM32嵌入式入门必看之文章-----介绍非常详细!(学STM32的理由!!!!)>http://ww ...
- 构建一个适合stm32mp157系列开发板的嵌入式Linux系统
在线课堂:https://www.100ask.net/index(课程观看) 论 坛:http://bbs.100ask.net/(学术答疑) 开 发 板:https://100ask.taoba ...
- 瑞芯微RK3399嵌入式开发板Wifi 驱动 build in 方式
RK3399的CPU采用big.LITTLE大小核架构,双Cortex-A72大核+四Cortex-A53小核结构,对整数.浮点.内存等作了大幅优化,在整体性能.功耗及核心面积三个方面都具革命性提升 ...
- STM32MP157驱动开发——Linux 音频驱动
STM32MP157驱动开发--Linux 音频驱动 一.简介 1.CS42L51 简介 2.I2S总线 3.STM32MP1 SAI 总线接口 二.驱动开发 1.音频驱动 1)修改设备树 i2c 接 ...
- Beaglebone Black开发板安装驱动
Beaglebone Black开发板安装驱动 Beaglebone Black开发板安装驱动,在使用Beaglebone Black开发板子做任何事情之前首先需要安装驱动.下面的内容就了展示在Win ...
- 【STM32F103ZE】TOF250(TTL)基于STM32系列开发板的运用
目录 @[TOC](目录) 一.前言 二.硬件准备 二.软件准备 三.硬件接线图 四.例程源码 五.烧录说明 5.1 烧录接线示意图 5.2 烧录动态图 六.结果输出 一.前言 此片文章主要介绍如果通 ...
- 【STC12C5A60S2】TOF250(TTL)基于51系列开发板的运用
目录 一.前言 二.硬件准备 二.软件准备 三.硬件接线图 四.例程源码 五.烧录说明 5.1 烧录接线示意图 5.2 烧录动态图 六.结果输出 一.前言 此片文章主要介绍如果通过51系列开发板来读取 ...
- 龙芯智龙开发板:驱动步进电机实战入门
本文面向初学者,请多各位高手包涵.我在此特别致谢勤为本先生为我提供的帮助. 步进电机 步进电机就是一种受脉冲控制的电机,步进电机接收到一系列某种调制顺序的脉冲,做出相应的反应,转到相应的角度或者相应的 ...
最新文章
- 40年诞生7位诺奖得主,美国贝尔实验室做对了什么?
- CompletableFuture并行异步处理类使用示例
- c++导出标准win32格式的dll
- mysql几种备份恢复_mysql多种备份与恢复方式一
- UVA11039 Building designing【排序】
- Redhat Linux Enterprise Server 5.5 x86_64位操作系统Karachi时区问题?
- php管理员权限表,权限表的建立
- javaScript之函数,分支结构 ,循环结构(二)
- 2019上海开源峰会炉边会谈纪要
- 数据包络分析方法与maxdea软件_数据包络模型 DEA三阶段超效率SBM非期望
- PLC编程入门基础知识
- 魔兽怀旧服怎么找不到服务器,魔兽世界怀旧服世界服务器无法连接怎么办
- zabbix mysql安装配置_Zabbix安装图解教程 | 系统运维
- flyway 社区版本使用团队(企业级)特性ignore-migration-patterns使用
- 量化交易入门笔记-策略常用对象
- python3GUI--微博图片爬取工具V1.5 By:PyQt5(附源码)
- 海关179号出口清单报文CEB603Message描述规范
- 鸿蒙子系统解读-分布式任务调度篇
- 英语知识系列:按发音规律重排的英语音标
- 辽宁移动数码S6_S805_RTL8188_线刷固件包