ISD1700語音芯片SPI使用總結(jié)_第1頁
ISD1700語音芯片SPI使用總結(jié)_第2頁
ISD1700語音芯片SPI使用總結(jié)_第3頁
ISD1700語音芯片SPI使用總結(jié)_第4頁
ISD1700語音芯片SPI使用總結(jié)_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、ISD1700語音芯片SPI使用總結(jié)(一)ISD1700語音芯片SPI使用總結(jié)一 該語音芯片的使用要仔細(xì)分析英文PDF的資料,電路可按中青世紀(jì)論壇上面所給的電路搭建,也可按英文PDF后面所畫的電路圖焊接。本芯片使用不單純是一個(gè)放音電路,還含有其他的控制。因此程序首先要能完成指定地址的放音工作,其次還應(yīng)能嵌入整個(gè)費(fèi)額顯示程序中,即語音程序不能與電路其他功能相影響。費(fèi)額顯示中里面主要有八字板,點(diǎn)陣等其他的控制。SPI放音操作設(shè)計(jì)參考了網(wǎng)絡(luò)上的部分程序,各取所長設(shè)計(jì)了放音程序。在最后附上了部分程序,僅供參考。二 試驗(yàn)中采用的是ISD1760語音芯片,采樣率為8K時(shí),一共能播放60S的語音,最大地址為

2、0x1EF,錄音實(shí)際地址為0x10-0x1EF,從此最大地址可得出:0x1EF-0x10=0x1DF=479479+1=480;480*125MS =60S,也就是說8K采樣率時(shí)每1個(gè)地址最小語音長度為125MS,因此如果知道單個(gè)語音的長度,暫時(shí)無編程器的時(shí)候,也可自己推斷每個(gè)語音所占的地址長度。三 SPI操作時(shí)要嚴(yán)格遵守PDF上所給的各項(xiàng)操作,這里不列出。暫時(shí)僅給出試驗(yàn)中遇到的所有問題并如何解決的。1, 一開始本實(shí)驗(yàn)是自己用通用板自己照電路搭建的平臺(tái),此電路正確與否可把PLAY管腿和地短路,如果芯片有語音并且電路功放及外圍電路正確的話,此時(shí)芯片就會(huì)把所有語音全都循環(huán)讀一遍。接下來把4個(gè)SPI

3、口與單片機(jī)接通,嘗試軟件控制。主循環(huán)中可設(shè)置一個(gè)連續(xù)播放的程序,上電就循環(huán)放音。放音程序沒錯(cuò)的話第一步便成功了!這期間我遇到的問題主要有放不出音,讀音混亂,有雜音。如果放不出音,先檢查電路,程序放出聲音應(yīng)該沒出現(xiàn)什么問題。2, 本芯片設(shè)置的APC值為0xA0和0x04,具體對(duì)應(yīng)功能參見中文PDF。接下來遇到的問題就是準(zhǔn)確放單個(gè)音和連續(xù)播放多個(gè)語音。播放單個(gè)語音首先是地址的編譯。1730以下的地址可定義為BYTE,從1740開始就需要定義為WORD,其實(shí)也可定義為BYTE,就是發(fā)送地址的時(shí)候先發(fā)0x10和后兩位即可。本程序定義為WORD,做一個(gè)偏移發(fā)送即可。接下來的問題就是連續(xù)播放的問題,這個(gè)問

4、題直到最后才正確的解決。一開始的程序中只是一直發(fā)送SETPLAY,可以連續(xù)讀,就是讀的亂,其實(shí)就是錯(cuò)誤操作,后來嘗試在后面添加一個(gè)2秒的延時(shí),可以連續(xù)讀出語音了,就是每個(gè)要停頓一下才能放出第二個(gè)語音,自認(rèn)為就這樣就可以了,導(dǎo)致了以后還得解決此問題!因?yàn)榇朔乓舴绞椒艞壛伺袛嘈酒瑺顟B(tài)寄存器,根本沒有實(shí)現(xiàn)連續(xù)放音,實(shí)際是單個(gè)語音人為把它們連起來播放,聽起來很不自然。問題拖到最后又衍生了別的問題,由于此放音方式的聲音輸出信號(hào)是有高有低,當(dāng)電平跳變時(shí)對(duì)功放產(chǎn)生影響,喇叭會(huì)出現(xiàn)“噗噗”聲,術(shù)語可以稱之為“過載”,如果人距離喇叭很近的話很容易聽出來。因此需修改程序,芯片內(nèi)部有個(gè)緩沖器,如果連續(xù)發(fā)送相同的兩個(gè)

