1 引言
凌陽(yáng)科技公司推出的SPCE061A芯片具有語(yǔ)音播放的硬件條件,而且還提供了大量的語(yǔ)音播放的函數(shù)可供調(diào)用。但是由于SPCE061A片內(nèi)的FLASH存儲(chǔ)器只有32K,在播放大量語(yǔ)音資源時(shí)需要外擴(kuò)存儲(chǔ)器。本文使用SPCE061A與SPR4096實(shí)現(xiàn)大量語(yǔ)音播放。在操作SPR4096時(shí)使用凌陽(yáng)教育推廣中心最新推出的可視化工具ResWriter進(jìn)行對(duì)SPR4096的讀寫操作,使得在播放大量語(yǔ)音資源時(shí)也變得很容易。本文詳細(xì)論述了實(shí)現(xiàn)過(guò)程。
2 芯片與模組簡(jiǎn)介
2.1 SPCE061A特性簡(jiǎn)介
SPCE061A是凌陽(yáng)科技研發(fā)生產(chǎn)的性價(jià)比很高的一款十六位單片機(jī),使用它可以非常方便靈活的實(shí)現(xiàn)語(yǔ)音的錄放系統(tǒng),該芯片擁有8路10位精度的ADC,其中一路為音頻轉(zhuǎn)換通道,并且內(nèi)置有自動(dòng)增益電路。這為實(shí)現(xiàn)語(yǔ)音錄入提供了方便的硬件條件。兩路10精度的DAC,只需要外接功放(SPY0030A)即可完成語(yǔ)音的播放。另外凌陽(yáng)十六位單片機(jī)具有易學(xué)易用的效率較高的一套指令系統(tǒng)和集成開(kāi)發(fā)環(huán)境。在此環(huán)境中,支持標(biāo)準(zhǔn)C語(yǔ)言,可以實(shí)現(xiàn)C語(yǔ)言與凌陽(yáng)匯編語(yǔ)言的互相調(diào)用,并且,提供了語(yǔ)音錄放的庫(kù)函數(shù),只要了解庫(kù)函數(shù)的使用,就會(huì)很容易完成語(yǔ)音錄放,這些都為軟件開(kāi)發(fā)提供了方便的條件:
特性:
● 16位μ'nSP微處理器;
● 工作電壓:內(nèi)核工作電壓VDD為3.0~3.6V(CPU),I/O口工作電壓VDDH為VDD~5.5V(I/O);
● CPU時(shí)鐘:0.32MHz~49.152MHz;
● 內(nèi)置2K字SRAM;
● 內(nèi)置32K閃存ROM;
● 可編程音頻處理;
● 晶體振蕩器;
● 系統(tǒng)處于備用狀態(tài)下(時(shí)鐘處于停止?fàn)顟B(tài)),耗電小于2μA@3.6V;
● 2個(gè)16位可編程定時(shí)器/計(jì)數(shù)器(可自動(dòng)預(yù)置初始計(jì)數(shù)值);
● 2個(gè)10位DAC(數(shù)-模轉(zhuǎn)換)輸出通道;
● 32位通用可編程輸入/輸出端口;
● 14個(gè)中斷源可來(lái)自定時(shí)器A / B,時(shí)基,2個(gè)外部時(shí)鐘源輸入,鍵喚醒;
● 具備觸鍵喚醒的功能;
● 使用凌陽(yáng)音頻編碼SACM_S240方式(2.4K位/秒),能容納210秒的語(yǔ)音數(shù)據(jù);
● 鎖相環(huán)PLL振蕩器提供系統(tǒng)時(shí)鐘信號(hào);
● 32768Hz實(shí)時(shí)時(shí)鐘;
● 7通道10位電壓模-數(shù)轉(zhuǎn)換器(ADC)和單通道聲音模-數(shù)轉(zhuǎn)換器;
● 聲音模-數(shù)轉(zhuǎn)換器輸入通道內(nèi)置麥克風(fēng)放大器和自動(dòng)增益控制(AGC)功能;
● 具備串行設(shè)備接口;
● 低電壓復(fù)位(LVR)功和低電壓監(jiān)測(cè)(LVD)功能;
● 內(nèi)置在線仿真板(ICE,In- Circuit Emulator)接口。
2.2 SPR4096簡(jiǎn)介
SPR4096是凌陽(yáng)科技公司研發(fā)生產(chǎn)的性價(jià)比很高的512K*8位的高性能FLASH存儲(chǔ)器,同時(shí)內(nèi)嵌4K*8位的SRAM。具有BMI(Bus Memory Interface)接口與SIO(Serial Interface)接口。SPR4096提供兩種電源供電VDDI與VDDQ。VDDI供電范圍在2.25V到2.75V,是對(duì)內(nèi)部的FLASH與邏輯控制器供電。VDDQ供電范圍在2.25V到3.6V,只對(duì)I/O口供電。SPR4096的最大工作頻率為5.0MHz,最大讀取電流為2mA最大擦除、燒錄電流為6mA。
特性:
● 512K*8位的FLASH,256個(gè)扇區(qū),每個(gè)扇區(qū)為2K字節(jié)
● 可重復(fù)擦寫20000次
● 在自然條件下數(shù)據(jù)保存10年
● 4K*8位的SRAM
● 供電要求:
VDDI: 2.25V-2.75V
VDDQ:2.25V-3.6V
● 最大工作頻率:5.0MHz
● 最大擦除、燒錄電流:6.0mA
● 最大讀取電流:2.0mA
2.3 SPR模組介紹
2.3.1 基本特性與參數(shù)指標(biāo)
產(chǎn)品型號(hào):SPR MODULE V1.0
SPR模組工作電壓:3.3V
SPR模組外形尺寸:50mm×50mm
2.3.2 主要功能
針對(duì)凌陽(yáng)科技公司的存儲(chǔ)器芯片SPR4096/SPR1024,開(kāi)發(fā)的簡(jiǎn)易燒寫器。該燒寫器配合PC機(jī)ResWriter工具(凌陽(yáng)科技教育推廣中心提供,下文敘述),通過(guò)EZ-probe下載線,完成對(duì)SPR4096/1024存儲(chǔ)器芯片的擦除、寫入、校驗(yàn)等功能。并且在SPR模組上留有與SPCE061A單片機(jī)的接口,可以實(shí)現(xiàn)SPR模組與SPCE061A單片機(jī)組成的系統(tǒng)。
2.3.3 結(jié)構(gòu)框圖

