3 音频驱动设计
TLV320DAC23与MCF5329之间的音频数据传输采用I2S音频格式,由MCF5329的同步串行接口SSI实现与TLV320DAC23的数据传输。MCF5329处理器内核与同步串行接口SSI发送/接收寄存器之间的音频数据传输采用eDMA机制传输,由MCF5329中的eDMA模块实现。
3.1 硬件连接
TLV320DAC23与MCF5329的接口有两个:一个是控制接口,用于设置TLV320DAC23的寄存器,从而设置它的工作参数;一个是数字音频接口,用于传输TLV320DAC23的音频数据并控制数据的时序。本设计采用由MCF5329提供的时钟信号,所以将MCF5329设为主设备,TLV320DAC23作为从设备。音频数据采用I2S音频格式传输,控制字通过SPI接口传输。具体连接如图2所示。
3.2 软件设计
(1)设备的初始化
同步串行接口SSI的初始化包括对控制寄存器、传输配置寄存器和接收配置寄存器、时钟配置寄存器、发送时隙掩码寄存器和接收时隙掩码寄存器以及中断允许寄存器的配置。最后设置中断源和中断级别。
eDMA的初始化包括eDMA与同步串行接口SSI发送/接收寄存器连接的配置,以及确定eDMA的通道仲裁方式。
具体代码如下:
TLV320DAC23的初始化主要是通过SPI接口设置编解码芯片控制接口相关的寄存器。初始化设置为I2S从模式,输入字长32位,高位先,设置采样率8 kHz。设置完后激活数字接口。
(2)数据的传输
完成设备的初始化后,就要设置传输控制描述符TCD的相关寄存器以控制eDMA的传输。以音频驱动中的放音过程为例,该过程的音频数据由处理器内核传送到SSI发送寄存器。音频数据分为左右2个声道,所以启动2个eDMA通道——通道11和通道12——负责传送数据。设置次循环的大小为4字节,由于是2个通道传输,所以1次次循环共8字节。若一次主循环需要传完的数据为count字节,那么设置主循环中包含的次循环数为count/8。最后允许通道12的主循环中断,并开启2个通道,开始传输。下面以通道ll为例来说明eDMA的设置流程(TCD代表通道11):
通道12的设置基本与通道11相同,只有一点不同,就是在开启通道12传输的同时允许通道12的大循环中断。音频驱动中的录音过程与放音过程eDMA设置相似,只是音频数据的传送方向是由SSI接收寄存器传输到处理器内核。
设计完成后的音频驱动经测试,在系统任务繁重的情况下(例如MP3文件解码并实时播放),仍然可以完成正常语音播放,效果良好。
结 语
本文分析了一种增强型直接内存存取eDMA的访问机制,并通过实例阐述了eDMA的典型应用。eDMA模块加快了数据传输的速度,减少了CPU的干预。并且它在TCD中设置了主循环和次循环传输,从而增强了单次单通道的传输数据量,也增强了传输的灵活性。