转自:http://www.cnblogs.com/TaigaCon/archive/2012/12/07/2807922.html
uda1341连接soc的引脚分为两类:数据引脚、控制引脚。
数据引脚用于音频码流的传输,
控制引脚用于该声卡芯片控制,比如说音量控制等
如下图为uda1341的声卡
或者可以看我以前的博客,有FL2440的uda1341声卡原理图
http://blog.csdn.net/fml1997/article/details/70545112
其中连接soc的引脚用红框框了出来
上面那个是数据传输引脚
下面的是控制引脚
引脚说明:
CDCLK : uda1341的工作时钟
I2SSCLK : 码流一位所用的时钟
I2SLRCK : 码流的左右声道时钟
I2SSDI : 输入码流
I2SSDO : 输出码流
L3MODE : 模式选择,用于选择L3DATA传输的是地址还是数据
L3CLOCK : 控制时钟
L3DATA : 控制数据引脚,先发送地址,再读写数据
L3传输模式跟I2C的差不多
对于码流传输,这里是通过I2S协议进行传输的。
一般的soc里面也有I2S模块,关系如下:
soc内的I2S模块作为内存跟声卡芯片的中间站,
当需要发出声音信号的时候,数据从内存通过系统总线进入soc的I2S模块,I2S模块再把数据发送到UDA1341,然后通过扬声器或者耳机输出。
当需要接受声音信号的时候,数据从外界通过声音采集设备(麦克风),进入UDA1341,然后I2S模块,最后通过系统总线传输到内存。
当然,内存与I2S模块的交互方式是DMA
在s3c2440里面,I2S与GPIO是公用引脚的,因此在使用I2S模块之前应该把GPIO设为I2S模式
I2S是专门的音频协议,我们可以直接通过设置soc内部的I2S控制寄存器,达到设置声卡码流传输的目的,其中包括设置声卡工作时钟,位时钟,声音信号位宽等。
声音信号的传输是左右声道的信号交替传输的
对于控制传输,这里暂且称为L3传输
L3传输在mini2440开发板上是通过GPIO进行数据传输的,因此使用前应该设置GPIO引脚为输入/输出
L3传输类似于I2C传输,先发送地址信号,再发送数据信号,多出来的那条信号作为时钟信号
L3MODE用于选择是发送数据还是地址,L3DATA会在L3CLOCK上升沿的时候接收数据
由于是通过GPIO传输数据的,所以L3的三个引脚需要我们自己设置,一位一位地写GPIO