5、setplay命令,芯片會(huì)發(fā)完第一個(gè)音后接著連續(xù)發(fā)第二個(gè)音,并且兩音之間的間隔時(shí)間幾乎沒有。利用這個(gè)特點(diǎn),可以在發(fā)完一個(gè)語音命令后一直發(fā)送讀芯片狀態(tài)命令,從返回來的數(shù)據(jù)判斷RDY,PLAY,INT位,當(dāng)?shù)谝粭l放音指令發(fā)送完,讀音播放完,立即發(fā)送第二條setplay,并以此類推。這樣實(shí)現(xiàn)了連續(xù)放音,并且聲音輸出一直為高電平(除了開始和結(jié)束音),解決了噗噗聲的問題。但是要一直發(fā)送讀芯片狀態(tài)指令就會(huì)影響其他指令,如本實(shí)驗(yàn)是執(zhí)行串口指令,點(diǎn)陣刷新,八字板的顯示和亮度調(diào)整等,推薦在doISD_Rd_Status;while();內(nèi)添加以上命令,便可解決只讀音不響應(yīng)其他命令的問題。串口可判斷標(biāo)志位;點(diǎn)陣可

6、在連續(xù)刷新16行(16*16點(diǎn)陣)后執(zhí)行下一判斷芯片標(biāo)志位程序;八字板的顯示可以鎖存,因此有改變顯示時(shí)執(zhí)行一次即可;八字板的亮度需要一直執(zhí)行,但是當(dāng)亮度為3以下時(shí)(即16MS內(nèi)有3MS是點(diǎn)陣亮,13MS是不亮),放音時(shí)八字板會(huì)有閃爍現(xiàn)象,原因可能是執(zhí)行除了亮度調(diào)整指令外其他指令占用了大約3MS的時(shí)間,暫時(shí)還沒有好的解決辦法。四 正在放音的同時(shí)用串口發(fā)送調(diào)節(jié)音量也遇到了問題,一開始的解決辦法是打斷當(dāng)前語音,延時(shí)超過最大語音長度的時(shí)間,再發(fā)送修改APC的指令。這樣做的原因是如果用本程序在發(fā)完當(dāng)前音后突然發(fā)送修改APC的指令時(shí)候,芯片會(huì)從頭到尾讀所有音!到最后仔細(xì)研究才發(fā)現(xiàn)這個(gè)程序中有個(gè)修改永久內(nèi)部

7、寄存器的指令,當(dāng)正在進(jìn)行讀音操作發(fā)送修改內(nèi)部永久寄存器時(shí)會(huì)導(dǎo)致以上現(xiàn)象,把此程序剝離后實(shí)現(xiàn)了邊播放語音邊調(diào)節(jié)音量。發(fā)送時(shí)也要注意判斷芯片狀態(tài),RDY為1后發(fā)送,RDY再次為1時(shí)繼續(xù)發(fā)放音指令。五本芯片的錄音采用拷貝機(jī),拷貝機(jī)燒錄語音時(shí)也需注意以下問題:首先是在最后的語音后添加一空語音,以保證錄音不會(huì)出現(xiàn)問題;其次是燒錄語音時(shí)電腦除了運(yùn)行燒錄語音的程序,其它什么都不要開,什么QQ,殺毒軟件等都要關(guān)閉,最好鼠標(biāo)都不要?jiǎng)?!燒錄語音前最好檢查下聲卡驅(qū)動(dòng),保證有驅(qū)動(dòng)并且最新,最好將聲卡聲音輸出設(shè)置(本機(jī)為AC97 Audio)中喇叭組態(tài)設(shè)置為耳機(jī),不要什么立體聲等其他狀態(tài)。音量大小可以隨意,本試驗(yàn)設(shè)置最

