Audio驱动涉及的硬件相关介绍

PS:之所以写这些东西,很大一部分原因是希望自己可以通过记录的方式,提高自己的理解和对整体的把握程度。

 

首先看AT91SAM9260与音频接口芯片的示意图,举最简单的PCM系列为例如下,

 

SSC的TK对应的PCM系列的BCK,TF对应的LRCK,TD对应的DATA

 

而对于SSC与PCM的数据通信格式,使用的是I2S

I2S的数据通信格式如右上图所示,

更清晰的可以看PCM1754文档中的图,如下,

 

fs对应的是采样率,学过通信的都知道奈奎斯特采样定律,对于人耳语音能听到的频率范围为20~20KHZ,所以一般情况下设置的采样频率均为44.1KHZ

对于I2S数据格式,LRCK对应的是左右声道的数据保存时钟,当LRCK为低电平时,存放的是左声道的数据,为高时,则为右声道数据。

同时,BCK,比特采样时钟,必须是48fs或者64fs,一般情况下,I2S支持的数据格式为16bit   to 24 bit

 

这样看来,只要SSC照着I2S的数据格式发送数据,同样PCM照着这种格式接收。

先看SSC的发送

对于串口数据通信,显然是没有I2S这种数据格式的,需要通过模拟的方式来实现,具体的就是通过设置SSC的相关寄存器进行实现。

同时,音频数据的读写速度相对较快,最好使用DMA的方式,所以这里使用到了PDC

 

PDC,就是Peripheral DMA Controller,这里PDC的两个通道用于与SSC交互数据,

PDC主要设置8个寄存器,分别是RPR(receive point R),RCR(receive count R),RNPR(receive next point R),RNCR,TPR,TCR,TNCR,TNPR,其余的就是PTCR(xfer control R),PTSR(Xfer status R),接着就是使能时钟了

 

同时,PDC中断触发有四处,分别是数据发送结束,数据接收结束,接收缓存满,发送缓存空,理解这些就能更好的理解驱动

 

对于PDC和SSC的这些寄存器,均使用内存映射的方式是实现对寄存器的操作。

 

SSC中还有一个时钟没有说明,就是SCLK,系统时钟。一般而言,对PCM1754,可以根据下面这种表来选择时钟,同时文档中也有一些特殊的规定,如使用48fs的BCK,则SCLK只能为192fs,384fs,768fs等,具体需要看文档。

 

 

对于SCK和LCRK(采样率),AT91SAM9260文档中有提到相关寄存器,

对于ARM9的时钟设为XMHZ,则SCK=X/(2*div) (div为相应的分频数)

而对于采样率LCRK,则为LCRK=SCK/(2*(period+1)),period可以理解为帧数

 

同时来看PCM1754,

有三个PIN,分别是13pin DEMP,14pin MUTE,15pin FMT

分别代表着44.1KHZ的重音,弱音,数据格式

一般情况下,将三者均接低,就是没有重音,没有弱音,使用的数据传输格式为I2S,16bit-24比特

 

在驱动中,我们提到过又一个MIXER组件,对于的硬件就是这些PIN,不过由于PCM1754不支持变成控制,所以MIXER组件可以不用实现

 

而对于PCM1753/1755,则可实现MIXER组件。

该两款芯片中,FMT对应的是ML,MUTE对应的MC,DEMP对应的MD,

 

根据时序实现寄存器的写操作,共有寄存器16到寄存器22,共实现了12个control

 

具体参数设置就不说了,看文档吧~


你可能感兴趣的:(lcd_driver)