第七章 语音信号_第1页
第七章 语音信号_第2页
第七章 语音信号_第3页
第七章 语音信号_第4页
第七章 语音信号_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章基于DSP的语音信号的采集和播放系统在以DSP为核心的语音信号处理系统中,DSP要完成信号的采集运算处理任务,A/D和D/A完成语音信号的输入和输出。在以TMS320VC5509A为核心的语音处理系统中,采用了专为音频处理应用设计的编解码器件TLV320AIC23,来完成模拟语音信号的采样和数字音频信号的D/A转换。利用TMS320VC5509A片内多通道缓冲串口(McBSP),通过I2C总线来对AIC23进行控制,从而实现具有较强功能的语音处理系统。目录7.1系统的总体设计7.2TLV320AIC23B与TMS320VC5509A的接口设计7.3DSP相关片上外设7.3.1I2C7.3.2McBSP7.4软件设计7.5系统展望语音信号的采集和播放是语音信号处理的基础,DSP是各种语音信号数字处理的平台。DSP通过控制语音信号的模数和数模转换器采集和播放语音信号,再通过DSP的数字信号处理实现各种语音信号处理的算法。7.1系统的总体设计系统两大组成部分音频编解码芯片

实现数模和模数转换功能DSP芯片

控制音频编解码芯片采集和播放语音信号,实现语音信号的采集,然后将语音信号存储到DSP的内部RAM中,最后实现语音信号的播放。系统硬件结构框图DSP芯片的选择DSP指标处理速度、功耗、程序存储器和数据存储器的容量、片内的资源。VC55xx系列特点

低功耗,适合个人与便携式上网以及无线通信应用。处理速度在80MIPS--400MIPS之间。具有MCBSP同步串口、HPI并行接口、定时器、DMA等外设。C55xx的指令长度从8-bit到48-bit。这种长度可变的指令可以使每个函数的控制代码量比C54x降低40%,减少了存储器的容量,降低了成本。(TMS320VC5509)7.2TLV320AIC23与TMS320VC5509

的接口设计

控制接口

DSP芯片通过控制接口向音频处理芯片传送配置参数,控制音频处理芯片的工作状态。

数字音频接口

通过该接口,音频处理芯片将采集到的音频数据传给DSP进行处理,处理过后的音频数据再由DSP通过该接口传回给音频处理芯片,进行数模转换后播放出来。

TLV320AIC23是TI推出的一款高性能的立体声音频Codec芯片,其内部结构框图如下图所示。AIC23内置耳机输出放大器,支持MIC和LINEIN两种输入方式(二选一),对输入和输出都具有可编程增益调节。AIC23在芯片内部集成了模/数转换(ADC)和数/模转换(DAC)部件,其中模/数转换部分采用了先进的Sigma-delta过采样技术,可以在8~96kHz的频率范围内提供16位、20位、24位和32位的采样,ADC和DAC的信噪比分别可以达到90dB和100dB。AIC23还具低功耗的特点,回放模式下功耗仅为23mW,省电模式下更是小于15W。由于具有上述优点,使AIC23成为一款非常理想的音频模拟I/O器件,可以数字音频领域有很好的应用前景。音频解码芯片---TLV320AIC23TLV320AIC23内部结构图

AIC23主要的外围接口分为以下几个部分:(1)数字音频接口BCLK——数字音频接口时钟信号,当AIC23为从模式时,该时钟由DSP产生;AIC23为主模式时,该时钟由AIC23产生。LRCIN——数字音频接口DAC方向的帧信号。LRCOUT——数字音频接口ADC方向的帧信号。DIN——数字音频接口DAC方向的数据输入。DOUT——数字音频接口ADC方向的数据输出。(2)麦克风输入接口MICBIAS——提供麦克风偏压,通常是3/4AVD。MICIN——麦克风输入,由AIC结构框图可以看出放大器默认是5倍增益。(3)LINEIN输入接口LLINEIN——左声道LINEIN输入。RLINEIN——右声道LINEIN输入。(4)耳机输出接口LHPOUT——左声道耳机放大输出。RHPOUT——右声道耳机放大输出。LOUT——左声道输出。ROUT——右声道输出。(5)配置接口SDIN——配置数据输入。SCLK——配置时钟。AIC23与VC5509接口原理图

J5J6J7J8I2C(主)(从)TLV320AIC23的控制接口

接口模式

SPI或者I2C选择理由

在设计中,若采用SPI总线,则需要多占用一个McBSP)资源,但是很多时候DSP的McBSP资源会比较紧张(比如需要跟近端RS-232和远端RS-485连接),考虑到系统的可扩展性,在设计中采用了通过I2C总线来配置AIC23。MODE接口0I2C1SPII2C模式下的时序图对接口原理图的说明MODE接数字地表示利用I2C控制接口对AIC23传输控制数据,定义了I2C总线上AIC23的7bit外设地址“0011010”。收发时钟新信号CLKX1和CLKR1由AIC23的串行数据输入时钟BCLK提供,并由AIC23的帧同步信号LRCIN、LRCOUT启动串口数据传输。DX1和DR1分别与AIC23的DIN和DOUT相连,从而完成DSP与AIC23间的数字信号通信。CSSTATEADDRESS0001101010011011AIC23通过麦克风采样模拟音频信号或直接输入模拟音频信号,然后将其转换为DSP可以处理的数字信号。当DSP处理完后,再将数字信号转换为模拟信号输出,用户即可利用耳机或扬声器收听到高质量的音频信号。5509A与AIC23的硬件连接示意图如下图所示。AIC23通过两个独立的通道进行通信,一路控制AIC23的端口配置寄存器;另一路发送和接收数字音频信号。利用5509A的I2C总线被用来作为单向控制通道,控制通道只在配置AIC23时才使用,当传输音频信号时,它一般是空闲的。I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据。McBSP被用来作为双向数据通道,所有的音频数据都通过数据通道传输。