8、大。官方意見是三分之二的狀態(tài),總之,在噪音最小的情況下也要保證音量。六 第一次芯片初始化修改APC時(shí),最好在前面添加chk_mem這個(gè)指令,在1700的datasheet里的說明并不多。大意是檢查環(huán)狀存儲(chǔ)器存儲(chǔ)地址是否首尾相連的意思。因?yàn)榫W(wǎng)上有人反映不添加此指令A(yù)PC修改不了。七拷貝機(jī)很貴,并不是必須買,本芯片燒錄語音的拷貝機(jī)也不是自己的,囧!燒錄語音的試驗(yàn)還沒做過,將來會(huì)做這方面的試驗(yàn)。另外芯片也有次品,主要表現(xiàn)是在放音時(shí)有很大的“咔嚓”聲,還有一個(gè)干脆就是燒不了音!拿去退貨!試驗(yàn)樣本100只ISD1760,次品率十五分之一。ISD1700語音芯片SPI使用總結(jié)(二)八 另外做了些其他實(shí)驗(yàn),

9、如在發(fā)送字節(jié)命令時(shí),去掉了所有延時(shí)指令,芯片也可正常工作。試驗(yàn)中單片機(jī)為SST和STC的產(chǎn)品,工作晶振22.1184MHz和35MHz。波特率為9600.九 音質(zhì)不滿意,但硬件電路(外圍干擾或功放電路等)又實(shí)在不能更改,可嘗試修改音源。本實(shí)驗(yàn)采用的語音,在ISD2560(并行操作,停產(chǎn))播放語速很正常,而ISD1760(替換2560)播放發(fā)現(xiàn)稍微有些慢。可使用COOL EDIT或者Adobe.Audition.v1.5.CN 做些修改,本實(shí)驗(yàn)用后者軟件做修改。做了修改破音,斷音,去噪,不改變音質(zhì)的情況下縮短語音播放長度,修改效果不錯(cuò),可以嘗試。想自己錄音的可用WIN自帶的錄音機(jī),再配用此軟件可

10、調(diào)出不錯(cuò)的語音。也可軟件合成語音,具體軟件和語音庫網(wǎng)上可以搞到。十目前人仍有潛在問題,發(fā)現(xiàn)當(dāng)新板子焊有復(fù)位鍵時(shí),按下復(fù)位鍵語音芯片會(huì)不工作,而再次按下復(fù)位鍵時(shí)語音芯片便可繼續(xù)工作,也就是說復(fù)位鍵按下次數(shù)的奇數(shù)次都會(huì)產(chǎn)生這樣的問題。但是當(dāng)電路沒有復(fù)位電路時(shí)就不會(huì)出現(xiàn)此問題!十一 本電路是音頻是采用AUX輸出,中青世紀(jì)的論壇上給的電路圖是在此腳接一電容CM3。本實(shí)驗(yàn)認(rèn)為此處應(yīng)接電阻。接電容可能會(huì)影響音量,但在實(shí)際實(shí)驗(yàn)中未發(fā)現(xiàn)音量有變化。十二 由于電路的原因,語音芯片的供電為3.3V,PDF說明2.4V-5.5V皆可。在采樣率8K時(shí)震蕩電阻為80K電阻,實(shí)際中無80K電阻,推薦用240K與120K并

11、聯(lián)構(gòu)成80K電阻!本電阻用82K代替。此電阻會(huì)影響放音的時(shí)間和音質(zhì)。ISD1700語音芯片SPI使用總結(jié)(三)附:MAIN.C void ISD_Reset(void) ISD_SendByte(CMD_1760_RESET); ISD_SendByte(0x00); sbnISD_SS=1;/ DelayX1ms(10);void ISD_PU(void) ISD_SendByte(CMD_1760_PU|0x10); ISD_SendByte(0x00); sbnISD_SS=1; DelayX1ms(50); void ISD_Rd_Status(void) ISD_SendByte(C

12、MD_1760_RD_STATUS); ISD_SendByte(0x00); ISD_SendByte(0x00); sbnISD_SS=1;/ DelayX1ms(10); SR0_L=ISD_SendByte(CMD_1760_RD_STATUS); SR0_H=ISD_SendByte(0x00); SR1=ISD_SendByte(0x00); sbnISD_SS=1;/ DelayX1ms(10);void ISD_ClrInt(void) ISD_SendByte(CMD_1760_CLI_INT); ISD_SendByte(0x00); sbnISD_SS=1;/ Delay

