国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

ZYNQ 主芯片結(jié)合TLV320AIC23 語音芯片實現(xiàn)語音采放

2022-10-20 10:21:02張來洪吳道遠(yuǎn)盧繼川
電子技術(shù)應(yīng)用 2022年9期
關(guān)鍵詞:聲卡樣點調(diào)用

張來洪,吳道遠(yuǎn),盧繼川

(武漢中原電子集團(tuán)有限公司 研發(fā)中心,湖北 武漢 430000)

0 引言

ZYNQ7000 系列芯片是Xilinx 提供的全可編程片上系統(tǒng)(System on Chip,SoC)芯片,完美地將ARM 與FPGA融合在一起,ARM 稱為處理系統(tǒng)(Processing System,PS)側(cè),F(xiàn)PGA 稱為編程邏輯(Programmable Logic,PL)側(cè),既發(fā)揮了ARM 基于操作系統(tǒng)開發(fā)應(yīng)用程序的優(yōu)點,又發(fā)揮了FPGA 進(jìn)行實時信號處理和實現(xiàn)高速接口的優(yōu)點,PS側(cè)自帶了通用異步收發(fā)傳輸器(Universal Asynchronous Reveiver Transmitter,UART)、集成電路總線(Inter Integrated Circuit,IIC)等控制器,PL 側(cè)還能通過FPGA 的邏輯資源實例化知識產(chǎn)權(quán)核(Intellectual Property Core,IP 核)額外擴(kuò)展集成電路內(nèi)置音頻總線(Inter IC Sound,IIS)等控制器,PS 側(cè)與PL 側(cè)通過高級擴(kuò)展接口(Advanced Extensible Interface,AXI)總線接口實現(xiàn)信息的交互,這些優(yōu)點使得ZYNQ 芯片作為電臺數(shù)字板的主芯片時充分發(fā)揮了優(yōu)勢。語音功能作為電臺的基本功能,在數(shù)字板上實現(xiàn)語音的采放是進(jìn)行語音遠(yuǎn)距離傳輸?shù)那疤帷LV320AIC23 是一款高性能低功耗立體聲音頻編解碼器,可以在8 000 Hz~96 000 Hz 采樣率下提供16、24、32 等不同位數(shù)的采樣數(shù)據(jù),非常靈活好用。本文詳細(xì)闡述ZYNQ 主芯片結(jié)合TLV320AIC23 語音芯片在Linux 系統(tǒng)下基于高級Linux 聲音架構(gòu)(Advanced Linux Sound Architecture,ALSA)進(jìn)行脈沖編碼調(diào)制(Pulse Code Modulation,PCM)編程實現(xiàn)語音采放的技術(shù)原理,展示了測試效果,此方案可以移植到電臺項目中,作為電臺的語音采集和播放方案,具有實際工程意義。

1 硬件設(shè)計

本文所述ZYNQ 型號為xc7z030fbg676-2,ZYNQ7000系列芯片的PS 側(cè)是一致的,都是雙核CortexA9,僅PL側(cè)資源不一樣,芯片封裝不一樣。ZYNQ 與TLV320AIC23 的主要連接關(guān)系如圖1 所示,此處只畫出兩芯片之間的連接關(guān)系,芯片自身所接的外圍電路不畫出。

圖1 ZYNQ 與TLV320AIC23 連接關(guān)系

ZYNQ 作為主芯片,向TLV320AIC23 提供12.288 MHz的主時鐘信號MCLK,TLV320AIC23 基于此主時鐘運行;ZYNQ 向TLV320AIC23 提供片選功能CS;ZYNQ 通過IIC協(xié)議對TLV320AIC23 進(jìn)行配置,例如音量、采樣率、量化位數(shù)等。ZYNQ 通過IIS 協(xié)議與TLV320AIC23 進(jìn)行語音樣點的傳輸。IIS 主要有LR_CLK 左右聲道選擇時鐘信號線、B_CLK 比特時鐘信號線、DATA 串行數(shù)據(jù)線,工程中可進(jìn)一步將DATA 細(xì)分為DATA_O 數(shù)據(jù)輸出信號線和DATA_I 數(shù)據(jù)輸入信號線。LR_CLK 和B_CLK 由ZYNQ 提供,LR_CLK 用于區(qū)分此時的語音所屬的左右聲道,在LR_CLK 變化后的B_CLK 的第二個及之后的上升沿交互數(shù)據(jù),BCLK 的一個上升沿傳輸一位數(shù)據(jù),先傳輸高位再傳輸?shù)臀?,這樣允許收發(fā)采用不一樣的數(shù)據(jù)位數(shù),在工程中,收發(fā)的數(shù)據(jù)位數(shù)應(yīng)盡量設(shè)計為相同。

