ALSA总结

ALSA总结

简介

阅读前,请先阅读这几篇前序文章:

原理

在这里插入图片描述

如上图,每个模块都有自己的driver,DMA是platform_driver,cpu和codec则是dai_driver;每个模块将自己注册给ACore,Acore就有了调用各个模块的能力;
1)当Acore实例化声卡时,就会调用每个模块的初始化工作;比如.set_clk设置时钟,.set_fmt设置数字接口的格式,是I2S、Left_J还是DSP A等等
2)当上层启动/暂停播放音频业务,往下传递数据或截止时,会调用.trigger等等

DMA

DMA负责快速将内存数据转移到CPU_DAI上,其中:

  • open时,dma内容已分配好,
    这里将会初始化内存的访问规则,比如为了高效读写内容,要求以32 bit对齐访问内存;同时将dma支持的buffer、period、channel等参数返回给应用层以便其选择
  • hw_param 传递下来的sampleRate、format和channel
    这里就是通过这些参数来设置DMA的发送规则,fifo队列、brust和递增寻址等
  • trigger和prepare
    因为dma发送数据给CPU_DAI时,发送完后都是中断触发,trigger用于准备和启动中断的
  • pointer
    pointer很重要,他能从buffer中获取已发送数据的偏移,通过这个偏移,应用层可以知道数据发送多少了
  • 中断函数
    除此之外就是一些DMA的中断内容,中断回调函数,其工作:触发中断、清除中断标志,通知上层发送下一帧数据

CPU_DAI和Codec_DAI

这两个部分主要就是设置数字接口DAI的通讯参数,
I2S、TDM、slot_num和slot_width,要理解这些参数如何设置,还有时钟信号MCLK、BCLK、LRCLK;

他们往往都来源于SampleRate、format和channel参数,要清楚大致的计算逻辑;

Codec DSP之外的知识

因为DSP芯片内部包含许多内部组件,如mixer、mux、PGA、DRC等等,codec的功能就是控制其工作、上下电,这就涉及一个重要的东西:DAPM系统,相对复杂,直接跳转到另外的博客查看把!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气好男人_Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值