13、X1ms(10); void ISD_CHK_MEM(void) ISD_SendByte(CMD_1760_CHK_MEM); ISD_SendByte(0x00); sbnISD_SS=1;/ DelayX1ms(10); void ISD_WR_APC2(BYTE Volume) ISD_SendByte(CMD_1760_WR_APC2); ISD_SendByte(Volume); /后3位為音量 ISD_SendByte(0x04); /0x04 EOM=0,VALERT=1 ,0x 0C EOM=1 sbnISD_SS=1; DelayX1ms(10); ISD_WR_NVCFG

14、(); /永久寫入寄存器 /此程序正在放音要調(diào)整音量時(shí)不要添加!void ISD_WR_NVCFG(void) ISD_SendByte(CMD_1760_WR_NVCFG); ISD_SendByte(0x00); sbnISD_SS=1; DelayX1ms(10); void ISD_RDAPC(void) ISD_SendByte(CMD_1760_RD_APC); ISD_SendByte(0x00); ISD_SendByte(0x00); ISD_SendByte(0x00); sbnISD_SS=1; DelayX1ms(10); SR0_L=ISD_SendByte(CMD_

15、1760_RD_APC); SR0_H=ISD_SendByte(0x00); APCL=ISD_SendByte(0x00); APCH=ISD_SendByte(0x00); sbnISD_SS=1; DelayX1ms(10); void ISD_PD(void) ISD_SendByte(CMD_1760_PD); ISD_SendByte(0x00); sbnISD_SS=1;/ DelayX1ms(5); BYTE ISD_SendByte(BYTE BUF_ISD) BYTE i; BYTE dat=BUF_ISD; sbISD_SCLK=1; sbnISD_SS=0; for(

16、i=0;i<8;i+) sbISD_SCLK=0; _nop_(); _nop_(); if(dat&0x01) sbISD_MOSI=1; else sbISD_MOSI=0; dat>>=1; if(sbISD_MISO=1) dat|=0x80; sbISD_SCLK=1; _nop_(); _nop_(); sbISD_MOSI=0; _nop_(); return(dat);ISD1700語音芯片SPI使用總結(jié)(四)BYTE ISD_RDDevID(void) ISD_SendByte(CMD_1760_RD_DEVID); ISD_SendByte(0x0

17、0); ISD_SendByte(0x00); sbnISD_SS=1; DelayX1ms(10); SR0_L =ISD_SendByte(CMD_1760_RD_DEVID); SR0_H =ISD_SendByte(0x00); ID =ISD_SendByte(0x00); sbnISD_SS=1; DelayX1ms(10); return(ID); void ISD_Init(void) ISD_Reset(); ISD_PU(); /上電指令 DelayX1ms(50); / SBUF=ISD_RDDevID(); /讀取芯片ID,-1760為0xA0 ISD_ClrInt()

18、; ISD_CHK_MEM(); /檢查環(huán)狀存儲(chǔ)器存儲(chǔ)地址是否首尾相連 /改變1700內(nèi)部存儲(chǔ)單元或是內(nèi)部寄存器的指令前, /都要加上這個(gè)指令。 ISD_WR_APC2(Volume);/寫APC寄存器,后3位為音量,此設(shè)為最大,0xA7為最小 F0 DelayX1ms(50);/ ISD_RDAPC(); /讀APC寄存器/ DelayX1ms(25); void ISD_GetToneAdd(BYTE cNum, WORD * ipStartAdd, WORD * ipEndAdd) *ipStartAdd=aSpeech_AddrcNum * 2; *ipEndAdd=aSpeech_A

19、ddrcNum * 2 + 1; void ISD_SetPLAY(BYTE cNum) WORD Add_ST, Add_ED; BYTE Add_ST_H, Add_ST_L, Add_ED_H, Add_ED_L; / ISD_Init(); /初始化/ ISD_PU();/ ISD_ClrInt(); /清中斷 ISD_GetToneAdd(cNum, &Add_ST, &Add_ED); /取出當(dāng)前語音的首末地址 Add_ST_L=(BYTE)(Add_ST&0x00ff); Add_ST_H=(BYTE)(Add_ST>>8)&0x00f