2 VIVADO 工程設(shè)計

根據(jù)硬件設(shè)計,基于VIVADO18.3 搭建工程,對ZYNQ的PS 進(jìn)行配置,例如時鐘、復(fù)位、調(diào)試UART 控制器等,確保PS 部分能正常工作,添加一系列IP 核用于實現(xiàn)語音功能。連接模塊間的搭建完成的工程如圖2 所示。

圖2 VIVADO 工程的模塊連接圖

ZYNQ7 Processing System 描述了PS 側(cè)的配置,例如內(nèi)存、調(diào)試串口控制器、網(wǎng)口控制器等的配置、DMA 的配置、PS-PL 時鐘的配置等。AXI Interconnect 是PS 側(cè)與PL側(cè)的AXI 接口模塊,axi_i2s_adi 是進(jìn)行串并轉(zhuǎn)換實現(xiàn)IIS時序的IP 核,且具備先入先出(Fisrt In First Out,F(xiàn)IFO)功能用于緩存語音樣點。Clocking Wizard 是時鐘分頻模塊,將PS 向PL 提供的100 MHz 時鐘分頻為12.288 MHz,此12.288 MHz 的時鐘是TLV320AIC23 的主時鐘,也是axi_i2s_adi 模塊的數(shù)據(jù)收發(fā)的時鐘。AXI IIC 是利用PL 資源生成的IIC 控制器,ZYNQ 通過此IP 核產(chǎn)生IIC 時序。Constan 是常量信號產(chǎn)生模塊,用于產(chǎn)生片選信號。concat是信號合并模塊,用于將多個中斷信號源合并后接到PS模塊,此處合并AXI IIC 產(chǎn)生的中斷信號。

PS 側(cè)使能了兩路DMA 資源,axi_i2s_adi模塊的DMA_REQ_TX信號接PS的DMA1_REQ信號,axi_i2s_adi模塊的DMA_REQ_RX信號接PS的DMA2_REQ。

axi_i2s_adi 模塊對外提供連接有BCLK_O、LR_CLK_O、LR_CLK_I、SDATA_O、SDATA_I 等信號,連同時鐘分頻模塊提供的MCLK_O 信號一起組成IIS 總線,實現(xiàn)IIS 時序,這些信號從ZYNQ 出來后最終連接到TLV320AIC23 的管腳,用于ZYNQ 和TLV320AIC23 之間的語音樣點的傳輸。

搭建完VIVADO 工程,為axi_i2s_adi 模塊和AXI IIC模塊分別設(shè)置AXI 地址,axi_i2s_adi 地址為0x60000000,AXI IIC 地址為0x41600000,然后結(jié)合硬件原理圖為外部信號做管腳約束,最后生成bit 流文件。

3 系統(tǒng)啟動及驅(qū)動程序

將VIVADO 生成的bit 流文件和hardware 信息導(dǎo)出到SDK,SDK 下生成FSBL 作為一級引導(dǎo)程序,在Ubuntu虛擬機下使用XILINX 廠家提供的arm-xilinx-linuxgnueabi-gcc 交叉編譯器配置并編譯2016.07 版的uboot作為二級引導(dǎo)程序,將FSBL、bit、uboot 合成BOOT.BIN燒寫進(jìn)板子,啟動進(jìn)入uboot 階段。

配置4.6.0 版的Linux 內(nèi)核,在配置選項中添加AXI IIC 的驅(qū)動、TLV320 系列編解碼器的驅(qū)動、ALSA for Soc audio 組件的支持等,交叉編譯生成Linux_uImage 內(nèi)核鏡像文件。

修改Linux 源碼目錄子目錄下的dts 文件,除了描述PS 側(cè)資源外,額外添加聲卡功能的描述片段,然后編譯生成devicetree.dtb 設(shè)備樹文件。設(shè)備樹中描述聲卡功能的片段結(jié)構(gòu)如下:

此處只展示片段結(jié)構(gòu),省略冗長的細(xì)節(jié)字段。一級節(jié)點fpga-axi 包含整個與聲卡有關(guān)的描述,二級節(jié)點audio_clock 描述的是12.288 MHz 的時鐘,二級節(jié)點i2c0描述的是AXI IIC 控制器,AXI IIC 控制器下掛的三級節(jié)點sound0-codec 描述的是TLV320AIC23,二級節(jié)點axii2s0 描述的是axi_i2s_adi 模塊,以上節(jié)點描述了VIVADO工程中的具體配置;接下來的二級節(jié)點sound0 描述了構(gòu)造出來的具體聲卡功能,即一個簡易模式的聲卡節(jié)點,包含了兩路信息流,一路連到axi_i2s_adi 模塊,一路連到sound0-codec。

