概述 ---WTS701是华邦电子推出的第一颗“文字转发音”(Text-To-Speech)单芯片处理器,使用真人发音为样本,确保所输出的发音是清晰的真人发音,不会像计算机合成声音般不自然,使得由文字所转换成的发音更自然、真实和悦耳。 ---WTS701单芯片解决方案利用连续运算法(concatenation algorithm)与多层次储存技术(Multi-Level Storage,MLS)相结合,不需要微处理器或PC机即可工作。WTS701可广泛应用于各种多媒体设备上,阅读电子邮件、实时简讯、新闻、天气、股价等信息,或是商务讯息传递和导航系统的语音说明,皆可使用该芯片将文字转换成为语音,以听觉代替视觉读。此外,WTS701还可以运用在学习辅助教材、视障辅助教材、电子书、玩具及其他娱乐产品上。 引脚排列及功能 ---WTS701采用56脚的TSOP封装,各引脚的功能说明如表1所列。 应用特性
● 工作参数 ---WTS701的工作电压为2.7~3.3V,I/O引脚可耐3V~5V电压,工作电流为35mA,待机电流为1μA,工作温度为 -40℃~+85℃,模拟音频输出外接8Ω扬声器,发音语速可调,可对ASCII码或UNICODE编码进行文字转发音,支持英语男、女性发音和中文女性发音。 ● 存储单元
---WTS701内含2个内存模块,一个用于语音数据库,另一个则用于存储核心程序。1组模拟/数字转换器负责通过音效PCM输出音效,并有1组扬声器驱动线路用于模拟输出。WTS701支持ASCII码的文字输入,普通话则需使用Unicode编码文字,通过序列式SPI接口输入,将其转换为语音后,通过模拟端口输出,或者输出至数字CODEC。芯片系统工作流程框图如图2所示。 ● SPI传输格式 ---WTS701的传输协议是SPI方式,传输格式如表2所示。 典型应用 ● 与微控制器接口 ---WTS701与cygnal f120微控制器接口如图2所示。 ● 软件编程 ---微控制器cygnal f120与WTS701和相应外围电路正确连接完毕后,运行软件,扬声器会发出“大家好”的问候语。程序代码如下。
#include"c:\cygnal\idefiles\c51\inc\c8051f120.h" #define byte unsigned char #define uint unsigned int #define SYSCLK 22118400 //系统时钟外部晶体 data byte SFRPAGE_SAVE; idata byte status[23]; sbit cs=P2^0; sbit ss=P2^1; sbit mosi=P2^2; sbit sclk=P2^3; sbit miso=P2^4; sbit rdy =P2^5; sbit bint=P2^6; sbit res =P2^7; void SYSCLK_Init(void) { data int i; //延时计数器 SFRPAGE_SAVE=SFRPAGE; SFRPAGE=CONFIG_PAGE; OSCXCN=0x67; //起动外部22.1184MHz晶体振荡器 for(i=0;i<255;i++); //等待振荡器启动 while(!(OSCXCN&0x80)); //等待晶体振荡器稳定 CLKSEL=0x01; OSCICN=0x00; //选择外部振荡器为系统时钟源,并使能丢失时钟检测器 SFRPAGE=SFRPAGE_SAVE; } void PORT_Init(void) { SFRPAGE_SAVE=SFRPAGE; SFRPAGE=CONFIG_PAGE; XBR0=0x04; //使能UART0 XBR1=0x14; //使能INT0和INT1 XBR2=0x44; //使能数据交叉开关和弱上拉 P2MDOUT =0xff; //允许为推挽输出 SFRPAGE=SFRPAGE_SAVE; } void spi_begin() { mosi=1; delay(1); sclk=1; delay(1); ss=1; delay(1); ss=0; } byte spi_send_byte(byte d) { idata byte i; idata byte result=0; while(!rdy); mosi=1; miso=1; for(i=0;i<8;i++) { sclk=0; delay(5); mosi=(bit)(d&0x80); d=d<<1; delay(5); sclk=1; delay(5); result*=2; if(miso) result++; } return(result); } void spi_end() { mosi=1; delay(1); sclk=0; delay(1); ss=0; delay(1); ss=1; } void delay(uint delx) { idata uint i=0; while(i<delx) { i++; } } main() { WDTCN=0xde; // 禁止看门狗定时器 WDTCN=0xad; SYSCLK_Init(); // 初始化振荡器 PORT_Init(); // 初始化数据交叉开关和通用I/O口 cs=0; res=1; delay(10); res=0; delay(10); spi_begin(); status[0]=spi_send_byte(0x14); status[1]=spi_send_byte(0x00); spi_end(); delay(500);//准备接收指令,但尚未上电 spi_begin(); status[2]=spi_send_byte(0x02); status[3]=spi_send_byte(0x00); spi_end(); delay(500);//发送上电指令 spi_begin(); status[4]=spi_send_byte(0x06);//发送读中断指令 status[5]=spi_send_byte(0x00); status[6]=spi_send_byte(0x00); status[7]=spi_send_byte(0x00); spi_end(); delay(500);//返回WTS701的状态,可开始转换 spi_begin(); spi_send_byte(0x51); spi_send_byte(0x00); spi_end(); delay(500);//发出设定卷寄存器指令 spi_begin(); spi_send_byte(0x52); spi_send_byte(0x07); spi_end(); delay(500);//发出设定卷寄存器指令 spi_begin(); status[8]=spi_send_byte(0x81); status[9]=spi_send_byte(0x00); status[10]=spi_send_byte(0x10);//^P status[11]=spi_send_byte(''D'');//“大”的拼音 status[12]=spi_send_byte(''A''); status[13]=spi_send_byte(''4''); status[14]=spi_send_byte(''J'');//“家”的拼音 status[15]=spi_send_byte(''I''); status[16]=spi_send_byte(''A''); status[17]=spi_send_byte(''1''); status[18]=spi_send_byte(''H'');//“好”的拼音 status[19]=spi_send_byte(''A''); status[20]=spi_send_byte(''0''); status[21]=spi_send_byte(''3''); status[22]=spi_send_byte('' '');//结束符 spi_end(); while(1); } ---华邦WTS701语音芯片也可利用预录人声的方式,让文字转换后的语音部分更加接近真人语音,创造一个更人性化的使用环境。 参考文献 1 http://www.winbond.com/WTS701.pdf |