20、f); Add_ED_L=(BYTE)(Add_ED&0x00ff); Add_ED_H=(BYTE)(Add_ED>>8)&0x00ff); ISD_SendByte(CMD_1760_SET_PLAY); /發(fā)送放音指令 ISD_SendByte(0x00); ISD_SendByte(Add_ST_L); /S7:S0 開始地址 ISD_SendByte(Add_ST_H); /S10:S8 ISD_SendByte(Add_ED_L); /E7:E0 結(jié)束地址 ISD_SendByte(Add_ED_H); /E10:E8 ISD_SendByte(0x00

21、); sbnISD_SS=1;ISD1700語音芯片SPI使用總結(jié)(五)管腿,變量等其他.H程序 sbit sbnISD_SS = P10; / ISD1760的slave selectsbit sbISD_SCLK = P11; / ISD1760的SPI接口時(shí)鐘sbit sbISD_MOSI = P12; / ISD1760的SPI接口數(shù)據(jù)輸入端口sbit sbISD_MISO = P13; / ISD1760的SPI接口的串行輸出 sbit sbnINT_1760 = P32; / ISD1760的INT管腳/未使用/外部中斷可用此腳sbit sbSRT_1760 = P33; / IS

22、D1760的RESET管腳/未使用/ - ISD1760 SPI命令 -#define CMD_1760_PU 0x01 /上電#define CMD_1760_STOP 0x02 #define CMD_1760_RESET 0x03 /復(fù)位#define CMD_1760_CLI_INT 0x04 /清中斷#define CMD_1760_RD_STATUS 0x05 /讀狀態(tài)#define CMD_1760_RD_PLAY_PTR 0x06#define CMD_1760_PD 0x07 /掉電#define CMD_1760_RD_REC_PTR 0x08#define CMD_176

23、0_RD_DEVID 0x09 /讀取芯片ID#define CMD_1760_G_ERASE 0x43 #define CMD_1760_RD_APC 0x44 /讀APC#define CMD_1760_WR_APC1 0x45#define CMD_1760_WR_APC2 0x65 /SPI模式下寫APC寄存器#define CMD_1760_WR_NVCFG 0x46 /永久寫入寄存器#define CMD_1760_CHK_MEM 0x49 /檢查環(huán)狀存儲(chǔ)器#define CMD_1760_SET_PLAY 0x80 /設(shè)置播放#define CMD_1760_SET_REC 0x

24、81#define CMD_1760_SET_ERASE 0x82 unsigned char bdata SR0_L;sbit bINT_1760 =SR0_L4;sbit bEOM =SR0_L3;sbit bPU_1760 =SR0_L2;sbit bFULL =SR0_L1;sbit bCMD_ERR =SR0_L0; unsigned char bdata SR0_H;unsigned char bdata SR1; sbit bREC_1760 =SR13;sbit bPLAY_1760 =SR12;sbit bERASE_1760 =SR11;sbit bRDY =SR10; u

25、nsigned char ID,APCL=0,APCH=0; WORD code aSpeech_Addr90=0x0010,0x0013,0x0014,0x0017,0x0018,0x 001C,0x001D,0x0020,0x0021,0x0024,0x0025,0x0028,0x0029,0x002D,0x002E,0x0032,0x0033,0x0037,0x0038,0x003C,0x003D,0x0042,0x0043,0x0047,0x0048,0x004C,0x004D,0x0051,0x0052,0x0059,0x005A,0x0061,0x0062,0x0069,0x006

26、A,0x0071,0x0072,0x0079,0x007A,0x0081,0x0082,0x008A,0x008B,0x0092,0x0093,0x009A,0x009B,0x00A0,0x00A1,0x00A7,0x00A8,0x00AE,0x00AF,0x00B8,0x00B9,0x00C2,0x00C3,0x00CB,0x00CC,0x00D1,0x00D2,0x00DA,0x00DB,0x00E0,0x00E1,0x00EA,0x00EB,0x00F5,0x00F6,0x00FE,0x00FF,0x0104,0x0105,0x0117,0x0118,0x0127,0x0128,0x01

27、33,0x0134,0x0140,0x0141,0x0147,0x0148,0x0154,0x0155,0x0158,0x0159,0x016E,0x016F,0x0170; void DelayX1ms(WORD count);/ISD1760BYTE ISD_SendByte(BYTE BUF_ISD); void ISD_Reset(void);void ISD_PU(void);void ISD_Rd_Status(void);void ISD_ClrInt(void);void ISD_CHK_MEM(void);void ISD_WR_APC2(BYTE voiceValue);void ISD_WR_NVCFG(void);void ISD_RDAPC(void);void ISD_PD(void);BYTE ISD_RDDevID(void);void

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論