與設(shè)備樹中聲卡節(jié)點匹配的內(nèi)核源碼主要有DMA的驅(qū)動程序源碼pl330.c、語音芯片的驅(qū)動程序的源碼tlv320aic23.c、axi_i2s_adi的驅(qū)動程序的源碼axi-i2s.c。這些驅(qū)動程序源碼在XILINX 廠家提供的內(nèi)核代碼里已經(jīng)存在,設(shè)備樹中的片段將這些代碼有機地結(jié)合起來,形成特定的功能。可以結(jié)合工程實際對這些源碼進(jìn)行修改,例如修改tlv320aic23.c 文件里的tlv320aic23_codec_probe函數(shù),使得在Linux 系統(tǒng)啟動階段加載聲卡節(jié)點驅(qū)動時即可對TLV320AIC23 進(jìn)行初步設(shè)置。

交叉編譯1.20.1 版本的busybox,制作成uramdisk.image.gz 根文件系統(tǒng),在根文件系統(tǒng)中添加腳本語句用于生成聲卡的文件節(jié)點。

在uboot 階段分別將Linux_uImage 內(nèi)核鏡像、devicetree.dtb 設(shè)備樹、uramdisk.image.gz 根文件系統(tǒng)三組件加載到內(nèi)存指定地址,然后啟動Linux 操作系統(tǒng)。

在正常啟動Linux 系統(tǒng)的基礎(chǔ)上,可以看到系統(tǒng)啟動過程中的打印信息,

這說明Linux 系統(tǒng)已經(jīng)識別了聲卡設(shè)備,證明VIVADO工程、Linux 操作系統(tǒng)、驅(qū)動功能都是正常的。但若需聲卡正常工作,還需要庫文件的支持,以及應(yīng)用程序的運行。

配置并交叉編1.1.3 版本的ALSA 庫源碼,交叉編譯最終得到整個ALSA 庫的生成文件夾,內(nèi)含Linux 系統(tǒng)下與ALSA 聲卡功能有關(guān)的動態(tài)庫、靜態(tài)庫、頭文件等。將ALSA 庫的生成文件夾下的內(nèi)容拷貝到數(shù)字板的根文件系統(tǒng)下的相應(yīng)目錄下,通過aplay -l 命令證明ALSA正常工作。

4 應(yīng)用程序

為了使用應(yīng)用程序驗證聲卡是否正常工作,可以用ALSA 庫的生成文件夾提供的若干應(yīng)用程序,也可以自行編寫實用性更強更靈活的程序,基于ALSA 的PCM 編程有相對固定的操作步驟,關(guān)鍵函數(shù)如下。

調(diào)用snd_pcm_open 函數(shù)分別打開兩個句柄,一個用于采音,一個用于放音。調(diào)用snd_pcm_hw_params_set_access函數(shù)為句柄設(shè)置語音樣點的模式,此處設(shè)置為SND_PCM_ACCESS_RW_INTERLEAVED 即讀寫交替模式。調(diào)用snd_pcm_hw_params_set_channels 函數(shù)為句柄設(shè)置語音聲道,設(shè)置為1 即單聲道。調(diào)用snd_pcm_hw_params_set_format 函數(shù)為句柄設(shè)置語音樣點的格式,此處設(shè)置為SND_PCM_FORMAT_S16_LE,即每個語音樣點用16 bit 表示。調(diào)用snd_pcm_hw_params_set_rate_near 函數(shù)為句柄設(shè)置采樣率,此處設(shè)置為8 000,即每秒采集或播放8 000 個樣點。調(diào)用snd_pcm_prepare 使句柄準(zhǔn)備工作。

調(diào)用以上配置函數(shù)時,應(yīng)用程序進(jìn)一步調(diào)用ALSA庫里的函數(shù),然后調(diào)用操作系統(tǒng)內(nèi)核里的函數(shù),通過層層調(diào)用,最終達(dá)到驅(qū)動層,一方面通過AXI IIC 的驅(qū)動程序來配置TLV320AIC23 語音芯片,一方面更新了axi_i2s_adi模塊的工作狀態(tài),將以上各函數(shù)整個封裝后成為初始化函數(shù)。也可以通過應(yīng)用程序訪問AXI IIC 的驅(qū)動程序,將TLV320AIC23 的各寄存器的值配置為項目所需的值。TLV320AIC23 寄存器的配置如表1 所示。

表1 TLV320AIC23 各寄存器的配置

調(diào)用snd_pcm_writei 函數(shù)向放音句柄傳遞語音信息的變量,即可達(dá)到放音的效果。

調(diào)用snd_pcm_readi 函數(shù)向采音句柄傳遞語音信息的變量的指針,即可達(dá)到采音的效果。

結(jié)合snd_pcm_writei 和snd_pcm_readi 即可實現(xiàn)對外語音回環(huán)的效果。