圖 2.1 SPR模組結(jié)構(gòu)框圖
SPR模組預(yù)留兩個(gè)接口,一個(gè)接口是EZ-probe,這是在使用ResWriter工具對(duì)SPR4096/1024進(jìn)行燒寫時(shí)連接使用的,另一個(gè)是10PIN的排線,主要提供電源以及與SPCE061A連接使用。用戶請(qǐng)注意,SPR模組電路支持SPR4096和SPR1024,但只能同時(shí)對(duì)其中一種芯片進(jìn)行使用。SPR模組有兩種基本配置,一種為電路板加SPR4096芯片,另一種為電路板加SPR1024芯片,而且在使用時(shí)必須配備下載線使用。用戶在選購(gòu)時(shí)請(qǐng)您注意確認(rèn)是SPR模組_4096還是SPR模組_1024。
2.3.4 實(shí)物圖

圖 2.2 SPR模組_4096實(shí)物圖

圖 2.3 SPR模組_1024實(shí)物圖
2.3.5 注意事項(xiàng)
● SPR模組使用3.3V電源供電,注意不要使電源接反
● 模組必需配合下載線使用
● 在使用ResWriter工具對(duì)SPR4096/SPR1024芯片進(jìn)行燒寫時(shí)也需要對(duì)SPR模組供電
● 不能同時(shí)對(duì)SPR4096與SPR1024進(jìn)行燒寫
2.4 ResWriter工具簡(jiǎn)介
2.4.1 主要功能
ResWriter工具的主要功能:
● SPR1024/4096 Flash Memory 燒錄器:用PC printer port通過(guò)Easy Probe 燒錄SPR1024/4096,基本操作內(nèi)容包括Blank Check(空白檢查),Erase(刪除數(shù)據(jù)),Read(讀數(shù)據(jù)),Program(燒錄,寫入數(shù)據(jù)),Verify(校驗(yàn),檢查寫入是否正確);
● 文檔整合:把多個(gè)小文檔整合成一個(gè)大文檔,作為燒錄Flash的數(shù)據(jù)資料。
2.4.2 ResWriter工具的界面:

