TMS320VC5509A通过MCBSP接口与NUC972的IIS接口进行音频传输(二)

6 篇文章 2 订阅

    如果有问题,请加QQ群 891339868 进行交流

TMS320VC5509A通过MCBSP接口与NUC972的IIS接口进行音频传输(二)

今天继续学习DSP5509A与NUC972通过IIS进行音频数据传输,主要分析DSP5509A这一端的MCBSP接口的配置。首先先介绍一下DSP5509A的MCBSP接口。TI的官方文档是这样描述的:The TMS320C55x DSPs provide multiple high-speedmultichannel buffered serial ports (McBSPs) that allow direct interface to other C55x DSPs codecs,and other devices in a system。高速、多缓冲、串行接口、可以直接连接其他DSPcodec、其他设备是其使用的关键词。MCBSP接口详细的资料,可以查阅官方文档。根据官方文档描述的特性,可以兼容AC97IIS这两种标准音频接口。本文档主要描述配置为IIS的方法。

首先看一下MCBSP接口包含的接口,如下图所示:

 

IIS音频系统中,DSP5509A作为从设备,CLKR为接收数据提供时钟,CLKX为发送数据提供时钟,CLKSDSP5509A上面没有,可以忽略,DR接收数据,DX发送数据,FSR为接收数据的同步时钟,FSX为发送数据的同步时钟。

再了解一下DSP5509A的MCBSP传输数据的典型时序图,首先看一下单数据相的,如下图所示:

 

根据图上的时序可以看出来,CLKR/CLKX分别为发送和接收数据提供位时钟,FSR/FSX分别提供帧同步时钟,在单数据相模式下,每一帧数据的格式需要完全一致,不过每一帧数据的数目可以最多128个数据(8bit/12bit/16bit/20bit/24bit/32bit)。

再看一下双数据相的传输的时序图,如下图所示:

 

根据上图的时序,在双数据相模式下,在一个帧同步信号内,可以实现两种不同格式的数据进行传输,最多一帧数据可以传输256个数据(8bit/12bit/16bit/20bit/24bit/32bit)。

由于Nuc972上面是标准的IIS接口,咱们首先了解一下IIS接口定义:

  1. 串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK的频率=2*采样频率*采样位数;
  2. 帧时钟LRCK,用于切换左右声道的数据,低电平为左声道,高电平为右声道,LRCK频率等于采样频率;
  3. 串行数据SDIN、SDOUT为数据传输接口;
  4. 有时为了使系统能够更好的同步,还需要另外一个信号MCLK,成为主时钟,也叫系统时钟(sys clokc),一般是采样频率的256倍或者是384倍。这个不是必须的,我的理解是为整个系统统一提供时钟,为了更好的同步,在这个项目中,不使用这个时钟。

IIS的操作模式分为三种:标准的IIS模式、左对齐模式、右对齐模式。在这里我们用的是标准的IIS模式,所以咱们讨论一下标准的IIS模式的数据传输的时序图,其他两种就不讨论了,有兴趣的可以去网上了解。标准的IIS模式时序图如下图所示:

 

从时序图上可以看出来,WCLK提供左右声道选择时钟,BCLK提供数据传输的位时钟,SDIN/SDOUT上分别输入和输出数据。每次数据传输需要在WCLK来到后需要延时一个位时钟进行数据传输(这一点很重要,需要在MCBSP配置中进行设置)。

对比IIS与MCBSP时序图,有一点不同,MCBSP使用的同步信号在IIS接口上没有,所以需要使用IIS的WCLK作为MCBSP的FSR/FSX同步时钟,WCLK的下降沿作为同步时钟。根据这种考虑,MCBSP可以选择双数据项模式,每相数据一个数据,这样正好可以兼容IIS接口的时序。由于MCBSP接口的寄存器比较多,在这里就不一一列举了,把关键的地方说一下:

  1. 双数据相模式,每相一个数据,数据位为16bit,我这里使用的16bit数据模式;
  2. 接收到同步时钟后,延时一个位时钟再传输数据,这一点正好兼容IIS标准模式下的一个位时钟的间隙;
  3. 时钟发生寄存器默认值就可以了,因为是从模式,外部提供时钟;
  4. MCBSP引脚FSX/FSR的时钟源都设置为外部提供,CLKR/CLKX都设置为输入模式,FSX/FSR同步时钟的有效电平都设置为低电平模式。

通过以上配置后,MCBSP就可以按照IIS标准模式进行数据传输了。

不过一般在大数据量的传输中,都使用DMA模式减少CPU的工作量,所以需要进一步对DMA进行配置。咱们首先了解一下DSP5509A的DMA的相关信息,DSP5509A上一共有6个DMA通道,可以分别绑定HPI接口、DARAM、SARAM、外设总线控制器、EMIF接口。据图的框图如下图所示:

 

在每一个DMA通道中,都内置一个FIFO缓存区,具体的传输流程如下图所示:

 

DSP5509A的每一个DMA通道都提供每次数据传输完成后自动初始化的功能,可以很方便的对DMA寄存器进行重新初始化,从而节省时间。自动初始化DMA寄存器分为两种模式,一种是不改变寄存器内容初始化,另外一种是改变寄存器内容初始化。咱们首先看一下不改变寄存器内容的操作流程,如下图所示:

 

根据上图所示,如果设置AUTOINIT=1,REPEAT=1的话,一个通道的DMA一次传输完成后,CPU会自动重新初始化,不需要用户程序干预,这种方式比较适合数量小的情况下,采取单数据缓冲区操作的模式。

下面看一下改变DMA寄存器内容的操作流程,如下图所示:

 

根据图中描述,这种模式操作起来相对来说比较复杂,主要适合于乒乓操作的方式。对比上一种操作方式,需要在DMA启动前初始化时设置REPEAT=0,随后启动DMA传输, DMA启动后需要用户程序设置ENDPROG=1,告诉DMA寄存器内容已经设置完毕,DMA控制器此时一直在等待ENDPROG是否已经被置一,DMA控制器收到这个信号后,将配置寄存器中的内容复制到工作寄存器,同时将ENDPROG复位为零,此时用户程序需要轮询ENDPROG是否已经被DMA控制器复位为零,如果检测到ENDPROG复位为零,用户程序就可以重新配置DMA配置寄存器的内容了,就这样,依次循环下去。在此项目中,采用的就是这种操作方式,为了能及时的检测ENDPROG标志(这一点很重要,要不然会出现数据丢失的问题),我在定时器中断服务程序里面对ENDPROG进行检测。

说到这里,DSP5509A的MCBSP就配置完成了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值