調(diào)用snd_pcm_writei 函數(shù)時,應(yīng)用程序進(jìn)一步調(diào)用ALSA 庫里的函數(shù),然后調(diào)用操作系統(tǒng)內(nèi)核里的函數(shù),通過層層調(diào)用,最終達(dá)到驅(qū)動層。通過使用DMA 通道,將內(nèi)存中的信息搬移給axi_i2s_adi 模塊的發(fā)FIFO,然后由axi_i2s_adi 產(chǎn)生IIS 時序,將發(fā)FIFO 里的語音樣點傳輸給TLV320AIC23,然后由TLV320AIC23 將數(shù)字量轉(zhuǎn)化為模擬量,這是放音方向。對于采音方向,TLV320AIC23 將模擬量轉(zhuǎn)化為數(shù)字量,然后將語言樣點傳輸給axi_i2s_adi 模塊的收FIFO,等到應(yīng)用程序調(diào)用snd_pcm_readi 函數(shù)時,應(yīng)用程序進(jìn)一步調(diào)用ALSA 庫里的函數(shù),然后調(diào)用操作系統(tǒng)內(nèi)核里的函數(shù),通過層層調(diào)用,最終達(dá)到驅(qū)動層,通過使用DMA 通道,將axi_i2s_adi 模塊的收FIFO 里的信息搬移到內(nèi)存中的,最終到達(dá)應(yīng)用層。

5 測試

先測試放音功能,運行初始化函數(shù)后,通過傳遞表示不同頻率的正弦波樣點的數(shù)組變量給snd_pcm_writei函數(shù),來播放不同頻率的正弦波單音,例如每8 個樣點形成一個正弦周期,則對應(yīng)1 000 Hz 的單音,通過示波器觀測數(shù)字板上TLV320AIC23 的PHONE 腳,可以看到示波器觀測的波形與代碼變量的理論值一致,說明聲卡放音功能正常。

再測試采音功能,運行初始化函數(shù)后,在while 循環(huán)中成對地依次調(diào)用snd_pcm_readi 和snd_pcm_writei,實現(xiàn)對外語音回環(huán)的效果,用信號源接到TLV320AIC23 的MIC腳,通過示波器觀測TLV320AIC23 的PHONE 腳,信號源分別輸出不同頻率的正弦波,可以看到示波器觀測的波形與信號源的設(shè)置值一致,說明聲卡采音功能正常。

驗證了放音功能和采音功能后,可以進(jìn)一步通過人聲來實測喊話自回環(huán)功能,給數(shù)字板接上話柄揚聲器,對著話柄喊話,能在揚聲器聽到自己所喊聲音,說明喊話自回環(huán)功能正常。

各項測試結(jié)果如圖3 所示,測試結(jié)果與理論一致。

圖3 語音采放功能測試

6 結(jié)論

本文詳細(xì)闡述了ZYNQ 結(jié)合TLV320AIC23 實現(xiàn)語音采放功能的原理,對于實際電臺的數(shù)字板的VIVADO 工程,只需添加與波形有關(guān)的其他模塊即可,即對于語音功能,本文所述的技術(shù)方案是可以直接移植使用的,在應(yīng)用程序里采集到的語音,遞交給波形模塊進(jìn)行傳輸,在接收方收到后,再在應(yīng)用程序里進(jìn)行放音,即實現(xiàn)了電臺里的話音功能,若需優(yōu)化用戶體驗,還可以再加提示音等輔助功能。

猜你喜歡
聲卡樣點調(diào)用
小麥條銹病田間為害損失的初步分析
湖北植保(2022年4期)2022-08-23 10:51:52
基于空間模擬退火算法的最優(yōu)土壤采樣尺度選擇研究①
土壤(2021年1期)2021-03-23 07:29:06
核電項目物項調(diào)用管理的應(yīng)用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
基于分融策略的土壤采樣設(shè)計方法*
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
基準(zhǔn)地價評估中異常樣點剔除方法研究
麻雀成鳳凰 本本聲卡變X—Fi
用心聆聽,“高清”聲卡進(jìn)階技
谷城县| 得荣县| 克什克腾旗| 安岳县| 雷州市| 专栏| 新津县| 大连市| 北流市| 新乐市| 诏安县| 浦北县| 革吉县| 阿勒泰市| 平乡县| 搜索| 杭锦旗| 乌兰察布市| 花垣县| 海丰县| 修武县| 颍上县| 正阳县| 温州市| 灵武市| 通渭县| 延安市| 华蓥市| 莱芜市| 迭部县| 都昌县| 子长县| 黄浦区| 清涧县| 长乐市| 岗巴县| 江源县| 河源市| 开平市| 哈巴河县| 桦甸市|