第4篇 machine,platform,codec
参考:韦东山Linux教程
(1)machine : 单板相关 //结构体: struct snd_soc_card -> struct snd_soc_dai_link
1)表明 platform 是哪个, 通过 snd_soc_dai_link 指定名字,进行匹配
1. 指定 CPU DAI (IIS)
2. snd_soc_platform_driver(指定 DMA)
2)表明 codec 是哪个, 通过 snd_soc_dai_link 指定名字,进行匹配
1. 指定 codec DAI
2. snd_soc_code_driver(指定控制接口 (L3) )
(2)platform: //2440板
1)CPU DAI (IIS): 设置接口, //结构体: struct snd_soc_dai_driver
1. 实现对2440板 IIS 控制器的设置(hw_params, fmt, clkdiv, sysclk)
2. 与 IIS 和 音频数据传输 的控制(trigger)
2)snd_soc_platform_driver(指定 DMA): 配合 IIS 实现音频数据的传输 //结构体: struct snd_soc_platform_driver //应该理解为
1. request_irq, 触发DMA传输, 中断处理
(3)codec: //编解码芯片
1)DAI (IIS): //结构体: struct snd_soc_dai_driver
1. 与 IIS 和 音频数据传输 的控制(startup)
2. 与 IIS 和 音频数据传输 相关的参数设置,比如时钟设置,格式(hw_params, fmt, sysclk) //可能会用到 L3 操作
2)snd_soc_code_driver(指定控制接口 (L3) ): //结构体: struct snd_soc_codec_driver //应该理解为 codec_driver
1. 实现 L3 引脚的初始化, 用 GPIO 模拟
2. 实现对寄存器操作函数 (UDA1341的寄存器),按时序(read, write, reg地址)
注意:
DAI (Digital Audio Interface)
Machine : struct snd_soc_dai_link
指定下面的 Platform 和 Codec :
codec_name, platform_name, cpu_dai_name, codec_dai_name, ops
Platform :
CPU_DAI : struct snd_soc_dai_driver
.name //machine 中的 dai_link 通过 cpu_dai_name 来匹配 cpu_dai
.palyback //回放数据流性能描述信息
.capture //录制数据流性能描述信息
.ops //操作函数集合,将数据从 I2S_Tx_buf --> Codec
PCM_DMA : struct snd_soc_platform_driver
.name
.struct snd_kcontrol_new *controls; //音频控件指针
.ops //操作函数集合,操作 DMA_buf --> I2S_Tx_buf
Codec:
Codec : struct snd_soc_code_driver
.struct snd_kcontrol_new *controls; //音频控件指针
.set_sysclk : 时钟配置函数
.read : 读取 Codec 寄存器接口, 如可通过 /dev/controlC0 读取 Codec 的音量
.write : 写入 Codec 寄存器接口, 如可通过 /dev/controlC0 设置 Codec 的音量
Codec_DAI: struct snd_soc_dai_driver
.name //machine 中的 dai_link 通过 codec_dai_name 来匹配 codec_dai
.palyback //回放数据流性能描述信息
.capture //录制数据流性能描述信息
.ops //操作函数集合,配置 DAI 时钟,格式 等
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)