TMS320VC5402 DSP与ISD4004语音录放芯片的SPI接口设计

[复制链接]
741|6
手机看帖
扫描二维码
随时随地手机跟帖
FCCdsp|  楼主 | 2017-2-17 21:13 | 显示全部楼层 |阅读模式
TMS320VC5402 DSP与ISD4004语音录放芯片的SPI接口设计


关键字: Flash接口技术 信号处理平台 软件锁相环 脉压处理平台 视频输入理器
内容摘要:根据语音录放芯片ISD4004的接口特点,设计了其与TMS320VC5402 DSP的SPI接口电路。完成了DSP对ISD芯片的通讯与接口控制编程,并给出了实际应用中的一种ISD4004信息管理方法:信息地址表(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 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发送程序中须将待送地址和命令进行高低位对调。
  串行时钟(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_SPSAstm #0000h,McBSP1_SPSD ;Reset接收stm SPCR2,McBSP1_SPSAstm #0000h,McBSP1_SPSD ;Reset发送stm SPCR1,McBSP1_SPSAstm #1800h,McBSP1_SPSD ;CLKSTP=11,数据提前半个周期stm RCR1,McBSP1_SPSAstm #0080h,McBSP1_SPSD ;RWDLEN1=100,每帧数据24bitstm RCR2,McBSP1_SPSAstm #0001h,McBSP1_SPSD ;RDATDLY=01stm XCR1,McBSP1_SPSAstm #0080h,McBSP1_SPSD ;XWDLEN1=100,发送数据每帧24bitstm XCR2,McBSP1_SPSAstm #0001h,McBSP1_SPSDstm SRGR1,McBSP1_SPSAstm #00ffh,McBSP1_SPSD ;CLKGDV=0xFF,SPI的时钟=DSP时钟/256stm SRGR2,McBSP1_SPSAstm #2000h,McBSP1_SPSDstm PCR,McBSP1_SPSAstm #0a08h,McBSP1_SPSD ;CLKXP=0,CLKXM=1,FSXM=1,FSXP=1stm SPCR2,McBSP1_SPSAstm #0040h,McBSP1_SPSD ;GRST=1nopnop ;等待两个周期stm SPCR1,McBSP1_SPSAstm #1801h,McBSP1_SPSD ;设定RRST=1,开始接收数据stm SPCR2,McBSP1_SPSAstm #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实例
  
MATbit15实际行地址
1000 0000 0000 000010000 0000 0000 00001
0000 0000 0000 000100000 0000 0000 0001
0000 0000 0000 000200000 0000 0000 0002
1000 0000 0000 000310000 0000 0000 00032
0000 0000 0000 000500000 0000 0000 0005
0000 0000 0000 000600000 0000 0000 0006
1000 0000 0000 000410000 0000 0000 00044
0000 0000 0000 000700000 0000 0000 0007
0000 0000 0000 000800000 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之间的通讯与控制程序算法的设计。该模块作为拟人机器人语音互系统的语音应答模块,可以对机器人识别的命令语音进行相应的实时应答。

相关帖子

jimmhu| | 2017-2-17 22:14 | 显示全部楼层
如果是DSP可以跟AIC32芯片使用做语音

使用特权

评论回复
jimmhu| | 2017-2-17 22:23 | 显示全部楼层
现在VS1003这个语音芯片有也可以。

使用特权

评论回复
isseed| | 2017-2-18 21:10 | 显示全部楼层
ISD4004不如VS1003芯片了。

使用特权

评论回复
isseed| | 2017-2-18 21:14 | 显示全部楼层
TMS320VC5402+AIC32也可以实现。

使用特权

评论回复
51xlf| | 2017-2-19 16:48 | 显示全部楼层
这个播放的文件是怎么保存的?

使用特权

评论回复
51xlf| | 2017-2-19 16:53 | 显示全部楼层
jimmhu 发表于 2017-2-17 22:14
如果是DSP可以跟AIC32芯片使用做语音

这个 TLV320AIC320?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

967

主题

1447

帖子

9

粉丝