1.1录音
SPCE061A的A/D转换器有8个通道,其中有1个通道是MIC-IN输入,它专门用于对语音信号进行采样。。语音信号经Mic转换成电信号,由隔直电容隔掉直流成分,然后输入至SPCE061A内部前置放大器。SPCE061A内部自动增益控制电路AGC能随时跟踪、监视前置放大器输出的音频信号电平,当输入信号增大时,AGC电路自动减小放大器的增益;当输入信号减小时,AGC电路自动增大放大器的增益,以便使进入A/D的信号保持在最佳电平,又可使削波减至最小。
A/D转换器对输入的音频信号进行8kHz采样,并按照凌阳音频编码格式进行编码,每秒将占用16kBits的存储器空间。系统扩展了一块容量为1Mbits的SRAM存储器HM628128A来存储语音数据。
1.2放音
将HM628128A中存储的语音数据顺序取出,解码后,以8kHz的速率进行D/A转换输出,经电容滤波后,恢复原始语音波形,通过驱动扬声器放音。
2. 硬件电路图1 硬件连接图程序设计
录放音的编解码是靠调用库函数完成的,我们只要完成数据的存入和读出即可。主程序流程图见图2。
程序部分主要是完成HM628128A的读写,对语音采样数据的编码处理是通过调用库函数完成的。写(读)程序都包括初始化和写(读)两部分,写入(读出)程序较简单,只要按照HM628128A的写(读)时序就可以,下面讲解初始化和写入时的参数传递过程,读出时参照写入部分。
.public _SP_InitWriteSRAM
.public F_SP_InitWriteSRAM
_SP_InitWriteSRAM: .proc
F_SP_InitWriteSRAM:
push r1 to [sp]
R1 = 0xFFF0
[P_IOA_Dir] = R1 //IOA15- A4: 输X
[P_IOA_Attrib] = R1 // IOA3- A0: 输J
[P_IOA_Data] = R1
R1 = 0xFFFF
[P_IOB_Dir] = R1 // IOB15- B0输X
[P_IOB_Attrib] = R1
[P_IOB_Data] = R1
pop r1 from [sp]
retf
.endp
初始化包括地址线、数据线和控制线的设置。IOB15---IOB0、IOA7接地址线,设置为输出,IOA51---IOA8接数据线,写入时设置为输出,IOA6—IOA4接选通信号,设置为输出。
.public _SP_WriteSRAM //写Jl{
_SP_WriteSRAM: .PROC
push bp to [sp]
bp = sp + 1
r1 = [bp+3] //a}C
r2 = [bp+4] //a}
JZ Write_Low_Addr //P断O_为0
R2 = 0x0080 //a}线A16为1
Write_Low_Addr:
[HighAddr]=R2
R2 = [bp+5] //n写J数u
call F_SP_WriteSRAM //写Jl{
pop bp from [sp]
retf
.ENDP
由于HM628128A有17根地址线,在主程序中记录地址的变量设置为长整型数据(32位),在调用写入子程序时,先将高16位压入堆栈,再压入低16位,所以在写入子程序中取两次地址(高、低),并判断高位是否为0,不为0,则将A16置1,表明读、写的是高64K RAM。
读者只要对上面电路、程序稍加改动,就可以实现语音复读机、跟读机、留言机等功能。
图2 程序流程图
本文关键字:语音 凌阳单片机,单片机-工控设备 - 凌阳单片机
上一篇:凌阳6位7段LED数码管显示实验