圖 2.4 Res Writer用戶界面
2.4.3 菜單介紹
● 界面:包括標(biāo)題欄、Menu Bar、ToolBar、Resource View Bar、View、Status Bar等。
● 標(biāo)題欄:<文檔名> Sunplus Res Writer;
● Menu Bar:見(jiàn)表一;
● ToolBar:包括Load Bin、Load Con、Save、Blank Check、Erase、Read、Program、Verify、Auto Operation、Help等;
● Resource View Bar:在開(kāi)始的地址空間顯示文檔索引表,接下來(lái)顯示讀進(jìn)來(lái)的小文檔的標(biāo)題,每個(gè)標(biāo)題對(duì)應(yīng)一段地址空間, Double Click某個(gè)小文檔標(biāo)題可以定位到對(duì)應(yīng)數(shù)據(jù)的起始地址,可以刪除某個(gè)小文檔標(biāo)題(以Popup Menu方式實(shí)現(xiàn),對(duì)應(yīng)的刪除本段數(shù)據(jù)),Index List不可刪除;
● View:左邊一列顯示地址,右邊十六列顯示數(shù)據(jù)(十六進(jìn)制);
● Status Bar:顯示Flash Type、Start Address、 End Address(由菜單"設(shè)置/操作地址"指定) 、Check Sum顯示燒錄數(shù)據(jù)的校驗(yàn)和(在Read和Program之后)、命令提示。
表 2.1菜單
| Menu Item | 功能描述 |
| 文件/載入二進(jìn)制文件 | 以Append的方式讀入多個(gè)要整合的*.bin文檔,作為Flash燒錄的數(shù)據(jù)資料。 |
| 文件/載入以整合文件 | 讀入已經(jīng)整合后的*.con文檔,作為Flash燒錄的數(shù)據(jù)資料。限制:一次只能讀入一個(gè),且讀入前關(guān)閉已有的文件 |
| 文件/存儲(chǔ) | 以*.con方式保存整合后的文檔 |
| 文件/退出 | 退出本軟件 |
| 查看 | 顯示或者隱藏Tool Bar/Status Bar/Resource View Bar等 |
| 設(shè)置/芯片型號(hào) | 設(shè)置要燒錄的芯片(SPR1024或SPR4096) |
| 設(shè)置/操作地址 | 設(shè)置對(duì)Flash操作的地址空間(Start & End Address) |
| 操作/Erase | 擦除整個(gè)Flash 中的數(shù)據(jù) |
| 操作/Blank Check | 檢查地址空間Start & End Address之間的數(shù)據(jù)是否為空白,即是否為0xFF |
| 操作/Read | 從Flash讀取地址空間Start & End Address中的數(shù)據(jù) |
| 操作/Program | 把文件Start & End Address地址間的數(shù)據(jù)寫到Flash相應(yīng)的地址空間中 |
| 操作/Verify | 檢查Flash地址空間Start & End Address中的數(shù)據(jù)與文檔中對(duì)應(yīng)空間的數(shù)據(jù)是否一致 |
| 操作/Auto | 根據(jù)"燒錄選項(xiàng)"的設(shè)置,執(zhí)行相應(yīng)的燒錄過(guò)程 |
| 燒錄選項(xiàng) | 選擇燒錄過(guò)程:Erase -> Program -> Verify;Erase -> Program;Program -> Verify;Program Only選擇后由"操作/Auto"實(shí)現(xiàn) |
| 幫助 | |
對(duì)文件(資源)的操作說(shuō)明:
● Resource View包括索引表和讀進(jìn)的各個(gè)小文檔標(biāo)題,索引表紀(jì)錄整合后文檔的長(zhǎng)度(total_file_length)、小文檔的個(gè)數(shù)、各個(gè)小文檔長(zhǎng)度和某個(gè)文檔段的起始地址等信息,把索引表放在開(kāi)始的一段地址空間,作為燒錄數(shù)據(jù)的一部分。小文檔標(biāo)題紀(jì)錄本文檔名稱、起始地址和長(zhǎng)度;
● 索引表格式:
在整合后的文件中,在正式的文件前面有索引表,方便用戶使用SPR4096中的資源。索引表的開(kāi)頭4個(gè)字節(jié)為"SPRW"特定校驗(yàn)字。然后是整合后文檔存放的起始地址與結(jié)束地址,分別用雙字?jǐn)?shù)據(jù)類型標(biāo)志。接下來(lái)存放的為整合前文件的個(gè)數(shù),用1個(gè)字來(lái)存放。然后依次為整合前文件的長(zhǎng)度,起始地址,結(jié)束地址。具體參考2.4.4索引表。
● 在Load文檔前提示用戶保存當(dāng)前的文檔,在Load文檔時(shí)檢查每個(gè)文檔的長(zhǎng)度,若這些文檔長(zhǎng)度之和+索引表的長(zhǎng)度(即整合后的文檔長(zhǎng)度:total_file_length)大于Flash的容量MaxLength(SPR1024/4096:128k/512k Bytes), 給出提示,超過(guò)MaxLength后將不能再Load文檔;
● 在Load Bin時(shí)如果文件名字與已有的文檔名字沖突,不能載入;
● 在燒錄操作之前需要檢查硬件是否正常連接;(此條不做)
● Blank Check后給出空白的信息,檢查過(guò)程中一旦踫到一個(gè)非空數(shù)據(jù),立即結(jié)束檢查,給出不是空白的信息;(空白數(shù)據(jù):0xFF)
● Read后給出信息提示用戶是否保存這段數(shù)據(jù)到*.bin文檔中,然后在Status Bar顯示Check Sum;
● Program之后給出是否成功的信息,在Status Bar顯示Check Sum;
● Verify后給出一致信息,校驗(yàn)過(guò)程中一旦踫到一個(gè)數(shù)據(jù)不一致立即結(jié)束校驗(yàn),給出不一致的信息;
● 執(zhí)行燒錄操作功能(Blank Check、Erase、Read、Program、Verify、Auto Operation)時(shí),有進(jìn)度顯示;
● 操作地址:
● Start Address默認(rèn)為00000H,End Address為total_file_length (整合后的文檔長(zhǎng)度:索引表的長(zhǎng)度+所有文檔的長(zhǎng)度),
● End Address刪除某個(gè)小文檔后,如果End Address < total_file_length,自動(dòng)更新為total_file_length,刪除某個(gè)小文檔后,若total_file_length < Start Address,自動(dòng)更新Start Address為00000H,
● 設(shè)置時(shí),如果Start Address < 00000H或 Start Address > End Address時(shí)給出提示,此時(shí)不修改,End Addressss < Start Address 或 End Address > total_file_length時(shí)給出提示,此時(shí)不修改;
● 文檔中在total_file_length與MaxLength之間數(shù)據(jù)以0xFF填充,Save時(shí)不保存這部分?jǐn)?shù)據(jù);
● 關(guān)閉本軟件時(shí)提示用戶保存整合后的文檔,以*.con方式保存。
2.4.4 索引表
為了便于使用數(shù)據(jù),在燒錄的時(shí)候要對(duì)數(shù)據(jù)文件進(jìn)行索引,這樣在使用的時(shí)候就可以知道數(shù)據(jù)存放在哪些地址,可以對(duì)文件進(jìn)行操作。
資源索引表格式:
考慮到存儲(chǔ)語(yǔ)音資源的實(shí)際使用情況,索引表包括4個(gè)字節(jié)的特定碼,整合后文檔的起始地址、結(jié)束地址、整合前文件的總個(gè)數(shù)、整合前每個(gè)文件的起始地址、結(jié)束地址。這些項(xiàng)目依次排列。4個(gè)字節(jié)的特定碼為SPRW(Sunplus Read Write)的ASCII碼。特定碼的作用主要是從芯片讀回的數(shù)據(jù)保存成文件后,在使用ResWriter工具打開(kāi)時(shí)進(jìn)行檢測(cè)。如果文件中存在特定碼說(shuō)明芯片中的數(shù)據(jù)是使用ResWriter工具燒錄的,這樣的文件可以在ResWriter工具中正確顯示,如圖 2.5所示:

圖 2.5 打開(kāi)整合后文件圖
如果沒(méi)有特定碼,那么芯片中的數(shù)據(jù)就不是通過(guò)ResWriter進(jìn)行燒錄的(SPR1024/SPR4096可以通過(guò)SPCE061A等單片機(jī)進(jìn)行讀寫操作,也可以使用AllWriter工具進(jìn)行讀寫操作),那么數(shù)據(jù)文件在ResWriter工具中顯示是沒(méi)有意義的。整合后文件的起始地址便于引用,結(jié)束地址便于檢查資源是否超出存儲(chǔ)范圍。整合前文件的起始、結(jié)束地址便于直接訪問(wèn)整合前的文件?紤]到文件名實(shí)際用處不大,整合后資源長(zhǎng)度可以通過(guò)結(jié)束地址與起始地址計(jì)算得出,在索引表中沒(méi)有保留。
索引表格式如下:
#define DWORD long int
#define WORD unsigned int
typedef struct //整合后的文件
{
DWORD StartAddress;
DWORD EndAddress;
}CONFLILE;
typedef struct //整合前的小文件
{
DWORD length;
DWORD StartAddress;
DWORD EndAddress;
}UNCONFILE;
typedef struct //索引表
{
"SPRW" ; //特定碼SPRW
CONFLILE Index1;
WORD unconfilenumber; //所有整合前小文件的個(gè)數(shù)
UNCONFILE Index2[unconfilenumber];
}INDEX;
如圖 2.6所示:在地址0x00000-0x00003為4字節(jié)的特定碼,在地址0x00004-0x00007為4字節(jié)的整合后文件的起始地址,在地址0x00008-0x0000B為4字節(jié)的整合后文件的結(jié)束地址,在地址0x0000C-0x0000D為2字節(jié)的整合前文件總數(shù)。然后每4字節(jié)分別為整合前第一個(gè)文件的長(zhǎng)度、起始地址、結(jié)束地址,一直到最后一個(gè)整合前文件的長(zhǎng)度、起始地址、結(jié)束地址。索引表結(jié)束,然后是文件的數(shù)據(jù)。

