TMS320VC5402 DSP与ISD4004语音录放芯片_DSP论文
关键词:dsp 语音录放芯片 isd4004 spi接口 mat
许多类型的语音录放应用要求具备信息管理的功能,即能够随着地录、放、删除任意一段信息。而许多语音录放系统并不能很好地满足这种要求,如磁带录音系统。isd4004语音录放芯片提供了spi微控制器接口,使得语音录放的信息管理成为可能。本文将详细阐述tms320vc5402 dsp与isd4004的spi接口设计及其控制操作,同时设计适合应用的管理方法。
isd4004语音录放芯片工作电压为3v,单片录放时间为8~16分钟。芯片设计使得所有操作必须由微控制器控制,操作命令可通过串行通信接口spi送入。芯片采用多电平直接模拟量存储技术,每个采样值直接存储在片内内烁存储器中,因此能够非常真实、自然地再现语音、、音调和效果声。采样频率可为4.0k、5.3k、6.4k、8.0khz,频率越低,录放时间越长,但音质有所下降。
tms320vc5402是美国ti(德州仪器)公司推出的一款高性能的定点dsp,最高频率为100mhz,内部提供16k的存储空间。它提供的多信道缓冲串口(mcbsp)可以设置为spi工作方式,从而使得dsp与isd4004的接口设计成为可能。
1 接口设计
dsp作为spi(串行外设接口)的主器件(master),负责为isd4004提供串行时钟、片选信号以及控制isd4004的动作信号。接口电路如图1所示。
1.1 spi
spi协议是一个同步串行数据传输协议,协议假定微控制器的spi移位寄存器在sclk的下降沿动作。isd4004工作于spi工作模式。因此对于isd4004而言,在时钟上升沿锁存mosi引脚的数据,在下降沿将数据送至miso引脚。isd4004与dsp通讯协议的具体内容如下:
(1)所有串行数据传输开始于ss下降沿。
(2)ss在数据传输期间必须保持低电平,在两条指令之间则保持高电平。
(3)数据在时钟上升沿移入,在下降沿移出。
(4)ss变低时,输入指令和地址后,isd才能开始录放操作。
(5)指令格式是8位控制码加16位地址码。
(6)isd的任何操作(含快进)如果遇到eom(结束标志)或ovf(溢出),则产生一个中断,该中断状态在下一个spi周期开始时被清除。
(7)使用“读”指令使中断状态位移出isd的miso引脚时,控制及地址数据也应同步从mosi端移入。因此要注意移入的数据是否与器件当前进行的操作兼容。
(8)所有操作在运行位(run)置“1”时开始,置“0”时结束。
(9)所有指令都在ss上升沿开始执行。
1.2 isd4004与dsp的spi时序配合
根据isd4004的时序要求,dsp设置串口为spi工作模式,发送数据先于串行时钟半个周期建立、数据在时钟上升沿发送。由图2可知,isd接收命令字的方式是先地址后命令,且位序从低到高;而dsp发送数据方式是先高位后低位,故在dsp发送程序中须将待送地址和命令进行高低位对调。
图2 isd控制命令字时序图
串行时钟(sclk)由dsp主时钟产生。在dsp运行于10mhz时,设置时钟分频因子为255,得到约40khz的串行传输时钟,适应isd4004相对慢速的要求。dsp串口spi方式数据传输时序如图3所示。
isd4004的rac管脚(行地址时钟)用于指示录放操作已经接近一行的末发展。rac在行末前25ms变低,在到达行末时变高,dsp将它作为中断int3的中断源,指示录放操作进行到何处;int管脚在遇到eom标志和ovf溢出时向dsp发中断,dsp将它作中断int2的中断源,用来指示是否到达一段的末尾。按下num键触发int1中断开始录音,按下stop键触发int0中断终止录音。放音时按下num即开始,遇以语句eom时自动停止放音。
1.3 接口软件设计
dsp对isd的控制是通过spi接口实现的,因此dsp的mcbsp必须设置为符合isd控制命令时序要求的spi工作模式。下程序段完成了mcbsp的spi模式设置(单帧数据为24bit,串行时钟上升沿发送数据,时钟频率为40khz):
stm spcr1,mcbsp1_spsa
stm #0000h,mcbsp1_spsd ;reset接收
stm spcr2,mcbsp1_spsa
stm #0000h,mcbsp1_spsd ;reset发送
stm spcr1,mcbsp1_spsa
stm #1800h,mcbsp1_spsd ;clkstp=11,数据提前半个周期
stm rcr1,mcbsp1_spsa
stm #0080h,mcbsp1_spsd ;rwdlen1=100,每帧数据24bit
stm rcr2,mcbsp1_spsa
stm #0001h,mcbsp1_spsd ;rdatdly=01
stm xcr1,mcbsp1_spsa
stm #0080h,mcbsp1_spsd ;xwdlen1=100,发送数据每帧24bit
stm xcr2,mcbsp1_spsa
stm #0001h,mcbsp1_spsd
stm srgr1,mcbsp1_spsa
stm #00ffh,mcbsp1_spsd ;clkgdv=0xff,spi的时钟=dsp时钟/256
stm srgr2,mcbsp1_spsa
stm #2000h,mcbsp1_spsd
stm pcr,mcbsp1_spsa
stm #0a08h,mcbsp1_spsd ;clkxp=0,clkxm=1,fsxm=1,fsxp=1
stm spcr2,mcbsp1_spsa
stm #0040h,mcbsp1_spsd ;grst=1
nop
nop ;等待两个周期
stm spcr1,mcbsp1_spsa
stm #1801h,mcbsp1_spsd ;设定rrst=1,开始接收数据
stm spcr2,mcbsp1_spsa
stm #0041h,mcbsp1_spsd ;设定xrst=1,开始发送数据
dsp中断服务程序、命令字发送程序以及管理程序在此不多述。
2 管理
在采用本模块的拟人机器人语言交互系统中,若干条语音按顺序分别被录入到芯片,并将期编程为1、2、3等。dsp可以通过spi接口获得每次录音结束时的isd内部信息指针,据此构建一个信息地址表(mat),并将此表存入flash memory中,作为以后录放、删除操作时管理的依据。
isd4004内部存储器分为2400行,每行1600列。对器件寻址即选择一行,从行首开始录放,而每行中的列不可寻址。对于8khz采样率的isd4004,采样间隔为125μs。器件地址分辨率可按如下计算:
(1/fs)×1600=200ms
2.1 mat
由于isd4004内部可寻址多达2400行,而每行固定存储200ms语音,为了可录放、删除任意长度的语音,有必要建立mat。mat跟踪每一条语音的开始地址以及每一个碎块的开始结束地址。isd4004共2400行,实际只需要12位地址即可完成寻址。为节省mat存储空间,将地址最高位bit15作为语音起始点标志。建立mat的规则如下:
(1)mat表项值全为0(0000 0000 0000 0000):表示对应行未存储任何语音;
(2)mat表项值的bit15为1(1xxx xxxx xxxx xxxx),表示对应的是某句语音的起始行;
(3)mat表项值的bit15为0,其余各位是有效地址(0xxx xxxx xxxx xxxx),表示对应的行是某句语音的一行,但不是起始行;
(4)isd的第一行总是某句语音的起始行。
同一句语音的地址在mat中总是连续存储的。由若干行组成的句语音,它的各行地址总是从小到大,但不一定两两相连。以行地址为表项的mat,所要求的存储空间是较大的。本例中为2400行语句,则要求mat具有2400个表项。为了减小mat大小,也可对语音进行分块。若8以位为一个语音块,则mat大小减小为300个表项。经过几次录音和删除手,建立的mat如表1所示。
表1 mat实例
mat | bit15 | 实际行地址 | 句 |
1000 0000 0000 0000 | 1 | 0000 0000 0000 0000 | 1 |
0000 0000 0000 0001 | 0 | 0000 0000 0000 0001 | |
0000 0000 0000 0002 | 0 | 0000 0000 0000 0002 | |
1000 0000 0000 0003 | 1 | 0000 0000 0000 0003 | 2 |
0000 0000 0000 0005 | 0 | 0000 0000 0000 0005 | |
0000 0000 0000 0006 | 0 | 0000 0000 0000 0006 | |
1000 0000 0000 0004 | 1 | 0000 0000 0000 0004 | 4 |
0000 0000 0000 0007 | 0 | 0000 0000 0000 0007 | |
0000 0000 0000 0008 | 0 | 0000 0000 0000 0008 |
2.2 管理操作
放音时,dsp从mat表头开始搜索bit15为1的表项。要播放第几条语句,则寻找第几个bit15为1的表项。由于rac的周期和器件的行相同,且其低脉冲时间长达25ms,在播放当前行语音的同时,rac触发dsp的int3中断。int3中断服务程序验证下一行bit15是否为1,若不为1则将该行地址送入isd,则输入的地址不会立刻生效,而是在缓冲器中等待当前结束;若为1则指示下一行为新语句开始地址,dsp不送任何指令。放音遇到eom或者ovf时产生int中断,停止放音。
录音时,按num键启动录音操作,dsp首先找出mat中的个全0行,发录音指令;在录制当前行的同时,dsp等待rac信号触发int3中断,中断服务程序继续寻找全0行、发带该行地址的录音指令,直到按stop键触发int0中断发录音停止命令为止。删除语音可通过将相应语音行全置零来完成。
本文详细阐述了tms320vc5402 dsp与isd4004语音录放芯片的spi接口设计、isd4004的语音管理以及dsp与isd4004之间的通讯与控制程序算法的设计。该模块作为拟人机器人语音互系统的语音应答模块,可以对机器人识别的命令语音进行相应的实时应答。