您当前的位置:五五电子网电子知识电子知识资料计算机应用用ISD4004设计的一个语音录放系统 正文
用ISD4004设计的一个语音录放系统

用ISD4004设计的一个语音录放系统

点击数:7870 次   录入时间:03-04 11:52:16   整理:http://www.55dianzi.com   计算机应用

  该系统能够接收上位机从串口发送来的的控制指令,根据命令执行录音、放音等操作。
  
  ISD4004系列工作电压3V,芯片采用CMOS技术,内含振荡器、防混淆滤波器、平滑滤波器、音频放大器、自动静噪及高密度多电平闪烁存储阵列。芯片设计是基于所有操作的必须由微控制器控制,操作命令可通过串行通信接口(SPI或MICrowire)送入。芯片采用多电平直接模拟量存储技术,每个采样值直接存储在片内闪烁存储器中,因此能够非常真实、自然地再现语音、音乐、音调和效果声。采样频率可为4.0kHz、5.3kHz、6.4kHz或8.0kHz,频率越低,录放时间越长,而音质则有所下降。片内信息存于闪烁存储器中,可在断电情况下保存100年(典型值),反复录音10万次。
  
  ISD4004语音芯片的所有操作必须由微控制器控制,操作命令可通过串行通信接口(SPI或Microwire)送入。存储空间可以“最小段长”为单位任意组合分段或不分段,由于多段信息在处理再加上内在的存储管理机制,便可实现灵活的组合录放功能。
  
  本设计中,ISD4004工作于SPI串行接口。SPI协议是一个同步串行数据传输协议,协议规定微控制器的SPI移位寄存器在SCLK的下降沿动作,因此对ISD4004而言,在时钟止升沿锁存MOSI引脚的数据,在下降沿将数据送至MISO引脚。协议的内容介绍如下。
  
  ·所有串行数据传输开始于SS下降沿。
  
  ·SS在传输期间必须保持为低电平,在两条指令之间则保持为高电平。
  
  ·数据在时钟上升沿移入,在下降沿移出。
  
  ·SS变低,输入指令和地址后,ISD才能开始录放操作。

  ·指令格式是(8位控制码)加(16位地址码)。
  
  ·ISD的任何操作(含快进)如果遇到EOM或OVF,则产生一个中断,该中断状态在下一个SPI周期开始时被清除。
  
  ·使用“读”指令使中断状态位移出ISD的MISO引脚时,控制及地址数据也应同步从MOSI端移入。因此要注意移入的数据是否与器件当前进行的操作兼容。当然,也允许在一个SPI周期里,同时执行读状态和开始新的操作(即新移入的数据与器件当前的操作可以不兼容)。
  
  ·所有操作在运行位(RUN)置1时开始,置0时结束。
  
  ·所有指令都在SS端上升沿开始执行。
  
  下表列出了ISD4004的操作命令。

  本设计中,语音录放过程通过单片机程序与语音芯片ISD4004配合来实现,所以对语音芯片ISD4004的应用是重点。使用ISD4004时,需注意上电后器件延时TPUD(8kHz采样时,约为25毫秒)后才能开始操作。因此,用户发完上电指令后,必须等待TPUD时间后,才能发出一条操作指令。
  
  本设计硬件电路以AT89S52单片机为核心,通过ISD4004芯片进行语音的录制,通过LM386芯片放大与播放,通过ILC232芯片与上位机进行通信。系统硬件原理图如下图示。
  
  录音录制电路主要由ISD4004、麦克Xl及相关外围电路等构成。声音信号由Xl转换成电信号,经电容C31耦合,三极管Q4放大后由IN-引脚进入ISD4004,由ISD4004采样和保存。录音播放电路主要由ISD4004、LM386等构成。声音信号由ISD4004的AUDOUT引脚输出,经电容耦合送入LM386芯片,放大后由VOUT引脚输出并驱动扬声器发声。

语音录放系统原理图

 



www.55dianzi.com

  根据系统要求,软件主要实现接收上位机发送的指令,并按照要求进行录放音操作。因此,软件主要包括ISD4004控制子程序及串口通信子程序和主程序。主程序操作流程图如下图所示。

语音录放系系统操作流程图

  主程序首先初始化系统,然后调用串口通信子程序获得上位机命令,根据命令调用ISD操作子程序实现声音录制和回放等功能。主程序代码如下:

  程序mrecordvoICe()为录音子程序。上位机通过串口发来的信息,第一个字节是录音时间,可以是3s、5s、8s、l0s及20s;第二个字节是录音命令码;第三个字节是序号。录音子程序根据录音时间及序号计算本次录音的存储位置,根据录音时间设置定时时间,向ISD4004发送录音命令启动录音,定时时间到,停止录音。程序代码如下:

  程序mplayvoice()为放音子程序。同程序mrecordvoice()一样,上位机通过串口发来信息,第一个字节是录音时间,第二个字节是录音命令码,第三个字节是序号。程序mplayvoice()根据录音时间及序号计算放音数据在存储器中的位置,向ISD4004发送放音命令启动录音,放音结束后,发送停止命令。程序代码如下:

  在通信过程中,为了保证数据传输的准确性,通常需要遵循一定的协议。子函数ServiceRec对串口接收到的数据进行校验并处理。代码如下:

 

  上位机每发送一个命令需要通过串口发送多个字节数据,这些数据不一定是连续发送的,因此下位机的串口程序需要具有超时控制功能。下位机接收到第一个字节数据时,启动定时。若定时时间到,下位机未收到指定个数的数据,那么这次传输就超时。此时下位机应该重新等待接收第一个字节数据。子函数ServiceTimer0的功能是串口数据传输的超时控制,具体函数代码如下:

 

 



www.55dianzi.com

  子函数ServICe_Serial()的功能是串口收发中断的处理。系统中,发送和接收数据都采用中断方式。由于MCS-51系列单片机的发送和接收共用一个中断,因此中断服务程序中要加以区分。具体函数代码如下:

[1] [2]  下一页


本文关键字:语音  计算机应用电子知识资料 - 计算机应用