圖 2.6 索引表圖示
舉例說(shuō)明:如圖 2.7所示:53、50、52、57為特征碼SPRW的ASCII碼。00 00 00 3E為整合后文件的起始地址,00 00 A2 CF 為整合后文件的結(jié)束地址,00 04 為整合前文件的總個(gè)數(shù),本例中為4個(gè)文件,再接下來(lái)每4個(gè)字節(jié)為一組分別為整合前第一個(gè)文件的長(zhǎng)度、起始地址、結(jié)束地址,整合前第二個(gè)文件的長(zhǎng)度、起始地址、結(jié)束地址……索引表結(jié)束,然后是文件的數(shù)據(jù),如圖藍(lán)色部分為文件數(shù)據(jù)的開(kāi)始。

圖 2.7 舉例說(shuō)明索引表圖
2.5 SPLC501模組簡(jiǎn)介
由于SPLC501模組是大學(xué)計(jì)劃推出的較早的模組,如果讀者對(duì)這個(gè)模組的使用存在問(wèn)題可以到凌陽(yáng)大學(xué)計(jì)劃網(wǎng)站www.unsp.com.cn下載相關(guān)資料參考。
3 系統(tǒng)總體方案介紹
系統(tǒng)的結(jié)構(gòu)框圖如圖 3.1所示。

