使用SPCE061A扩展K9F1208实现数码录音及播放
三、 SPCE061A简介
SPCE061A是台湾凌阳公司生产的性价比很高的一款十六位单片机,使用它可以非常方便的实现语音的录放系统,该芯片拥有8路10位精度的AD,其中1路AD为音频转换通道,并且内置有自动增益电路。这为实现语音录入提供了方便的硬件条件。2路10位精度的DA,只需要外接功放(SPY0030)即可完成语音的播放。另外,凌阳十六位单片机具有易学易用的效率较高的一套指令系统和集成开发环境。在此环境中,支持标准C语言,可以实现C语言与凌阳汇编语言的互相调用,并且,提供了语音录放的库函数,只要了解库函数的使用,就会很容易完成语音录放,这些都为软件开发提供了方便的条件。
凌阳的音频格式有许多种,比较常用的有如下几种
模块名称
语音压缩编码率类型
资料采样率
SACM_A2000
16Kbit/s,20 Kbit/s,24 Kbit/s
16KHz
SACM_S480/S720
4.8 Kbit/s,7.2 Kbit/s
16KHz
SACM_S240
2.4 Kbit/s
24KHz
SACM_MS01
音乐合成(16Kbits/s,20 Kbits/s,24 Kbits/s)
16KHz
SACM_DVR(A2000)
16 Kbit/s的资料率,8 K的采样率,用于ADC信道录音功能
16KHz
凌阳不同音频格式压缩比:
SACM-A2000:压缩比为8:1,8:1.25,8:1.5
SACM-S480: 压缩比为80:3,80:4.5
SACM-S240: 压缩比为80:1.5
压缩比越大,存储空间占用越小,更加节约资源。例如本系统采用的是SACM_A2000格式中的16Kbit/s压缩编码率,则就可以计算出512Mbit的存储器可以存储512M/16K = 32000秒= 8小时53分钟多。
四、硬件系统设计
K9F1208的硬件图如上图所示,它与SPCE061A单片机接口的方法为:K9F1208的数据总线IO0~7与SPCE061A的IOA0~7相连,用单片机的IOB0作为读允许信号(RE),IOB1作为写允许信号(WE),IOB2作为片选信号(CS),IOB3作为地址锁存允许信号(ALE),IOB4作为命令锁存允许信号(CLE)。因为不需要写保护,本系统把写保护引脚(WP)接到了高电平。RDY/B信号线不用,本例是悬空处理,K9F1208的状态通过Read Status操作来实现。
四、软件设计
本系统软件设计流程如图4所示。
本软件系统设计简单。主要是因为凌阳的十六位单片机开发环境使用方便,并支持C语言与汇编语言的互相调用,且提供丰富的凌阳语音函数库,只要我们了解这些函数的使用方法,我们就可以很容易的实现语音的录放。
本系统底层驱动部分包括K9F1208的读写、擦除使用的是汇编语言编写的。上层部分包括语音的录放是由C语言完成的。提供独立的K9F1208的读、写、擦除代码模块。需要源代码的请到凌阳科技大学计划网站( http://www.unsp.com.cn )下载。
在使用过程中,建议遵循以下规则:
1、初始化过程
使用函数InitSamsungFlash() 初始化K9F1208。
2、写过程
先用函数InitWriteSamsungFlash()初始化写操作,然后使用函数 FillSamsungFlash(Data)往K9F1208写入数据,最后用函数StopWriteSamsungFlash()结束写数过程。
3、读过程
先用函数InitReadSamsungFlash()初始化读操作,然后使用函数ExtractSamsungFlash()从K9F1208读出数据,最后用函数StopReadSamsungFlash()结束读数过程。
4、注意每次读/写操作都要调用初始化和结束函数
5、为了避免错误,请不要交迭使用读/写操作
6、当program/erase错误发生的时候, 用户必须根据自己的文件系统自行处理。 请参考_SP_FillSamsungFlash和_SamsungEraseBlock。
SACM-DVR相关的API函数如下所示:
int SACM_DVR_Initial(int Init_Index) //初始化
void SACM_DVR_ServiceLoop(void) //获取资料,填入译码队列
void SACM_DVR_Encode(void) //录音