AIC23内部具有一个可编程时钟,由PLL1708PLL驱动提供。系统的默认时钟为18.432MHz。内部的采样频率通常由18.432MHz时钟分频产生,例如48kHz或8kHz。采样频率通过AIC23的SAMPLERATE寄存器设置。00100011TLV320AIC23的内部寄存器地址寄存器地址寄存器0000000左输入声道音量控制0000110电源控制0000001右输入声道音量控制0000111数字音频接口格式0000010耳机左输入声道音量控制0001000采样率控制0000011耳机右输入声道音量控制0001001数字接口激活0000100模拟音频通道控制0001111复位寄存器0000101数字音频通道控制

在5509A与AIC23的连接中,McBSP的接收和发送工作在同步方式下,接收和发送可以独立配置,利用5509A的I2C模块,可以对AIC23内部的配置寄存器进行编程配置,使AIC23工作在要求的状态下。首先对5509A的I2C模块初始化,图7-25是5509AI2C主从发送控制流程图,将数据逐次写入I2CDXR,并通过I2C总线发送给AIC23,可以完成对AIC23的初始化配置。5509AI2C主从发送控制流程图由于设置AIC23接收、处理数据的速度为48kHz,程序中发送数据的函数在设备忙的情况下不会返回,而是等待其准备好并接收数据完毕才返回,所以程序中无需使用任何控制数据发送速度的技术。下面给出AIC23初始化的部分源代码。voidAIC23_Init(){I2C_Init();//复位AIC23并打开电源AIC23_Write(AIC23_RESET_REG,0);AIC23_Write(AIC23_POWER_DOWN_CTL,0);AIC23_Write(AIC23_ANALOG_AUDIO_CTL,ANAPCTL_DAC,ANAPCTL_INSEL); //使用麦克风音源AIC23_Write(AIC23_DIGITAL_AUDIO_CTL,0);

//打开linein音量控制sAIC23_Write(AIC23_LT_LINE_CTL,0x000);AIC23_Write(AIC23_RT_LINE_CTL,0x000);//AIC23工作于主模式,44.1kHz立体声,16bit采样//输入时钟为12MHzAIC23_Write(AIC23_DIGITAL_IF_FORMAT,DIGIF_FMT_MS|DIGIF_FMT_IWL_16|DIGIF_FMT_FOR_DSP);AIC23_Write(AIC23_SAMPLE_RATE_CTL,SRC_SR_8|SRC_BOSR|SRC_MO);//打开耳机音量控制和数字接口AIC23_Write(AIC23_LT_HP_CTL,0x07f);//0x79为麦克风AIC23_Write(AIC23_RT_HP_CTL,0x07f);AIC23_Write(AIC23_DIG_IF_ACTIVATE,DIGIFACT_ACT);//设置McBSP0为从模式McBSP0_InitSlave();}7.3DSP相关片上外设

时钟发生器

外部时钟信号从CLKIN引脚输入,在内部修改这个信号,来产生希望频率的输出时钟。时钟发生器将这个输出时钟送给CPU、外设和其它内部模块。I2C模块

发送配置参数给TLV320AIC23。McBSP

和TLV320AIC23实现无缝连接,传送音频数据。DSP时钟发生器÷CLKINCPU时钟CLKDIVCLKOUTCPU、外设或者其他器件图1-3时钟输出时钟发生器时钟发生器,它可以利用数字锁相环(DPLL)分频或者倍频输入时钟频率(从CLKIN引脚接收),然后分别送到CPU、外设和C55xDSP内的其他模块,以使它们工作在所要的时钟频率。可编程分频器7.3.1I2C(Inter-IntegratedCircuit

内部集成电路)模块

TMS320C55x可以通过I2C串行总线同其他I2C兼容设备相连接,通过该串行总线可以收发8位数据。

C55x的I2C总线模块有如下特点:兼容I2C总线标准:即支持位/字节格式传输,支持7位和10位寻址模式,支持多主方发送从方接收模式和多主方接收从方发送模式,I2C总线的数据传输率可以从10kbit/s到400kbit/s;可以通过DMA完成读写操作;可以用CPU完成读写操作和处理非法操作中断;模块的工作频率为12MHz;模块可以使能和被禁止。I2C总线连接关系

I2C总线使用一条串行数据线SDA和一条串行时钟线SCL,这两条线都支持输入输出双向传输,在连接时应注意这两根线都需要外接上拉电阻,当总线处于空闲状态时两条线都处于高电平。I2C总线支持多主设备模式,当多个主设备要进行通信时,可以通过仲裁机制决定那个主设备占用总线。I2C总线模块由串行接口、DSP外设总线接口、时钟产生和同步器、预定标器、噪音过滤器、仲裁器以及中断和DMA同步事件接口,下面给出了I2C总线模块内部框图。

I2C总线模块内部框图1.I2C总线数据传输

I2C串行数据信号在时钟信号为低时改变,而在时钟信号为高时进行判别,这时数据信号必须保持稳定。当I2C总线处在空闲态转化到工作态的过程中必须满足起始条件,即串行数据信号SDA首先由高变低,之后时钟信号也由高变低;当数据传输结束时则SDA首先由低变高,之后时钟信号也由低变高标志数据传输结束。

I2C总线以字节为单位进行处理,而对字节的数量则没有限制。I2C总线传输的第一个字节跟在数据起始之后,这个字节可以是7位从地址加一个读写位,也可以是8位数据。当读写位为1时,则主方从从设备读取数据,为0时则向所选从设备写数据。在应答模式下需要在每个字节之后附加一个应答位(ACK)。当使用10位寻址模式时,所传的第一个字节由11110加上地址的高两位和读写位组成,下一字节传输剩余的8位地址。下面分别给出了8位和10位寻址模式下的数据传输格式示意图。位寻址数据格式(8位)

位寻址数据格式(10位)

I2C总线的数据传输可以分成4种模式——主发送模式、主接收模式、从发送模式和从接收模式,接下来分别介绍这四种模式。(1)主发送模式:主发送模式支持7位和10位寻址模式,这时数据由主方送出,并且发送的数据同自己产生的时钟脉冲同步,而当一个字节已经发送走后需要DSP干预时,时钟信号保持低。(2)主接收模式:主接收模式也支持两种寻址方式。而当地址发送完后,数据线变为输入,而时钟仍然由主方产生。当一个字节传输完后需要DSP干预时,时钟保持低电平。在传输结束时由主方产生一个结束标志。(3)从接收模式:从接收模式的数据和时钟都由主方产生,但可以在需要DSP干预时使SCL信号保持低。(4)从发送模式:从发送模式只能由从接收模式转化而来,当在从接收模式下接收的地址同自己的地址相同时,并且读写位为1,则进入从发送模式。从发送模式时钟由主设备产生,从设备产生数据信号,但可以在需要DSP干预时使SCL信号保持低。

2.仲裁如果在一条总线上有两个或两个以上主设备同时开始一个主发送模式,这时就需要一个仲裁机制决定到底由谁掌握总线的控制权。仲裁是通过串行数据线上竞争传输的数据来进行判别的,总线上传输的串行数据流实际上是一个二进制数,如果主设备传输的二进制数较小,则仲裁器将优先权赋予这个主设备,没有被赋予优先权的设备则进入从接收模式,并同时将仲裁丧失标志置成1,并产生仲裁丧失中断。当两个或两个以上主设备传送的第一个字节相同,则将根据接下来的字节进行仲裁。

3.时钟产生和同步

正常状态下,只有一个主设备产生时钟信号,但如果有两个或两个以上主设备进行仲裁,这时就需要进行时钟同步。串行时钟线SCL具有线与的特性,这意味着如果一个设备首先在SCL线上产生一个低电平信号就将否决其他设备,这时其他设备的时钟发生器也将被迫进入低电平。如果有设备仍处在低电平,SCL信号也将保持低电平,这时其他结束低电平状态的设备必须等待SCL被释放后开始高电平状态。通过这种方法时钟得到同步。

4.I2C模块的中断和DMA同步事件

I2C模块可以产生5种中断类型以方便CPU处理,这5种类型分别是仲裁丧失中断、无应答中断、寄存器访问就绪中断、接收数据就绪中断和发送数据就绪中断。DMA同步事件有两种类型,一种是DMA控制器从数据接收寄存器ICDRR同步读取接收数据,另一种是向数据发送寄存器ICDXR同步写入发送数据。5.I2C模块的禁止与使能

I2C模块可以通过I2C模式寄存器ICMDR中的复位使能位(IRS)使能或被禁止。I2C时钟产生I2C时钟产生DSP时钟产生器从外部时钟源接收信号,产生I2C输入时钟信号。I2C模块内部,还要对这个输入时钟进行两次分频,产生主时钟和模块时钟。IPSCd0716大于15d的值取决于分频值IPSCIPSC:分频系数,在预分频寄存器(I2CPSC)中设置ICCL:在寄存器I2CCLKL中设置ICCH:在寄存器I2CCLKH中设置具体情况参看TMS320C55xDSPPeripheralsReferenceGuideI2C寄存器

下面给出I2C模块的寄存器表,并简要说明它们的功能。

I2C模块的寄存器

寄存器说明功能ICOARI2C自身地址寄存器保存自己作为从设备的7位或10位地址ICIMRI2C中断屏蔽寄存器设置中断类型是否屏蔽ICSTRI2C中断状态寄存器用来判定中断是否发生并可查询I2C的状态ICCLKLI2C时钟分频低计数器对主时钟分频,产生低速传输频率ICCLKHI2C时钟分频高计数器对主时钟分频,产生高速传输频率ICCNTI2C数据计数寄存器该寄存器被用来产生结束条件结束传输ICDRRI2C数据接收寄存器供DSP读取接收的数据

I2C模块的寄存器(续)

ICSARI2C从地址寄存器存放所要通信的从设备的地址ICDXRI2C数据发送寄存器供DSP写发送的数据ICMDRI2C模式寄存器包含I2C模块的控制位ICIVRI2C中断向量寄存器供DSP查询已经发生的中断ICGPIOI2C通用输入输出寄存器当I2C模块工作在通用IO模式下时控制SDA和SCL引脚ICPSCI2C预定标寄存器用来对系统时钟分频以获得12M时钟ICRSRI2C接收移位寄存器DSP无法访问ICXSRI2C发送移位寄存器DSP无法访问I2C自身地址寄存器(I2COAR)

I2C自身地址寄存器(I2COAR)是一个16-bit映射到DSP的I/O空间的寄存器。I2C模块用这个寄存器来指定自身的从设备地址,与I2C总线上其它设备区分开。如果选择7-bit寻址模式(I2CMDR中的XA=0),只用到I2COAR中的bit6~0,对bit9~7写0。bit域值说明15~10保留0读的返回值总是0,写无效9~0OAR00~7Fh000~3FFh7—bit寻址模式(I2MDR中XA=0)提供I2C模块7-bit的从地址,bit9~7写010—bit寻址模式(I2MDR中XA=1)提供I2C模块10-bit的从地址I2C从地址寄存器(I2CSAR)

I2C从地址寄存器是一个16-bitI/O映射寄存器,I2CSAR中的SAR域包含了一个7-bit或者10-bit的从地址。如果选择7-bit寻址模式(I2CMDR中的XA=0),只用到I2CSAR中的bit6~0,对bit9~7写0。bit域值说明15~10保留0读的返回值总是0,写无效9~0SAR00~7Fh000~3FFh7—bit寻址模式(I2MDR中XA=0)当I2C为主发送设备时,bit6~0提供7-bit的从设备地址,bit9~0写010—bit寻址模式(I2MDR中XA=1)当I2C为主发送设备时,bit9~0提供10-bit的从设备地址I2C预分频寄存器(I2CPSC)

I2C预分频寄存器(I2CPSC)是一个16-bitI/O映射寄存器,用来对I2C的输入时钟分频,获得期望的模块时钟。bit域值说明15~8保留0读的返回值总是0,写无效7~0IPSC00~7Fh00~FFhI2C的预分频值,它决定了怎样将CPU时钟分频,获得I2C模块时钟;模块时钟频率=I2C输入时钟频率/(IPSC+1)注意:当I2C复位时(I2CMDR中IRS=0),必须对IPSC初始化。预分频的频率只有在IRS变为1时才有效。IRS=1时,改变IPSC的值无效I2C时钟分频寄存器(I2CCLKL和I2CCLKH)(1)

当I2C模块是主设备时,需要对模块时钟进行分频,获得SCL引脚上的主时钟,主时钟的波形取决于两个分频值:I2CCLKL的ICCL:对于每个主时钟周期,ICCL决定信号电平为低的持续时间。I2CCLKH的ICCH:对于每个主时钟周期,ICCH决定信号电平为高的持续时间。I2C时钟分频寄存器(I2CCLKL和I2CCLKH)(2)bit域值说明15~0ICCL0000h~FFFFh时钟低电平时间分频值(1~65535)。为了产生主时钟的低电平持续时间,将模块时钟周期乘以(ICCL+d),d=5、6、7bit域值说明15~0ICCH0000h~FFFFh时钟高电平时间分频值(1~65535)。为了产生主时钟的低电平持续时间,将模块时钟周期乘以(ICCL+d),d=5、6、7I2C时钟低电平寄存器(I2CCLKL)的说明I2C时钟高电平寄存器(I2CCLKH)的说明7.3.2多通道缓存串口(MsBSP)

多通道缓存串口(MsBSP,multi-channelbufferedserialports)在C55xxDSP和系统中的其它器件间提供了一个直接的串行接口,它可以提供到其它C55xxDSPs、codecs和其它器件的接口。McBSP包括一个数据流通路和一个控制通路,通过7个引脚与外部设备连接。全双工通信;双缓冲数据寄存器,允许传送连续的数据流;独立的收发时钟信号和帧信号;可用128个通道进行收发;可与工业标准的编解码器、模拟接口芯片(AICs)以及其它串行A/D、D/A芯片直接接口连接;能够向CPU发送中断,向DMA控制器发送DMA事件;具有可编程的采样率发生器;可设置帧同步脉冲和时钟信号的极性;传输的字长可以是8位、12位、16位、20位、24位或32位;具有µ律和A律压缩扩展功能;可将McBSP引脚配置为通用输入输出引脚。McBSP组成框图

McBSP可以分为数据通道和控制通道两部分。数据发送引脚DX负责数据的发送,数据接收引脚DR负责数据的接收,发送时钟引脚CLKX、接收时钟引脚CLKR、发送帧同步引脚FSX和接收帧同步引脚FSR提供串行时钟和控制信号。CPU和DMA控制器通过外设总线与McBSP进行通信。当发送数据时,CPU和DMA将数据写入数据发送寄存器(DXR1,DXR2),接着拷贝到发送移位寄存器(XSR1,XSR2),通过发送移位寄存器输出至DX引脚。同样,当接收数据时,DR引脚上接收到的数据先移位到接收移位寄存器(RSR1,RSR2),接着拷贝到接收缓冲寄存器(RBR1,RBR2),RBR再将数据拷贝到数据接收寄存器(DRR1,DRR2)中,并通知串口事件通知CPU或DMA读取数据。这种多级缓冲方式使得片内数据通信和串行数据通信能够同时进行。McBSP

的框图RSR[1,2]XSR[1,2]RBR[1,2]DRR[1,2]DXR[1,2]8RCERs2MCRsPCR2SRCRs2XCRs2RCRs2SPCRs8XCERsMcBSPExandCompressCompand数据、时钟、帧同步控制和监测寄存器多通道控制和监测寄存器DRDXCLKXCLKRFSXFSRCLKSXEVTAREVTAXEVTREVTXINTRINT16位外设总线引脚到CPU的中断到DMA控制器的同步事件McBSPMulti-ChannelBufferedSerialPort(McBSP)DRRXSRDXREventCPUDMARBRRSRClock&FrameControlMulti-ChannelControlRINTXINT全双工串行口最大传输速率(Maxbitrate):1/2CPUClockRateWordlength:8-,12-,16-,20-,24-,32-bitFramelength(betweenFS):1-128wordsLet’sseeanexample...DRDXCLKRCLKXFSRFSXDataBusDMABusMcBSP-ExampleDCLKFSA/Dw0w1w15...Problem:transfer1616-bitwordstoSARAM,ext’lCLK/FS,noCPUintPCR10CLKRMFSRM0150-external

1-internal80-external

1-internalSPCR541RRDYRINTM015CPUinterrupt?DRRready?(notused)(notused)RCR8RWDLEN10158/12/16/20/24/3251-128RFRLEN1714(16)(16)Operation-Bit/CLKRshiftedintoRSR-RSRRBR-RBRDRR(RRDY=1)-REVTsynceventactivates

DMA(noMcBSPsetup)-DMAtransfersDRR

toSARAM…repeatDRCLKRFSRMcBSPDRRREVTDMA01...15SARAM时钟和成帧数据(1)数据的移动,是每次从DR引脚移动1bit到RSR或者从XSR移动1bit到DX引脚。传输每一位的时间,由时钟信号的上升沿或下降沿控制。数据bit组成一个串行字,在移位寄存器和数据引脚之间传送。用户可以自定义串行字中的bit数。一个或多个串行字组成帧,同样,用户可以自定义每帧包含多少个字。一个帧的所有字节都连续传送,但是帧和帧之间可以有停顿。McBSP使用帧同步信号来控制帧的发送和接收。McBSP允许用户将帧配置成一段或者是两段以求达到最高的传输速率。表3.14说明了接收控制寄存器(RCR1和RCR2)以及发送控制寄存器(XCR1和XCR2)里决定每帧的段数、每段的字数、每字的位数的bit域。每帧最多可以有4096位时钟和成帧数据(2)操作段数每帧的字数每字的bit数接收1(RPHASE=0)RFRLEN1RWDLEN1接收2(RPHASE=1)RFRLEN1和RFRLEN2段1为RWDLEN1段2为RWDLEN2发送1(XPHASE=0)XFRLEN1XWDLEN1发送2(XPHASE=1)XFRLEN1和XFRLEN2段1为XWDLEN1段2为XWDLEN2McBSP接收数据流程(1)McBSP接收数据流程(2)(1)McBSP等待内部FSR上的接收帧同步脉冲信号;(2)帧同步脉冲到达时,根据RCR2中RDATDLY位的设置,插入适当的数据延迟。(上图中为1bit数据延迟)(3)McBSP接收DR引脚上的数据bits,并将其移送到接收移位寄存器。如果字长等于或小于16bits,只用RSR1。如果字长大于16bits,则要使用RSR2和RSR1,且RSR2中是高位数据。(4)当接收到一个完整的字,如果RBR1为空,则将数据复制到接收缓存寄存器。(5)如果DRR1没有被前面的数据占满,McBSP将RBR中的数据复制到DRR。当DRR1接收到新的数据,SPCR1里面的就绪位置位,表示数据已经准备好,可以读取。(6)CPU或DMA控制器从数据接收寄存器读取数据。当DRR1被读取,RRDY清0,开始下一个RBR到DRR的复制。McBSP发送数据流程(1)McBSP发送数据流程(2)(1)CPU或DMA控制器将数据写到数据发送寄存器。数据写到DXR1以后SPCR2中的发送就绪位XRDY清0,表示DXR1不能接收新的数据。如果字长大于16bit,则要使用DXR2和DXR1,DXR2中是高位。(2)DXR1接收到一个新的数据,McBSP将DXR的数据复制到发送移位寄存器。发送就绪bit(XRDY)置位,表示发送器已经准备好从CPU或着DMA控制器接收数据。(3)McBSP等待FSX引脚上的发送帧同步信号。(4)McBSP根据XCR2中XDATDLY位的设置,插入适当的数据延迟。(5)McBSP将发送移位寄存器的数值移位到DX引脚。McBSP的采样率发生器McBSP包括一个采样率发生器SRG,用于产生内部数据时钟CLKG和内部帧同步信号FSG,如图所示。CLKG控制DR上数据的移位和DX上的数据发送;FSG控制DR和DX上的帧同步。采样率发生器的时钟源可以由CPU时钟或外部引脚(CLKS,CLKX或CLKR)提供,时钟源的选择可以通过引脚控制寄存器PCR中的SCLKME字段和采样率发生寄存器SRGR2中的CLKSM字段来确定,参见下表。输入信号的极性由SRGR2中的CLKSP字段、PCR中的CLKXP字段或CLKRP字段确定。采样率发生器输入时钟选择SCLKMECLKSM输入时钟00CLKS引脚上的信号作为输入时钟01CPU时钟10CLKR引脚上的信号作为输入时钟11CLKX引脚上的信号作为输入时钟采样率发生器输入时钟极性选择输入时钟极性选择说明CLKS引脚CLKSP=0CLKSP=1CLKS为正极性,上升沿有效CLKS为负极性,下升沿有效CPU时钟正极性CPU时钟为正极性,上升沿有效CLKR引脚CLKRP=0CLKRP=1CLKR为正极性,上升沿有效CLKR为负极性,下升沿有效CLKX引脚CLKXP=0CLKXP=1CLKX为正极性,上升沿有效CLKX为负极性,下升沿有效1.采样率发生器的输出时钟和帧同步信号

输入的时钟经过分频产生SRG输出时钟CLKG。分频值由采样率发生寄存器SRGR1中的CLKGDV字段确定:所以输出的最高时钟频率是输入时钟频率的一半。当CLKGDV是奇数时,CLKG的占空比是50%,当CLKGDV是偶数2p时,CLKG高电平持续时间为p+1个输入时钟周期,低电平持续时间为p个输入时钟周期。

帧同步信号FSG由CLKG进一步分频而来,分频值由采样率发生寄存器SRGR2中的FPER字段决定:

帧同步脉冲的宽度由采样率发生寄存器SRGR1中的FWID字段决定:2.同步

SRG的输入时钟可以是内部时钟,即CPU时钟,也可以是来自CLKX、CLKR和CLKS引脚的外部输入时钟。当采用外部时钟源时,一般需要同步,同步由采样率发生寄存器SRGR2中的字段GSYNC控制。当GSYNC=0时,SRG将自由运行,并按CLKDV、FPER和FWID等参数的配置产生输出时钟;当GSYNC=1时,CLKG和FSG将同步到外部输入时钟。多通道模式选择

McBSP属于多通道串口,每个McBSP最多可有128个通道。如图5-17所示,其多通道选择部分由多通道控制寄存器MCR、接收使能寄存器RCER和发送使能寄存器XCER组成。其中,MCR可以禁止或使能全部128个通道,RCER和XCER可以分别禁止或使能某个接收或发送通道。每个寄存器控制16个通道,因此128个通道共有8个通道使能寄存器。1.接收多通道选择接收多通道的选择由MCR1中的RMCM位确定:当RMCM=0,所有128接收通道使能且不能被禁止。当RMCM=1,接收多通道选择模式使能。在这种情况下:通道可以独立地被使能或禁止,使能通道的选择由接收通道使能寄存器RCER确定。如果某个接收通道被禁止,在这个通道上接收的数据只传输到接收缓冲寄存器RBR中,并不拷贝到DRR,因此不会产生DMA同步事件。2.发送多通道选择发送多通道的选择由MCR2中的XMCM字段确定:当XMCM=00b,所有128发送通道使能且不能被屏蔽;当XMCM=01b,由发送使能寄存器XCER选择通道,如该通道没有被选择则该通道被禁止;当XMCM=10b,由XCER寄存器禁止通道,如果该通道没有被禁止则通道使能;当XMCM=11b,所有通道被禁止用,而只有当对应的接收通道使能寄存器RCER使能时发送通道才被使能,当该发送通道使能时,由XCER寄存器决定该通道是否被屏蔽。McBSP寄存器McBSP的寄存器主要包括3部分:收发通道寄存器、时钟和帧同步寄存器、多通道选择寄存器。

1.收发通道寄存器收发通道中CPU或DMA控制器可以访问的寄存器包括数据接收寄存器DRR和数据发送寄存器DXR。由于McBSP支持8、12、16、20、24或32位的字长,当字长等于或小于16位,只使用DRR1/DXR1,当字长超过16位,DRR1/DXR1存放低16位,DRR2/DXR2存放其余数据位。2.时钟和帧同步寄存器

时钟和帧部分寄存器主要用于控制时钟和帧同步信号的产生、收发数据帧格式和串口状态的检测等。(1)串口控制寄存器

每个McBSP有两个串口控制寄存器SPCR1和SPCR2,用于控制McBSP的工作模式、检测收发操作的状态和对McBSP的各部分复位。

串口控制寄存器SPCR1位字段复位值说明15DLB0数字回环模式使能,0:禁止,1:使能14-13RJUST00接收数据符号扩展和调整方式12-11CLKSTP00时钟停止模式10-8Reserved保留7DXENA0DX引脚延时使能6Reserved0保留5-4RINTM00接收中断模式3RSYNCERR0接收帧同步错误标志2RFULL0接收过速错误标志1RRDY0接收就绪标志0RRST0接收器复位串口控制寄存器SPCR2位字段复位值说明15-10Reserved0保留9FREE0自由运行(在高级语言调试器中遇到断点时的处理方式)8SOFT0软停止(在高级语言调试器中遇到断点时的处理方式)7FRST0帧同步逻辑复位6GRST0采样率发生器复位5-4XINTM00发送中断模式3XSYNCERR0发送帧同步错误标志2XEMPTY0发送寄存器空标志1XRDY0发送就绪标志0XRST0发送器复位(2)收发控制寄存器每个McBSP有两个接收控制寄存器RCR1和RCR2以及两个发送控制寄存器XCR1和XCR2,用于选择或使能数据延时和帧同步忽略等参数。

收(发)控制寄存器R(X)CR1位字段复位值说明15Reserved0保留14-8R(X)FRLEN10接收(发送)阶段1的帧长(1-128个字)7-5R(X)WDLEN10接收(发送)阶段1的字长4-0Reserved0保留收(发)控制寄存器R(X)CR2位字段复位值说明15R(X)PHASE0接收(发送)帧的阶段数14-8R(X)FRLEN20接收(发送)阶段2的帧长7-5R(X)WDLEN20接收(发送)阶段2的字长4-3R(X)COMPAND0接收(发送)数据压扩模式2R(X)FIG0忽略不期望的收(发)帧同步信号1-0R(X)DATDLY0接收(发送)数据延时(3)采样率发生寄存器每个McBSP有两个采样率发生寄存器SRGR1和SRGR2,用于选择与时钟和帧同步有关的参数。

采样率发生器SPGR1位字段复位值说明15-8FWID00000000帧同步信号FSG的脉冲宽度7-0CLKGDV00000001输出时钟信号CLKG的分频值采样率发生器SPGR2位字段复位值说明15GSYNC0时钟同步模式14CLKSP0CLKS引脚极性13CLKSM1采样率发生器时钟源选择12FSGM0采样率发生器发送帧同步模式11-0FPER0FSG信号帧同步周期数(4)引脚控制寄存器

每个McBSP有一个引脚控制寄存器PCR,用于McBSP省电模式控制和接收(发送)帧同步模式的选择等。

引脚控制寄存器PCR位字段数值说明15Reserved保留位14IDLEEN省电使能13XIOEN发送GPIO使能12RIOEN接收GPIO使能11FSXM01发送帧同步模式由FSX引脚提供由McBSP提供10FSRM01接收帧同步模式由FSR引脚提供由SRG提供引脚控制寄存器PCR(续)9CLKXM发送时钟模式(发送时钟源、CLKX的方向)8CLKRM接收时钟模式(接收时钟源、CLKR的方向)7SCLKME采样率发生器时钟源模式6CLKSSTAT01CLKS引脚上的电平低电平高电平5DXSTAT01DX引脚上的电平低电平高电平4DRSTAT01DR引脚上的电平低电平高电平3FSXP发送帧同步极性2FSRP接收帧同步极性1CLKXP发送时钟极性0CLKRP接收时钟极性3.多通道选择寄存器多通道选择寄存器包括多通道控制寄存器和收发通道使能寄存器。(1)通道控制寄存器

每个McBSP有两个多通道控制寄存器MCR1和MCR2,用于使能所有通道和选择通道等

多通道控制寄存器MCR1位字段数值说明15-10Reserved保留位9RMCME01接收多通道使能使能32个通道使能128个通道8-7RPBBLK接收部分B块的通道使能6-5RPABLK接收部分A块的通道使能4-2RCBLK接收部分的当前块,表示正在接收的是哪个块的16个通道1Reserved保留位0RMCM01接收多通道选择使能128个通道使能选定的通道多通道控制寄存器MCR2位字段数值说明15-10Reserved保留位9XMCME01发送多通道使能,使能32个通道,使能128个通道8-7XPBBLK发送部分B块的通道使能6-5XPABLK接收部分A块的通道使能4-2XCBLK发送部分的当前块,表示正在发送的是哪个块的16个通道1-0XMCM发送多通道选择,使能全部通道或使能选定的通道(2)收发通道使能寄存器

每个McBSP有8个接收通道使能寄存器RCERA到RCERH和8个发送通道使能寄存器XCERA到XCERH

15141312111098RCE15RCE14RCE13RCE12RCE11RCE10RCE9RCE876543210RCE7RCE6RCE5RCE4RCE3RCE2RCE1RCE0接收通道使能寄存器(RCERA-RCERH)发送通道使能寄存器(XCERA-XCERH)15141312111098XCE15XCE14XCE13XCE12XCE11XCE10XCE9XCE876543210XCE7XCE6XCE5XCE4XCE3XCE2XCE1XCE07.4软件设计配置时钟发生器(1)

Step1.要正确配置DSP的时钟发生器,产生DSP工作的正常时钟频率。这一个步骤的关键就是数字琐相环PLL的应用。为了能够可以在程序中改变DSP的工作频率,必须通过设置时钟发生器的设置模式寄存器CLKMD中的倍频值PLLMULTbit和分频值PLLDIVbit,使PLL工作在锁定模式下。而在进入锁定模式之前,必须使屏蔽PLL,使时钟发生器工作在旁路模式,才能改变PLLMUTLbit和PLLDIVbit的值,达到我们分频和倍频的目的。配置时钟发生器(2)关闭PLL,时钟发生器进入旁路模式,PLL开始琐相过程ClearMask(pCMOD->clkmd,CLKMD_PLLENABLE);while(ReadMask(pCMOD->clkmd,CLKMD_LOCK));置CLKMD中的相应标志位

ClearMask(pCMOD->clkmd,CLKMD_IAI);

SetMask(pCMOD->clkmd,CLKMD_IOB|CLKMD_BREAKLN);设置倍频值和分频值WriteMask(pCMOD->clkmd,CLKMD_PLLDIV_1|CLKMD_BYPASSDIV_1,CLKMD_PLLDIV_MASK|CLKMD_BYPASSDIV_MASK);WriteField(pCMOD->clkmd,dspclk.pllmult,CLKMD_PLLMULT_MASK);使能PLL,PLL工作在锁定模式SetMask(pCMOD->clkmd,CLKMD_PLLENABLE);while(!ReadMask(pCMOD->clkmd,CLKMD_LOCK));输出频率=[PLLMULT/(PLLDIV+1)]×输入时钟频率时钟发生器工作在锁定模式输出频率=(PLLMULT/(PLLDIV+1))×输入时钟频率PLLMULTPLLDIV输出频率31031×输入时钟频率1015×输入时钟频率222/3×输入时钟频率231/2×输入时钟频率选择锁定模式频率的例子配置时钟发生器(3)例:C55x的片内振荡时钟电路产生12MHz的脉冲,CPU工作频率是36MHz。通过配置时钟发生器在锁定模式下的参数来实现倍频。36MHz=(PLLMULT/(PLLDIV+1))×12MHz则:PLLDIV=1,PLLMULT=6配置时钟发生器(4)配置I2C模块(1)Step2

初始化I2C模块,为DSP向AIC23传送控制命令做好准备。这一步的主要工作是配置I2C模块相应的标志位,使I2C模块工作在我们期望的状态下。比如要通过设置I2C模块的预分频寄存器得到12M的工作频率;配置I2C模块的自身地址寄存器和从地址寄存器,使I2C模块工作在主模式,并得到在总线上的主设备和从设备的地址,位数据传输做好准备。最后,使I2C模块跳出复位状态,开始工作.配置I2C模块(2)首先,使I2C模块复位

ClearMask(pI2C->icmdr,ICMDR_IRS);设置预分频器,得到I2C模块时钟

pI2C->icpsc=dspclk.pllmult;对时钟寄存器ICCLKH和ICCLKL编程,得到I2C模块的串口时钟SCL

Write(pI2C->icclkl,10);Write(pI2C->icclkh,10)分别将I2C模块自身地址写入ICOAR寄存器,从机地址写入ICSAR寄存器,为主/从设备在总线上的数据传输做好准备

WriteMask(pI2C->icoar,ICOAR_OADDR,ICOAR_MASK_7)最后使I2C模块跳出复位状态

SetMask(pI2C->icmdr,ICMDR_IRS|ICMDR_MST);配置McBSP(1)

Step3.配置DSP的MCBSP。在这里,最主要的工作是设定数据传输的格式。在本系统中,设定了传输的帧格式为32bit的单段帧,传输中没有插入延迟位。这可以通过设置接收控制寄存器(RCR1和RCR2)以及发送控制寄存器(XCR1和XCR2)中相应的bit域来实现。比如XPHASE决定发送时采用的帧格式是单段帧还是双段帧,RWDLEN决定接受数据时每帧的字节数等等。配置McBSP(2)令MCBSP复位

Write(pMCBSP0->spcr1,0);Write(pMCBSP0->spcr2,0);设置帧格式

Write(pMCBSP0->xcr1,XWDLEN1_32);Write(pMCBSP0->xcr2,XPHASE_SINGLE|XDATDLY_0);Write(pMCBSP0->rcr1,RWDLEN1_32);Write(pMCBSP0->rcr2,RPHASE_SINGLE|RDATDLY_0);将MCBSP退出复位状态

SetMask(pMCBSP0->spcr2,SPCR2_XRST);SetMask(pMCBSP0->spcr1,SPCR1_RRST);AIC23的寄存器编程(1)定义AIC23的写入函数voidAIC23_Write(unsignedshortregaddr,unsignedshortdata){unsignedcharbuf[2];buf[0]=regaddr;buf[1]=data;I2C_Write(I2C_AIC23,2,buf);}初始化I2C模块I2C_Init()初始化AIC23AIC23_Write(AIC23_RESET_REG,0);打开所有的电源AIC23_Write(AIC23_POWER_DOWN_CTL,0);选择麦克风输入,增益为20db

AIC23_Write(AIC23_ANALOG_AUDIO_CTL,ANAPCTL_DAC|ANAPCTL_INSEL);AIC23的寄存器编程(2)禁止ADC滤波器AIC23_Write(AIC23_DIGITAL_AUDIO_CTL,0);禁止立体声输入,采用麦克风输入AIC23_Write(AIC23_LT_LINE_CTL,0x000);AIC23_Write(AIC23_RT_LINE_CTL,0x000);配置AIC23为主模式,16bit采样AIC23_Write(AIC23_DIGITAL_IF_FORMAT,DIGIF_FMT_MS|DIGIF_FMT_IWL_16|DIGIF_FMT_FOR_DSP);AIC23_Write(AIC23_SAMPLE_RATE_CTL,SRC_SR_44|SRC_BOSR|SRC_MO);打开耳机音量和数字接口激活AIC23_Write(AIC23_LT_HP_CTL,0x07f);//0x79forspeakersAIC23_Write(AIC23_RT_HP_CTL,0x07f);AIC23_Write(AIC23_DIG_IF_ACTIVATE,DIGIFACT_ACT);AIC23的寄存器编程(3)注意:(1)在写过一次I2C地址后,只能对一个寄存器进行写操作,而不能一次性对所有寄存器进行写操作。也就是说,对每个寄存器写之前都要按部就班的写一遍I2C。(2)I2C模式下,数据是分为三个8bit写入的。而TLV320AIC23有7位地址和9位数据,也就是说,需要把数据项上面的最高位补充到第二个8bit中的最后一位。(3)在对控制寄存器的编程过程中,对应于每一次工作状态的改变,不能仅仅修改某个寄存器的值,而是要对这十个寄存器都重新写入一遍,否则系统将无法正常工作,而且应首先写Rgister10,同时还应对所有寄存器进行复位处理。实验过程

所有的配置工作完成以后,AIC23和DSP就可以正常工作,开始进行数据通信。置MCBSP的串口控制寄存器SPCR2中的XRDYbit和RRDY为0,表示已经准备好发送数据和接收数据.当CPU轮询到此标志位,就开始和AIC23开始通过MCBSP实现串行数据通信。接收到的数据被保存到预先开辟的RAM存储,再通过MCBSP传送给AIC23,完成声音的输出。实验结果输入波形是麦克风输入吹气的“呼呼”声。参数选取:实验程序采用64阶滤波参数,低通滤波,汉明窗(HammingWindow)函数,截止频率为2400Hz,采样频率为48000Hz,增益40dB。FIR低通滤波器设计DSP算法库函数的调用

1、设计FIR低通滤波器的参数(audio.h)2、配置DSP库

调用DSP库函数

fir2(x,h,r,db,NX,HX)

3、低通滤波后数据输出将经过滤波后的数据送右声道输

Write(pMCBSP0->dxr2,r[NX-1]);

fir2滤波器结构

fir2(x,h,r,db,NX,HX)调用于dsplib.h中函数ushortfir2(DATA*x,DATA*h,DATA*r,DATA*dbuffer,ushortnx,ushortnh);其中x[nx]:指向原始输入数据的指针h[nh]:指向滤波器系数指针 r[nx]:指向滤波输出数据的指针buffer[nh+2]:指向延时缓存的长度 nx:输入数据的数量 nh:滤波器的阶数具体情况参看TMS320C55xDSPLibraryProgrammer’sReferenceDSP库函数的配置其中DSP算法库主要包括:

dsplib.h55xdsp.lib55xdsp.src

要使编译时能链接此函数库,在工程BuildOption选项进行设置库文件及所在路径。注意:调用DSP库必先熟悉库中函数的算法,结构,及使用范围,才能真正使用库函数。滤波器参数的频域能量显示,它是一个参数较优的低通滤波器,截止频率在2437左右。

调用dsplib中的函数fir2从输入和输出音频数据的频域上可以看出,输出音频的高频部分被较好地滤除了。从时域图也可发现,输出波形去掉了输入波形的震动较快的成分,显示为较平滑的输出。voidAIC23_Mixer(){PC55XX_MCSPpMCBSP0=(PC55XX_MCSP)C55XX_MSP0_ADDR;intleft,right;int*pl,*pr,nAudioCount;inti;

pAudioLeft=pl=(int*)AUTIODATALEFT; pAudioRight=pr=(int*)AUTIODATARIGHT; nAudioCount=0;for(i=0;i<NX;i++)x[i]=0;for(i=0;i<NH+2;i++)db[i]=0;while(1){while(!ReadMask(pMCBSP0->spcr2,SPCR2_XRDY)); //等待数据传输完成(*pl)=left=Read(pMCBSP0->ddr1); //读入左声道数据right=Read(pMCBSP0->ddr2); //读入右声道数据x[NX-1]=left/16; //防止滤波时数据溢出fir2(x,h,r,db,NX,NH); //调用滤波程序计算当前输出 (*pr)=r[NX-1]; //数组r的最后一个单元为当前输出Write(pMCBSP0->dxr1,left); //将原始数据送左声道输出//Write(pMCBSP0->dxr1,r[NX-1]); //将原始数据送左声道输出Write(pMCBSP0->dxr2,r[NX-1]); //将经过滤波后的数据送右声道输出nAudioCount++;pl++;pr++; //循环使用缓冲区if(nAudioCount>=1024){ nAudioCount=0; //breakpoint pl=pAudioLeft; pr=pAudioRight;}for(i=0;i<NX-1;i++) //重新调整输入序列(供fir2使用){ x[i]=x[i+1];}}}7.5系统展望

系统也有需要进一步改进的地方,比如可以利用DSP的MCBSP实现RS-232协议从而跟PC机的串口通信,将语音数据存储到PC机中,实现声音的录放功能。另外,如果把G.723.1的编解码算法移植到DSP算法处理中,则完全可以把该模块嵌入到网络会议的可视电话中作为语音处理模块。这些都是今后进一步探索研究的方向。德州仪器的TMS320C55xDSPLIB是专门针对TMS320C55x系列处理器开发的数字信号处理函数库,它包括50个经过汇编级优化的数字信号处理函数,这些函数可由C调用。7.6C55x处理器的数字信号处理库和图像、视频处理库7.6.1C55x的数字信号处理库7.6.1C55x的数字信号处理库数字信号处理函数库主要包含以下8种类型:快速傅里叶变换

滤波与卷积

自适应滤波

相关

数学运算三角函数

其他运算矩阵数字信号处理库可以从网站下载,下载的文件是一个自解压文件55xdsplib.exe,解压之后生成一个dsplib目录,用户可以把这个目录及目录下的全部内容复制到…\ti\c5500\cgtools\lib目录下。

数字信号处理库由头文件dsplib.h,目标库55xdsp.lib,源文件库55xdsp.src和在55x_test子目录下的示例程序和链接命令文件等组成。

7.6.1C55x的数字信号处理库

函数中参数的传递大多采用数组的形式,其中数组成员都在内存中连续保存;

7.6.1C55x的数字信号处理库矩阵库函数中主要的数据类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论