圖 3.1 系統(tǒng)的結(jié)構(gòu)框圖
在聲音的處理上主要采用凌陽(yáng)科技的語(yǔ)音壓縮格式,將需要播放的聲音壓縮存在SPR模組里面,然后通過(guò)61板將語(yǔ)音資源取出播放出來(lái)。在圖片的處理上,采用SPLC501液晶模組,使用配套的DM Tool工具將需要顯示的圖片實(shí)現(xiàn)提取出圖片資源燒寫到SPCE061A中,然后通過(guò)61板控制SPLC501A播放出來(lái)。
4 系統(tǒng)硬件設(shè)計(jì)
4.1 電源板電路模塊分析
圖 4.1是電源部分的電路,4.5V直流電壓經(jīng)過(guò)SPY0029后產(chǎn)生3.3V給整個(gè)系統(tǒng)供電。
SPY0029是凌陽(yáng)公司設(shè)計(jì)的電壓調(diào)整IC,采用CMOS工藝。SPY0029具有靜態(tài)電流低、驅(qū)動(dòng)能力強(qiáng)、線性調(diào)整出色等特點(diǎn)。
圖 4.1圖中的VDDH3為SPCE061A的I/O電平參考,接SPCE061A的51腳,這種接法使得I/O輸出高電平為3.3V;VDDP為PLL鎖相環(huán)電源,接SPCE061A的7腳;VDD和VDDA分別為數(shù)字電源與模擬電源,分別接SPCE061A的15腳和36腳;AVSS1是模擬地,接SPCE061A的24腳;VSS是數(shù)字地,接SPCE061A的38腳; AVSS2接音頻輸出電路的AVSS2。

圖 4.1電源電路圖
4.2 CPU語(yǔ)音輸出電路
SPCE061A內(nèi)置2路10位精度的DAC,只需要外接功放電路即可完成語(yǔ)音的播放。
圖 4.2是音頻輸出電路圖。可以直接聽(tīng)喇叭輸出的聲音。圖中的SPY0030也是凌陽(yáng)公司的產(chǎn)品。它的詳細(xì)說(shuō)明可以參見(jiàn)SPY0030 data sheet。和LM386相比,SPY0030還具有下述優(yōu)勢(shì),比如LM386工作電壓需在4V以上, SPY0030僅需2.4V即可工作(兩顆電池即可工作);LM386輸出功率100mW以下, SPY0030約700mW。其他特性請(qǐng)參考data sheet。

圖 4.2 CPU語(yǔ)音輸出電路
4.3 SPR模組電路
原理圖如圖 4.3所示:

圖 4.3 SPR模組硬件原理圖
SPR模組的硬件電路主要分成3大部分,下面分別介紹:
第一部分:ResWriter工具對(duì)SPR4096/SPR1024進(jìn)行燒寫的下載緩沖電路如圖 4.4所示:

圖 4.4 燒寫SPR4096/SPR1024硬件電路
此部分電路主要是控制SCK、SDA信號(hào)的作用,通過(guò)74HC244可以控制SDA信號(hào)的高低電平,這樣可以使用ResWriter工具發(fā)出符合燒寫芯片的時(shí)序信號(hào),完成對(duì)芯片的擦除、寫入與校驗(yàn)功能。
第二部分:SPR4096的工作電路,如圖 4.5所示:

圖 4.5 SPR4096工作電路
此部分工作電路是為了使SPR4096存儲(chǔ)器工作的外圍電路,通過(guò)SCK、SDA與控制芯片/電路相連。
第三部分:SPR1024的工作電路,如圖 4.6所示:

圖 4.6 SPR1024工作電路
此部分工作電路是為了使SPR1024存儲(chǔ)器工作的外圍電路,通過(guò)SCK、SDA與控制芯片/電路相連。
另外,SPR模組還有跳線、接口電路,如圖 4.7所示:

圖 4.7 SPR模組的接口跳線電路
5 系統(tǒng)軟件設(shè)計(jì)
在軟件設(shè)計(jì)上,由于語(yǔ)音資源存放在外部的存儲(chǔ)器上,只能采用手動(dòng)的方式播放語(yǔ)音。另外,需要對(duì)圖片的顯示,在播放語(yǔ)音的同時(shí)需要刷新圖片,這樣采用在中斷中填充語(yǔ)音隊(duì)列的方法來(lái)實(shí)現(xiàn)。
下面是主函數(shù)流程圖:

圖 5.1 主函數(shù)流程圖
在主函數(shù)中首先初始化SIO,這樣可以獲得存儲(chǔ)在SPR4096上的語(yǔ)音資源的起始地址與結(jié)束地址,這樣便于語(yǔ)音控制。
A2000語(yǔ)音播放函數(shù)設(shè)計(jì),由于語(yǔ)音資源存儲(chǔ)在外擴(kuò)存儲(chǔ)器SPR4096上,語(yǔ)音播放采用手動(dòng)播放方式。手動(dòng)語(yǔ)音播放,關(guān)鍵在于語(yǔ)音資源的取得,需要得到語(yǔ)音資源的地址。下面分析一下剛剛燒錄文件的數(shù)據(jù)格式,如圖:

