本發(fā)明屬于信號(hào)處理技術(shù)領(lǐng)域,具體涉及一種基于ARM的多通道聲音信號(hào)采集系統(tǒng)。
背景技術(shù):
信號(hào)處理是對(duì)各種類型的電信號(hào),按各種預(yù)期目的和要求進(jìn)行加工過程的統(tǒng)稱。信號(hào)有模擬信號(hào)和和數(shù)字信號(hào)之分,對(duì)模擬信號(hào)的處理稱為模擬信號(hào)處理,對(duì)數(shù)字信號(hào)的處理稱為數(shù)字信號(hào)處理。信號(hào)采集屬于信號(hào)處理的第一環(huán)節(jié),信號(hào)只有先經(jīng)過采集才能進(jìn)行下一步的處理。換而言之,信號(hào)處理的對(duì)象只能通過信號(hào)采集得到。因此,信號(hào)采集對(duì)于后期信號(hào)的處理有著至關(guān)重要的影響。當(dāng)代計(jì)算機(jī)由于其強(qiáng)大的計(jì)算能力,是目前信號(hào)處理的主要工具,由于計(jì)算機(jī)只能接受數(shù)字信號(hào),因此模擬信號(hào)需通過AD(模數(shù)轉(zhuǎn)換)轉(zhuǎn)化為數(shù)字信號(hào)才能被計(jì)算機(jī)處理。
聲音信號(hào)是自然界常見的模擬信號(hào),聲音信號(hào)處理是信號(hào)處理領(lǐng)域的一個(gè)分支。同理,在聲音信號(hào)處理之前,需進(jìn)行聲音信號(hào)的采集,此處的“采集”指的是將屬于模擬信號(hào)的聲音信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),以供計(jì)算機(jī)系統(tǒng)處理。目前市場(chǎng)上常見的聲音信號(hào)采集系統(tǒng),主要由AD模塊和DSP或FPGA組成。此類聲音信號(hào)采集系統(tǒng)往往具備采樣速率高、多通道采樣、AD精度高、實(shí)時(shí)性好等優(yōu)點(diǎn),甚至有些采集系統(tǒng)還集成了簡(jiǎn)單信號(hào)處理的功能,可直接輸出處理之后的數(shù)據(jù)。但此類系統(tǒng)往往價(jià)格昂貴,尤其是高精度高速度的采集系統(tǒng)。且此類系統(tǒng)內(nèi)部含有DSP或FPGA等模塊,往往需要對(duì)其進(jìn)行編程,系統(tǒng)硬件復(fù)雜度和軟件復(fù)雜度均較高。這些因素導(dǎo)致了此類聲音信號(hào)采集系統(tǒng)不利于大范圍推廣。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對(duì)現(xiàn)有技術(shù)的不足,提供一種基于ARM的多通道聲音信號(hào)采集系統(tǒng)。本發(fā)明能有效解決上述缺陷,不僅能對(duì)聲音信號(hào)進(jìn)行多通道高速采集、實(shí)時(shí)采集,還能將采集的數(shù)據(jù)進(jìn)行存儲(chǔ)或?qū)崟r(shí)處理。且本發(fā)明降低了硬件、軟件的復(fù)雜度,降低了系統(tǒng)成本。本發(fā)明可以應(yīng)用在多種涉及到聲音信號(hào)采集的場(chǎng)合,例如環(huán)境噪聲源的識(shí)別定位系統(tǒng)、地下管線防破壞監(jiān)測(cè)系統(tǒng)等場(chǎng)合。
為實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種基于ARM的多通道聲音信號(hào)采集系統(tǒng),核心部分包括ARM平臺(tái)、AD模塊、聲音信號(hào)傳感器模塊,另外包括前端調(diào)理電路、SDRAM模塊、NandFlash模塊、SD卡模塊、以太網(wǎng)接口、串口接口。
聲音信號(hào)傳感器模塊包含4個(gè)聲音傳感器探頭,將4路聲音信號(hào)轉(zhuǎn)化為模擬信號(hào),然后輸出至前端調(diào)理電路,在前端調(diào)理電路中將傳感器輸出的模擬信號(hào)進(jìn)行調(diào)理;前端調(diào)理電路位于聲音信號(hào)傳感器模塊和AD模塊之間,前端調(diào)理電路將調(diào)理后的模擬信號(hào)輸入到AD模塊的4個(gè)輸入通道;AD模塊分別將4路模擬信號(hào)進(jìn)行AD轉(zhuǎn)換得到對(duì)應(yīng)的數(shù)字信號(hào),并將4路數(shù)字信號(hào)按照特定的順序通過SPI總線傳輸至ARM平臺(tái),ARM平臺(tái)將接收的數(shù)據(jù)存儲(chǔ)至SD卡模塊或直接進(jìn)行處理;ARM平臺(tái)同時(shí)與SDRAM模塊、NandFlash模塊、SD卡模塊相連接,其中SD卡模塊用于存儲(chǔ)ARM平臺(tái)接收到的聲音信號(hào)數(shù)據(jù),NandFlash模塊和SDRAM模塊分別用于程序數(shù)據(jù)的存儲(chǔ)和程序的運(yùn)行;同時(shí)ARM平臺(tái)通過串口接口和以太網(wǎng)接口與外界進(jìn)行通信,進(jìn)行信息交互。
本發(fā)明的核心技術(shù)在于AD模塊和ARM平臺(tái)以及兩者的協(xié)同工作。下面詳細(xì)介紹AD模塊和ARM平臺(tái)以及兩者之間如何協(xié)同工作。
AD模塊的核心是TI公司的ADS1278芯片。該芯片是24位8通道AD芯片,可同時(shí)對(duì)8路模擬信號(hào)進(jìn)行轉(zhuǎn)換,采樣率可調(diào)且最高采樣率可達(dá)144KHz。該芯片有AIN[8:1]共8組模擬量輸入引腳,本發(fā)明用到了前四組模擬量輸入引腳AIN[4:1],將前四組模擬量輸入引腳AIN[4:1]與前端調(diào)理電路輸出端相連。根據(jù)采樣率、采樣精度、功耗的不同,該芯片有四種工作模式可選:Hight-Speed模式、Hight-Resolution模式、Low-Power模式和Low-Speed模式。且四種工作模式的選擇,完全通過芯片的MODE0引腳(34號(hào)引腳)和MODE1引腳(33號(hào)引腳)來控制,無需配置任何寄存器。本發(fā)明采用的工作模式是Low-Power模式,即該芯片需要將MODE0引腳接低電平,MODE1引腳接高電平。該芯片轉(zhuǎn)換后的數(shù)據(jù)通過芯片的串行接口輸出,數(shù)據(jù)輸出支持兩種串行接口協(xié)議:SPI協(xié)議或Frame-Sync協(xié)議,且支持多種數(shù)據(jù)輸出格式。數(shù)據(jù)輸出的串行接口協(xié)議和數(shù)據(jù)輸出格式的選擇完全通過FORMAT[2:0](30~32號(hào)引腳)三個(gè)引腳來控制。本發(fā)明將FORMAT[2:0]三個(gè)引腳接低電平,選擇SPI協(xié)議輸出數(shù)據(jù),輸出數(shù)據(jù)格式為TDM格式。此配置下,該芯片上與數(shù)據(jù)輸出相關(guān)引腳有SCLK引腳(28號(hào)引腳)、DOUT1引腳(20號(hào)引腳)和DRDY/FSYNC引腳(29號(hào)引腳)。其中SCLK引腳為SPI協(xié)議的時(shí)鐘引腳,本發(fā)明中該芯片作為SPI從機(jī),ARM平臺(tái)作為SPI主機(jī),故SPI時(shí)鐘由ARM平臺(tái)輸出至SCLK引腳(28號(hào)引腳)。DOUT1引腳為轉(zhuǎn)換后數(shù)據(jù)輸出引腳,此配置下,每次采樣,各個(gè)通道的轉(zhuǎn)換數(shù)據(jù)將按照一定的順序輸出到SPI總線上,通過DOUT1引腳即可讀取SPI總線上的數(shù)據(jù)。本發(fā)明使用了通道1~4共4個(gè)通道,故每次采樣,DOUT1按照通道1、通道2、通道3、通道4的順序依次輸出這四個(gè)通道的轉(zhuǎn)換結(jié)果。DRDY/FSYNC引腳的信號(hào)為數(shù)據(jù)輸出就緒狀態(tài)標(biāo)識(shí),當(dāng)DRDY/FSYNC引腳為高電平時(shí),數(shù)據(jù)不可讀;當(dāng)為低電平時(shí),數(shù)據(jù)可讀。即DRDY/FSYNC引腳的下降沿信號(hào)標(biāo)志著數(shù)據(jù)可讀,此時(shí)各通道的轉(zhuǎn)換數(shù)據(jù)隨著SPI時(shí)鐘按順序輸出到DOUT1引腳,ARM平臺(tái)從DOUT1引腳即可讀取轉(zhuǎn)換后的數(shù)據(jù)。此配置下,只要ADS1278的SCLK引腳有時(shí)鐘信號(hào)輸入,AD模塊就會(huì)工作,將各通道的采樣數(shù)據(jù)依次輸出至SPI總線,從DOUT1引腳即可讀取數(shù)據(jù)。
ADS1278芯片最多能支持8通道同時(shí)采樣,當(dāng)所用通道數(shù)低于8個(gè)時(shí),可通過PWDN[8:1]引腳(35~42號(hào)引腳)將不需要用的通道關(guān)閉。PWDN[8:1]引腳與8個(gè)通道一一對(duì)應(yīng),當(dāng)某個(gè)PWDN引腳接低電平時(shí),對(duì)應(yīng)的通道則關(guān)閉。本發(fā)明用到了前4個(gè)通道,需將后四個(gè)通道關(guān)閉,故將PWDN[8:5]四個(gè)引腳接低電平,PWDN[4:1]四個(gè)引腳接高電平。另外,本發(fā)明用外接10MHz的晶振作為該芯片的時(shí)鐘源,將CLKDIV引腳(10號(hào)引腳)接高電平,根據(jù)芯片手冊(cè)計(jì)算公式,可算出采樣頻率為10MHz/512≈19531Hz。該芯片其他配置可參考TI公司官方的ADS1278芯片手冊(cè)。
ARM平臺(tái)采用集成了EDMA功能模塊的ARM架構(gòu)CPU。由于AD模塊采樣率較高,AD模塊將產(chǎn)生大量數(shù)據(jù),而ARM平臺(tái)要將數(shù)據(jù)進(jìn)行存儲(chǔ)或處理就必然涉及到數(shù)據(jù)的拷貝工作。因此本發(fā)明使用ARM平臺(tái)的EDMA功能來完成數(shù)據(jù)的拷貝工作,以使數(shù)據(jù)拷貝工作盡可能少占用CPU資源,將CPU資源盡可能的分配給系統(tǒng)其它任務(wù)。
本發(fā)明采用TI公司的AM335x系列處理器作為ARM平臺(tái),具體芯片型號(hào)推薦使用AM3354。AM335x系列處理器采用ARM Cortex A8內(nèi)核,最高主頻可達(dá)720MHz,集成有2個(gè)工業(yè)用千兆以太網(wǎng)MAC以及UART、McSPI和EDMA等常用外設(shè)模塊。ARM平臺(tái)負(fù)責(zé)從AD模塊讀取數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)或處理,及與外界進(jìn)行通信等工作。ARM平臺(tái)上移植了強(qiáng)大的嵌入式Linux操作系統(tǒng),整個(gè)系統(tǒng)的軟件復(fù)雜功能和硬件資源管理都在Linux系統(tǒng)上實(shí)現(xiàn)。
本發(fā)明中,AD模塊輸出的聲音信號(hào)數(shù)據(jù)使用了SPI協(xié)議,涉及AM335x的McSPI功能模塊和EDMA功能模塊。SPI是串行外設(shè)接口,是一種高速的、全雙工同步通信總線,且在芯片管腳上只占用4根信號(hào)線。SPI以主從模式工作,通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,通信時(shí)用到4根信號(hào)線(實(shí)際上當(dāng)單向通信時(shí)使用3根信號(hào)線也可以)。這四根信號(hào)線分別是時(shí)鐘信號(hào)SCLK、主入從出數(shù)據(jù)線MISO、主出從入數(shù)據(jù)線MOSI和從設(shè)備片選信號(hào)線CS。其中,SCLK信號(hào)線只由主設(shè)備控制,通信的時(shí)鐘信號(hào)SCLK由主設(shè)備提供。根據(jù)時(shí)鐘信號(hào)相位(PHA)和時(shí)鐘極性(POL)的不同組合,SPI有模式0~3共4中工作模式,分別對(duì)應(yīng)4種不同數(shù)據(jù)傳輸時(shí)序。McSPI是AM335x內(nèi)部集成的多通道SPI功能模塊,可作為主設(shè)備外接從設(shè)備,也可作為從設(shè)備工作于從機(jī)模式。AM335x共集成有兩個(gè)多通道SPI(SPI0和SPI1),支持時(shí)鐘頻率可調(diào),SPI字長可調(diào),且有4個(gè)數(shù)據(jù)傳輸通道(通道0~3)可選,有數(shù)據(jù)收發(fā)緩存。通過配置AM335x的相關(guān)寄存器,可對(duì)時(shí)鐘頻率、工作模式、SPI字長等進(jìn)行設(shè)置。
本發(fā)明使用了AM335x的McSPI功能模塊,具體用到引腳為SPI1_CLK引腳(52號(hào)引腳)、SPI1_MISO引腳(53號(hào)引腳)、SPI1_CS0引腳(33號(hào)引腳)。且AM335x的SPI1_CLK引腳與ADS1278的SCLK相連,SPI1_MISO引腳與ADS1278的DOUT1相連,SPI1_CS0引腳與ADS1278的DRDY/FSYNC引腳相連。在本發(fā)明中,AM335x作為SPI通信的主機(jī),AD模塊作為從機(jī),配置相關(guān)寄存器使AM335x工作在主機(jī)只接收模式(Master Receive-Only mode),此時(shí)時(shí)鐘信號(hào)由AM335x提供,且只要ADS1278的SCLK引腳有時(shí)鐘信號(hào)輸入,AD模塊就會(huì)開始工作,將各通道的采樣數(shù)據(jù)依次輸出至SPI總線,從DOUT1引腳即可讀取數(shù)據(jù)。AM335x只負(fù)責(zé)從ADS1278讀數(shù)據(jù)而不給它發(fā)送數(shù)據(jù),故AM335x的SPI1_MOSI引腳(54號(hào)引腳)并未用到。由于整個(gè)系統(tǒng)只有一臺(tái)從設(shè)備,本發(fā)明中AM335x的SPI1_CS0引腳的信號(hào)并非從設(shè)備片選信號(hào),而是EDMA數(shù)據(jù)傳輸?shù)挠|發(fā)信號(hào);另外,本發(fā)明需使能SPI1的通道0作為數(shù)據(jù)傳輸通道,配置POL=0和PHA=0,使SPI工作在模式0,由于ADS1278的精度是24位,故配置SPI字長為24位,且使用SPI1自帶的長度為64字節(jié)的FIFO作為數(shù)據(jù)接收緩存。
本發(fā)明中,ARM平臺(tái)首先將AD模塊的數(shù)據(jù)讀取至SPI1的FIFO中,還需要將FIFO中的數(shù)據(jù)拷貝至內(nèi)存,以供AM335x處理。由于采樣率較高,數(shù)據(jù)量較大,若數(shù)據(jù)的拷貝工作由CPU來完成,則會(huì)占用大量的CPU資源,嚴(yán)重降低效率,不符合實(shí)際應(yīng)用需求。故本發(fā)明利用AM335x自帶的EDMA模塊來完成數(shù)據(jù)拷貝工作,無需CPU干預(yù),最大限度的減少CPU資源的占用,使系統(tǒng)分配更多CPU資源給其它任務(wù)。
AM335x的EDMA有多達(dá)64個(gè)DMA通道,用于數(shù)據(jù)傳輸,且這些通道支持多種觸發(fā)方式:外部事件觸發(fā),通過寫相應(yīng)寄存器來手動(dòng)觸發(fā)和鏈?zhǔn)接|發(fā)。具有多達(dá)256個(gè)參數(shù)項(xiàng)(PaRAM entry),這些參數(shù)項(xiàng)有自己的地址,其內(nèi)容包含各種字段,這些字段描述了數(shù)據(jù)傳輸?shù)木唧w細(xì)節(jié),如數(shù)據(jù)的源地址、目的地址、數(shù)據(jù)在源地址目的地址的排列方式等。且這些參數(shù)項(xiàng)支持鏈接機(jī)制(Linking mechanism),該機(jī)制能讓參數(shù)項(xiàng)自動(dòng)更新,可利用該機(jī)制實(shí)現(xiàn)ping-pong緩存??赏ㄟ^配置AM335x相關(guān)寄存器將EDMA的通道與參數(shù)項(xiàng)進(jìn)行綁定。AM335x的EDMA支持三維數(shù)據(jù)傳輸,以ACNT個(gè)字節(jié)的數(shù)據(jù)作為一個(gè)組(Array),BCNT個(gè)組作為一幀(Frame),CCNT個(gè)幀為一個(gè)塊(Block),因此一個(gè)數(shù)據(jù)塊共有ACNT×BCNT×CCNT個(gè)字節(jié)的數(shù)據(jù)。無論是源地址處還是目的地址處,數(shù)據(jù)塊中的數(shù)據(jù)不一定相鄰,可能是分散的,組(Array)之間的偏移由SRCBIDX/DSTBIDX參數(shù)決定,幀(Frame)之間的偏移由SRCCIDX/DSTCIDX參數(shù)決定。以上參數(shù)均屬于參數(shù)項(xiàng)的字段,可通過編程設(shè)置。EDMA的數(shù)據(jù)傳輸有兩種模式可選:A同步傳輸(A-Synchronized Transfers)和AB同步傳輸(AB-Synchronized Transfers),前者每次傳輸一組數(shù)據(jù)(即ACNT字節(jié)數(shù)據(jù)),共需要BCNT×CCNT次傳輸才能完成一個(gè)數(shù)據(jù)塊的傳輸;后者每次傳輸一幀數(shù)據(jù)(即ACNT×BCNT字節(jié)數(shù)據(jù)),共需要CCNT次傳輸才能完成一個(gè)數(shù)據(jù)塊的傳輸。
本發(fā)明利用EDMA功能模塊中參數(shù)項(xiàng)的鏈接機(jī)制,使用兩個(gè)參數(shù)項(xiàng)來實(shí)現(xiàn)ping-pong緩存,以解決數(shù)據(jù)傳輸與CPU處理速度不匹配問題。具體做法是,在內(nèi)存中申請(qǐng)一塊ping緩存和一塊相同大小的pong緩存,申請(qǐng)EDMA的兩個(gè)參數(shù)項(xiàng),分別記為參數(shù)項(xiàng)A和參數(shù)項(xiàng)B,參數(shù)項(xiàng)A、B的數(shù)據(jù)源地址相同,均設(shè)置為SPI1的FIFO地址,參數(shù)項(xiàng)A、B的目的地址分別為ping緩存地址和pong緩存地址,參數(shù)項(xiàng)A的LINK字段設(shè)為參數(shù)項(xiàng)B的地址,參數(shù)項(xiàng)B的LINK字段設(shè)為參數(shù)項(xiàng)A的地址,兩參數(shù)項(xiàng)其它內(nèi)容相同。如此,每次傳輸任務(wù)的完成,數(shù)據(jù)傳輸?shù)哪康牡刂窌?huì)自動(dòng)在ping緩存和pong緩存之間切換,當(dāng)下一次傳輸任務(wù)開始時(shí),數(shù)據(jù)的目的地址就已經(jīng)切換完成。因此,本次將數(shù)據(jù)傳輸至ping緩存,下次則會(huì)將數(shù)據(jù)傳輸至pong緩存,再下次又會(huì)將數(shù)據(jù)傳輸至ping緩存。當(dāng)數(shù)據(jù)傳輸?shù)絧ing緩存時(shí),CPU能夠處理pong緩存的數(shù)據(jù),當(dāng)數(shù)據(jù)傳輸?shù)絧ong緩存時(shí),CPU能夠處理ping緩存的數(shù)據(jù)。這種工作狀態(tài)不停切換,就能實(shí)現(xiàn)數(shù)據(jù)的邊采集邊處理,兩者同步進(jìn)行。
由于本發(fā)明中,AD模塊的精度是24位,且每次采樣4個(gè)AD通道的數(shù)據(jù)均從ADS1278的DOUT1引腳輸出,為配合AD模塊,設(shè)置EDMA數(shù)據(jù)傳輸為AB同步模式,且設(shè)置ACNT=3,BCNT=4,即每個(gè)通道的數(shù)據(jù)為一組(Array),每次采樣的數(shù)據(jù)為一幀(Frame)。至于CCNT的設(shè)置,則依據(jù)實(shí)際希望CPU每次處理多少數(shù)據(jù)以及實(shí)際的采樣頻率(FS)而定。例如希望每次采集K秒的數(shù)據(jù)給CPU處理,則CCNT=FS×K。隨著ACNT、BCNT、CCNT的確定,則需申請(qǐng)的ping緩存和pong緩存的大小也就確定了,其大小等于ACNT×BCNT×CCNT個(gè)字節(jié)。本發(fā)明需要使用外部事件來觸發(fā)EDMA傳輸數(shù)據(jù),具體使用的是AM335x的SPI1_CS0引腳信號(hào)作為觸發(fā)信號(hào),即ADS1278的DRDY/FSYNC引腳下降沿信號(hào)來觸發(fā)EDMA數(shù)據(jù)傳輸,即每次ADS1278采樣,EDMA傳輸一次數(shù)據(jù)。以上配置涉及的寄存器,均可查詢TI公司官方的AM335x芯片手冊(cè),限于篇幅,本說明書對(duì)此部分內(nèi)容不再贅述。
本發(fā)明有益效果如下:
本發(fā)明使用ARM平臺(tái)作為系統(tǒng)的處理器,不同于市場(chǎng)上常見的使用DSP+FPGA的方案,減少了系統(tǒng)成本,且降低了軟硬件復(fù)雜度。本發(fā)明不僅可以將聲音數(shù)據(jù)采集存儲(chǔ)至SD卡,且由于ping-pong緩存技術(shù)的使用,大大降低了數(shù)據(jù)采集對(duì)ARM平臺(tái)中CPU的占用,在以極小的資源實(shí)現(xiàn)采集任務(wù)的同時(shí),為后續(xù)對(duì)數(shù)據(jù)的進(jìn)一步的實(shí)時(shí)處理預(yù)留了大量的時(shí)間和資源。本發(fā)明預(yù)留有豐富的通信接口,方便系統(tǒng)與外界進(jìn)行信息交互。本發(fā)明在ARM平臺(tái)上移植了嵌入式Linux系統(tǒng),系統(tǒng)的所有軟件功能和硬件資源分配均在Linux系統(tǒng)上實(shí)現(xiàn),提高了系統(tǒng)資源管理的效率,同時(shí)降低了后續(xù)功能拓展或定制的難度,便于該系統(tǒng)的進(jìn)一步推廣使用。
附圖說明
圖1為本發(fā)明的系統(tǒng)硬件架構(gòu)圖;
圖2位本發(fā)明的系統(tǒng)功能流程圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明做進(jìn)一步說明。
一種基于ARM的多通道聲音信號(hào)采集系統(tǒng),需要實(shí)現(xiàn)的基本功能是:
1)利用AD模塊將4路聲音信號(hào)進(jìn)行采集并轉(zhuǎn)換成數(shù)字信號(hào),并通過SPI協(xié)議,將轉(zhuǎn)換得到的數(shù)字信號(hào)輸入到ARM平臺(tái);
2)在ARM平臺(tái)上,利用自帶的EDMA功能,實(shí)現(xiàn)ping-pong緩存,將來自AD模塊的數(shù)據(jù)存入ping-pong緩存;
3)在ARM平臺(tái)上,將ping-pong緩存中的數(shù)據(jù)存入SD卡模塊,或直接對(duì)數(shù)據(jù)進(jìn)行處理,實(shí)現(xiàn)對(duì)聲音信號(hào)的邊采集邊處理;
4)系統(tǒng)預(yù)留出串口接口、以太網(wǎng)接口等通信接口,方便系統(tǒng)與外部的信息交互。
本發(fā)明硬件功能和軟件功能的具體劃分如下:
硬件功能具體如下:
1)聲音信號(hào)傳感器模塊將外界的4路聲音信號(hào)轉(zhuǎn)化成電信號(hào),并輸入到前端調(diào)理電路,此過程的信號(hào)為模擬信號(hào);
2)前端調(diào)理電路完成對(duì)模擬信號(hào)的調(diào)理,并將調(diào)理后的信號(hào)輸入到AD模塊,此過程的信號(hào)仍是模擬信號(hào);
3)AD模塊完成對(duì)前端調(diào)理電路輸出的模擬信號(hào)的采集并將其轉(zhuǎn)換成數(shù)字信號(hào),輸入到ARM平臺(tái),此過程的信號(hào)為數(shù)字信號(hào)。
4)留出串口接口、以太網(wǎng)接口等硬件接口,方便系統(tǒng)與外界通信。
軟件功能具體如下:
1)在ARM平臺(tái)上,對(duì)McSPI模塊進(jìn)行配置。使用SPI通信協(xié)議,讀取AD模塊傳來的數(shù)字信號(hào)至SPI1的FIFO中;
2)在ARM平臺(tái)上,對(duì)EDMA模塊進(jìn)行配置。利用EDMA功能,實(shí)現(xiàn)ping-pong緩存,將SPI1的FIFO中的數(shù)據(jù)存入ping-pong緩存;
3)在ARM平臺(tái)上,ping-pong緩存中的數(shù)據(jù)存入SD卡模塊,或?qū)ing-pong緩存中的數(shù)據(jù)進(jìn)行實(shí)時(shí)處理;
4)ARM平臺(tái)移植有嵌入式Linux操作系統(tǒng),完成系統(tǒng)資源和任務(wù)的統(tǒng)一分配管理。
本發(fā)明硬件的具體實(shí)施方式如下:
本發(fā)明的系統(tǒng)硬件架構(gòu)圖如圖1所示,為了使整個(gè)結(jié)構(gòu)看起來清晰簡(jiǎn)潔,圖中表示出了系統(tǒng)的核心硬件架構(gòu),一些結(jié)構(gòu)細(xì)節(jié)并未在圖中表示出來。本發(fā)明硬件架構(gòu)核心部分包括ARM平臺(tái)、AD模塊、聲音信號(hào)傳感器模塊,另外包括前端調(diào)理電路、SDRAM模塊、NandFlash模塊、SD卡模塊、以太網(wǎng)接口、串口接口。聲音信號(hào)傳感器模塊包含4個(gè)聲音傳感器探頭,產(chǎn)生4路聲音信號(hào),此時(shí)的信號(hào)為模擬信號(hào)。前端調(diào)理電路位于聲音信號(hào)傳感器和AD模塊之間,主要功能是將傳感器輸出的4路模擬信號(hào)進(jìn)行調(diào)理,并將調(diào)理后的模擬信號(hào)輸入到AD模塊的4個(gè)輸入通道。AD模塊分別將4路模擬信號(hào)進(jìn)行AD轉(zhuǎn)換得到對(duì)應(yīng)的數(shù)字信號(hào),并將4路數(shù)字信號(hào)按照特定的順序通過SPI總線傳輸至ARM平臺(tái)。ARM平臺(tái)負(fù)責(zé)接收AD模塊傳輸過來的數(shù)據(jù),將這些數(shù)據(jù)存儲(chǔ)至SD卡模塊或直接進(jìn)行處理。SD卡模塊可用于存儲(chǔ)系統(tǒng)采集到的聲音信號(hào)數(shù)據(jù)。串口接口和以太網(wǎng)接口為系統(tǒng)與外界進(jìn)行通信的接口,系統(tǒng)可通過串口或以太網(wǎng)來跟外界進(jìn)行信息交互。例如通過串口,系統(tǒng)可以將聲音信號(hào)處理的結(jié)果輸出至外界。NandFlash模塊和SDRAM模塊分別用于程序數(shù)據(jù)的存儲(chǔ)和程序的運(yùn)行。本發(fā)明的AD模塊采用TI公司的ADS1278芯片。本發(fā)明的ARM平臺(tái)使用TI公司的AM335x系列處理器,具體型號(hào)推薦使用AM3354。
本發(fā)明需對(duì)AD模塊進(jìn)行配置,主要設(shè)置ADS1278的相關(guān)引腳。本發(fā)明用到了ADS1278的前四組模擬量輸入引腳AIN[4:1],需將它們與前端調(diào)理電路輸出端相連;將ADS1278的MODE0接低電平,MODE1引腳接高電平,使之處于Low-Power工作模式;本發(fā)明將FORMAT[2:0]三個(gè)引腳接低電平,選擇SPI協(xié)議輸出數(shù)據(jù),數(shù)據(jù)格式為TDM格式;本發(fā)明將PWDN[8:5]四個(gè)引腳接低電平,PWDN[4:1]四個(gè)引腳接高電平,只使用前4個(gè)通道;本發(fā)明用外接10MHz的晶振作為ADS1278的時(shí)鐘源,CLKDIV引腳接高電平,此時(shí)采樣頻率為19531Hz;本發(fā)明將ADS1278的SCLK引腳、DOUT1引腳和DRDY/FSYNC引腳分別與AM335x的SPI1_CLK引腳、SPI1_MISO引腳和SPI1_CS0引腳相連。另需注意的是,由于DRDY/FSYNC引腳的下降沿表示數(shù)據(jù)可讀,而AM335x的SPI1_CS0引腳是上升沿觸發(fā)EDMA傳輸,故在DRDY/FSYNC引腳和AM335x的SPI1_CS0引腳間需接一個(gè)反相器。
本發(fā)明軟件功能的具體實(shí)施方式如下:
本發(fā)明的系統(tǒng)功能流程圖如圖2所示。本發(fā)明的AD模塊通過SPI協(xié)議,將AD轉(zhuǎn)換得到的聲音信號(hào)數(shù)據(jù)傳輸給ARM平臺(tái)SPI1的FIFO中。ARM平臺(tái)通過EDMA將SPI1的FIFO的數(shù)據(jù)傳輸至ping-pong緩存,并將ping-pong緩存中的數(shù)據(jù)存儲(chǔ)至SD卡或進(jìn)行實(shí)時(shí)處理。本發(fā)明軟件的核心部分是AM335x的SPI1模塊和EDMA模塊的配置,以及利用EDMA模塊實(shí)現(xiàn)ping-pong緩存,使之配合AD模塊進(jìn)行數(shù)據(jù)采集。在本發(fā)明中,數(shù)字信號(hào)的傳輸使用SPI協(xié)議,AM335x作為SPI通信的主機(jī),AD模塊作為從機(jī)。故配置AM335x的相關(guān)寄存器使之工作在主機(jī)只接收模式(Master Receive-Only mode),將SPI時(shí)鐘配置為5MHz,此時(shí)時(shí)鐘信號(hào)由AM335x提供。本發(fā)明需配置相關(guān)寄存器使能SPI1的通道0作為數(shù)據(jù)傳輸通道,配置POL=0和PHA=0,使SPI工作在模式0。由于本發(fā)明的AD模塊的精度是24位,故配置SPI字長為24位,且使用SPI1自帶的長度為64Byte的FIFO作為數(shù)據(jù)接收緩存。
本發(fā)明需要通過配置AM335x的相關(guān)寄存器來設(shè)置EDMA模塊。配置相關(guān)寄存器,設(shè)置EDMA數(shù)據(jù)傳輸為AB同步模式,使能EDMA的通道20作為數(shù)據(jù)傳輸通道,并設(shè)置觸發(fā)方式為外部事件觸發(fā),將通道20與SPI1_CS0引腳的上升沿信號(hào)觸發(fā)事件綁定。本發(fā)明利用EDMA的參數(shù)項(xiàng)的鏈接機(jī)制,使用EDMA的兩個(gè)參數(shù)項(xiàng)來實(shí)現(xiàn)ping-pong緩存。具體做法是,在內(nèi)存中申請(qǐng)一塊ping緩存和一塊相同大小的pong緩存(分配的內(nèi)存類型為int型,即每個(gè)存儲(chǔ)單位為32位),申請(qǐng)兩個(gè)參數(shù)項(xiàng)(假定為參數(shù)項(xiàng)A和參數(shù)項(xiàng)B)。參數(shù)項(xiàng)A、B的數(shù)據(jù)源地址相同,均設(shè)置為SPI1的FIFO地址,參數(shù)項(xiàng)A、B的目的地址分別為ping緩存地址和pong緩存地址,參數(shù)項(xiàng)A的LINK字段設(shè)為參數(shù)項(xiàng)B的地址,參數(shù)項(xiàng)B的LINK字段設(shè)為參數(shù)項(xiàng)A的地址,兩參數(shù)項(xiàng)其它內(nèi)容相同。本發(fā)明需對(duì)EDMA的三維數(shù)據(jù)傳輸中的相關(guān)參數(shù)進(jìn)行設(shè)置,設(shè)置ACNT=3,BCNT=4,即每個(gè)通道的數(shù)據(jù)位一組(Array),每次采樣的數(shù)據(jù)為一幀(Frame)。至于CCNT的設(shè)置,則可以依據(jù)實(shí)際希望CPU每此處理多少數(shù)據(jù)以及實(shí)際的采樣頻率(FS)而定,例如希望每次采集K秒的數(shù)據(jù)給CPU處理,則CCNT=FS×K。若ACNT、BCNT、CCNT確定了,則待申請(qǐng)的ping/pong緩存的大小也隨之確定,其大小等于ACNT×BCNT×CCNT個(gè)字節(jié)。以K=0.2為例,且已知FS=19531Hz,則CCNT=19531×0.2≈3906。此時(shí)申請(qǐng)的ping-pong緩存大小等于3×4×3906=46872字節(jié)。以上配置涉及的寄存器,均可查詢TI公司官方的AM335x芯片手冊(cè),限于篇幅,本說明書對(duì)此部分內(nèi)容不再贅述。
本發(fā)明軟件功能的具體實(shí)施有以下4點(diǎn)需注意:
1)本發(fā)明建議將數(shù)據(jù)采集相關(guān)的程序?qū)iT寫成內(nèi)核驅(qū)動(dòng)模塊,將數(shù)據(jù)存入SD卡模塊和將數(shù)據(jù)進(jìn)行實(shí)時(shí)處理這兩部分相關(guān)的程序?qū)懗蓱?yīng)用程序,這樣系統(tǒng)軟件結(jié)構(gòu)層次會(huì)更清晰明朗;
2)上述將EDMA的通道20和SPI1_CS0引腳的上升沿信號(hào)綁定,作為EDMA的觸發(fā)信號(hào),需要配置AM335x中與EDMA模塊的Crossbar相關(guān)的寄存器;
3)由于SPI字長設(shè)置為24位(3字節(jié)),因此存入ping-pong緩存的每個(gè)AD值長度為3字節(jié)。而AM335x的字長為32位(4字節(jié)),又申請(qǐng)的ping-pong緩存的最小存儲(chǔ)單元是4字節(jié)。所以每個(gè)AD值存儲(chǔ)在了ping-pong緩存存儲(chǔ)單元中的低3字節(jié),高字節(jié)內(nèi)容未知。
故需要根據(jù)每個(gè)AD值的符號(hào)位,先將ping-pong緩存中的數(shù)據(jù)進(jìn)行處理,將存儲(chǔ)在低3字節(jié)的數(shù)據(jù)轉(zhuǎn)換成32位格式數(shù)據(jù),然后才能使用ping-pong緩存中的數(shù)據(jù);
4)上述將ping-pong緩存的數(shù)據(jù)存儲(chǔ)至SD卡或者進(jìn)行實(shí)時(shí)處理,具體涉及到的程序需根據(jù)實(shí)際情況而定。如可以將ping-pong緩存的數(shù)據(jù)以wav文件格式存儲(chǔ)至SD卡,或者直接對(duì)ping-pong緩存的數(shù)據(jù)進(jìn)行濾波處理。