内核资料:ALSA资料

内核资料好多好多,一个人摸索真的很难。
最近又卡住了,没办法向前进了。声卡,资料真的好多。没有一个系统的视频或者学习资料真的感觉无从下手。

只能用时间耗了,先堆一些枯燥的资料。等我哪天茅塞顿开了,再来写心得吧!

Master clock:每一个音频子系统都需要一个主时钟,通常被称作MCLK或者SYSCLK,主时钟可以来自外部晶振,锁相环或者CPU系统时钟.某些时钟源是
可以配置的,通常为了省电会降低系统的工作频率.

DAI(digital audio interface) Clocks:通常由BCLK驱动(bit clock),主要用来驱动CPU和codec之间的数据链路.
同时 DAI 在每个audio封包的开始也有一个帧时钟.这个时钟也常被成为 LRCLK(左右声道时钟).这个时钟的频率和采样率频率相同.

BCLK的产生:
BCLK = MCLK / x 或者 BCLK = LRC * x 或者 BCLK = LRC * Channels * Word Size

这个时钟和CPU与codec关系比较大.一般来说尽可能降低你的BCLK,为了省电。

如果IC支持:常常可以看到我们用codec来驱动 audio clock,因为它的采样率通常都会被CPU准很多

ASoC Platform Driver:
1.一个ASoC平台驱动可以分为 音频DMA 和DAI 的配置和控制.它只针对CPU进行实现,绝不包含任何单板相关内容.

a.Audio DMA
一般 可支持ALSA(advanced linux sound arch)操作:

/* SoC audio ops */
struct snd_soc_ops {
    int (*startup)(struct snd_pcm_substream *);
    void (*shutdown)(struct snd_pcm_substream *);
    int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
    int (*hw_free)(struct snd_pcm_substream *);
    int (*prepare)(struct snd_pcm_substream *);
    int (*trigger)(struct snd_pcm_substream *, int);
}; 

主要数据结构:

struct snd_soc_platform_driver {
    char *name;

    int (*probe)(struct platform_device *pdev);
    int (*remove)(struct platform_device *pdev);
    int (*suspend)(struct platform_device *pdev, struct snd_soc_cpu_dai *cpu_dai);
    int (*resume)(struct platform_device *pdev, struct snd_soc_cpu_dai *cpu_dai);

    /* pcm creation and destruction */
    int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *, struct snd_pcm *);
    void (*pcm_free)(struct snd_pcm *);

    /*
     * For platform caused delay reporting.
     * Optional.
     */
    snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *,
        struct snd_soc_dai *);

    /* platform stream ops */
    struct snd_pcm_ops *pcm_ops;
};

参考:http://www.alsa-project.org/~tiwai/writing-an-alsa-driver/
b.SoC DAI Drivers
每个DAI 必须提供以下描述信息:
1) 数字音频接口的描述信息
2) 数字音频接口的配置信息
3) PCM的相关描述说明
4) SYSCLK 的配置
5) Suspend(挂起) and resume(恢复) (可选)

ASoC 的DAI目前支持三种接口:AC97,I2S,PCM
1.AC97(Audio Codec97)
在便携式设备的声卡上比较常见的一种五线式接口.
有一个复位线和分时多路复用的SDATA_OUT(playback)和SDATA_IN(capture)
BCLK通常由codec驱动(通常12.288MHZ).帧率(48KHZ)总是由控制器驱动
每个AC97帧长12us,被分为13个时间间隙

早期的ISA声卡由于集成度不高,声卡上散布了大量元器件,后来随着技术和工艺水平的发展,出现了单芯片的声卡,只用一块芯片就可以完成声卡所有的功能。
但是由于声卡的数字部分和模拟部分集成在一起,很难降低电磁干扰对模拟部分的影响,使得ISA声卡信噪比并不理想。
AC97标准则提出“双芯片”结构,即将声卡的数字与模拟两部分分开,每个部分单独使用一块芯片。AC97标准结合了数字处理和模拟处理两方面的优点,一方面减少
了由模拟线路转换至数字线路时可能会出现的噪声,营造出了更加纯净的音质;另一方面,将音效处理集成到芯片组后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值