圖 5.2 語(yǔ)音文件的數(shù)據(jù)格式
在上圖的前4個(gè)字節(jié)為"SPRW"的ASCII碼,主要的目的在于讀取Flash中的文件作為特征碼使用(請(qǐng)參考2.4.4節(jié)索引表部分),在接下來(lái)的4個(gè)字節(jié)為整合后文件的起始地址00 00 00 56(由于SPR4096的最大地址為0x7ffff,所以使用4個(gè)字節(jié)標(biāo)識(shí),即兩個(gè)字的長(zhǎng)度),然后是整合后文件的結(jié)束地址。整合的概念,就是將多個(gè)資源小文件通過(guò)特定的數(shù)據(jù)格式編成一個(gè)索引表加在資源文件的開(kāi)始,然后是資源文件1,資源文件2……ResWriter工具在用戶打開(kāi)文件時(shí)自動(dòng)的完成上述過(guò)程,稱為整合。ResWriter工具是對(duì)整合后的文件進(jìn)行燒錄。在接下來(lái)2個(gè)字節(jié)(00 01)的數(shù)據(jù)表示整合的文件有1個(gè)資源。
以上是整合后文件的一些信息,再接下來(lái)分別是添加的語(yǔ)音資源的長(zhǎng)度信息,文件起始存儲(chǔ)地址,文件結(jié)束存儲(chǔ)地址。在本例編程中主要關(guān)心的就是語(yǔ)音資源文件起始地址、結(jié)束地址。由圖 5.2可見(jiàn)第一個(gè)文件(未整合的)的起始地址存放在0x0012、0x0013(第13、14個(gè)字節(jié)),在程序中可以依次求得語(yǔ)音資源。參考下面手動(dòng)播放語(yǔ)音的函數(shù)。
ulCon_AddrHighest = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12); // 第一個(gè)播放文件地址
ulCon_AddrHighest = ulCon_AddrHighest << 24;
ulCon_AddrHigh =SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12+1);
ulCon_AddrHigh = ulCon_AddrHigh << 16;
ulCon_AddrLow = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12+2);
ulCon_AddrLow = ulCon_AddrLow << 8;
ulCon_AddrLowest = SP_SIOReadAByte(BASE_START_ADDRESS + SndIndex*12+3);
ulCon_StartAddr = ulCon_AddrHighest | ulCon_AddrHigh // 開(kāi)始地址
| ulCon_AddrLow | ulCon_AddrLowest;
其中BASE_START_ADDRESS定義為0x0012,每個(gè)地址采用4個(gè)字節(jié)存儲(chǔ),在分別取得地址后通過(guò)移位然后或操作得到地址。參數(shù)SndIndex是由調(diào)用函數(shù)傳遞過(guò)來(lái)的,意義在于使用第幾段語(yǔ)音資源。比如使用第一段語(yǔ)音資源,那么傳過(guò)來(lái)0就可以了,與采用自動(dòng)方式播放語(yǔ)音類似。BASE_START_ADDRESS 是整合后文件的信息長(zhǎng)度,在取得整合前文件的信息的時(shí)候要跳過(guò)這一段數(shù)據(jù),即BASE_START_ADDRESS + SndIndex*12為第一段整合前數(shù)據(jù)文件的起始地址的最高字節(jié)(地址采用4個(gè)字節(jié)表示)。
SPCE061A播放語(yǔ)音的原理如圖 5.3所示:

圖 5.3 使用SPCE061A實(shí)現(xiàn)播放語(yǔ)音
手動(dòng)播放語(yǔ)音的實(shí)現(xiàn),如圖 5.4所示:

圖 5.4 手動(dòng)播放語(yǔ)音
語(yǔ)音播放的解碼部分放在1KHz的中斷中進(jìn)行,這樣可以在播放語(yǔ)音的時(shí)候不影響圖片的顯示。
在中斷中的函數(shù)代碼如下:
void BMP_Play_IRQ_Service(void)
{
IRQ1KHz_Couter++; //Counter自加1,用于計(jì)時(shí),在主函數(shù)中判斷時(shí)間到
while(SACM_A2000_TestQueue() != 1)
{
if(ulCon_StartAddr >= ulCon_EndAddr)
{
ulCon_StartAddr = ulStart_Save;
SACM_A2000_Initial(0); //放音初始化
SACM_A2000_InitQueue();
SACM_A2000_InitDecoder(3);
}
uiRet = SP_SIOReadAWord(ulCon_StartAddr);
SACM_A2000_FillQueue(uiRet);
ulCon_StartAddr++;
ulCon_StartAddr++;
}
SACM_A2000_Decoder();
*(unsigned int *)0x7012 = 0x0001;
}
如果解碼隊(duì)列為空,那么進(jìn)行填充隊(duì)列操作,否則只進(jìn)行解碼操作,然后請(qǐng)看門狗退出中斷。
6 驗(yàn)證方案
步驟一:使用10Pin排線將SPR模組與61板的正電源、IOB0、IOB1、負(fù)電源對(duì)應(yīng)相連,61板I/O口選擇3.3V。
步驟二:使用EZ-probe與SPR模組EZ-probe接口相連。
步驟三:按照下圖設(shè)置SPR模組跳線:

圖 6.1 跳線設(shè)置
步驟四:?jiǎn)?dòng)ResWriter工具,打開(kāi)語(yǔ)音文件想大聲說(shuō)愛(ài)你.16K(SPR Module配套資料\SPR Module Demo\SLAMDUNK\voice路徑下),點(diǎn)擊自動(dòng)燒寫按鈕。如圖:

圖 6.2 打開(kāi)語(yǔ)音文件

圖 6.3 打開(kāi)語(yǔ)音文件后ResWriter工具視圖

圖 6.4 點(diǎn)擊自動(dòng)燒寫工具按鈕

圖 6.5 自動(dòng)燒錄過(guò)程

圖 6.6 自動(dòng)校驗(yàn)過(guò)程

圖 6.7 完成自動(dòng)燒錄
注意:如果沒(méi)有正確燒錄,那么主要的原因是電源沒(méi)有接入或者跳線選擇錯(cuò)誤。
步驟五:按照下圖選擇跳線:

圖 6.8 跳線選擇
步驟六:將液晶模組、SPR模組與61板按照下圖連接起來(lái),如圖:

圖 6.9 硬件連接圖
步驟七:使用IDE將工程文件(SPR Module配套資料\SPR Module Demo\SLAMDUNK路徑下)下載到61板上運(yùn)行,現(xiàn)象是同時(shí)播放聲音與圖片(無(wú)需任何操作)。
注意:如果沒(méi)能聽(tīng)見(jiàn)語(yǔ)音播放,請(qǐng)注意硬件連線喇叭是否接好,跳線是否設(shè)置好。
7 結(jié)語(yǔ)
通過(guò)上面的應(yīng)用方案可以看到,在需要存儲(chǔ)大量資源包括語(yǔ)音資源可以采用凌陽(yáng)科技有限公司的存儲(chǔ)器來(lái)解決。凌陽(yáng)科技推出的存儲(chǔ)器保存資料安全可靠,配備可視化工具使用方便。在與單片機(jī)相連時(shí)采用并行串行可選的方式傳遞數(shù)據(jù),給用戶帶來(lái)了極大的方便。在方案中看到通過(guò)工具燒錄的資源可以通過(guò)索引表來(lái)使用語(yǔ)音資源,而且可以播放語(yǔ)音資源,進(jìn)行語(yǔ)音的錄放,在不同的壓縮格式中都可以較長(zhǎng)時(shí)間的播放語(yǔ)音。在需要顯示圖片的時(shí)候可以考慮使用凌陽(yáng)科技提供的SPLC501液晶,而且已經(jīng)有了底層驅(qū)動(dòng)程序,用戶只需要直接調(diào)用顯示函數(shù)即可完成顯示。
8 參考文獻(xiàn)
[1] 羅亞非.凌陽(yáng)16位單片機(jī)應(yīng)用基礎(chǔ)[M]. 北京:北京航空航天大學(xué)出版社,2003
[2] 凌陽(yáng)大學(xué)計(jì)劃網(wǎng)站www.unsp.com.cn