• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

      2022-10-20 10:21:02張來洪吳道遠(yuǎn)盧繼川
      電子技術(shù)應(yīng)用 2022年9期
      關(guān)鍵詞:聲卡樣點(diǎ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)點(diǎn),又發(fā)揮了FPGA 進(jìn)行實(shí)時(shí)信號處理和實(shí)現(xiàn)高速接口的優(yōu)點(diǎn),PS側(cè)自帶了通用異步收發(fā)傳輸器(Universal Asynchronous Reveiver Transmitter,UART)、集成電路總線(Inter Integrated Circuit,IIC)等控制器,PL 側(cè)還能通過FPGA 的邏輯資源實(shí)例化知識產(chǎn)權(quán)核(Intellectual Property Core,IP 核)額外擴(kuò)展集成電路內(nèi)置音頻總線(Inter IC Sound,IIS)等控制器,PS 側(cè)與PL 側(cè)通過高級擴(kuò)展接口(Advanced Extensible Interface,AXI)總線接口實(shí)現(xiàn)信息的交互,這些優(yōu)點(diǎn)使得ZYNQ 芯片作為電臺數(shù)字板的主芯片時(shí)充分發(fā)揮了優(yōu)勢。語音功能作為電臺的基本功能,在數(shù)字板上實(shí)現(xiàn)語音的采放是進(jìn)行語音遠(yuǎn)距離傳輸?shù)那疤?。TLV320AIC23 是一款高性能低功耗立體聲音頻編解碼器,可以在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)編程實(shí)現(xiàn)語音采放的技術(shù)原理,展示了測試效果,此方案可以移植到電臺項(xiàng)目中,作為電臺的語音采集和播放方案,具有實(shí)際工程意義。

      1 硬件設(shè)計(jì)

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

      2 VIVADO 工程設(shè)計(jì)

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

      圖2 VIVADO 工程的模塊連接圖

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

      搭建完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虛擬機(jī)下使用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)核,在配置選項(xiàng)中添加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é)點(diǎn)fpga-axi 包含整個(gè)與聲卡有關(guān)的描述,二級節(jié)點(diǎn)audio_clock 描述的是12.288 MHz 的時(shí)鐘,二級節(jié)點(diǎn)i2c0描述的是AXI IIC 控制器,AXI IIC 控制器下掛的三級節(jié)點(diǎn)sound0-codec 描述的是TLV320AIC23,二級節(jié)點(diǎn)axii2s0 描述的是axi_i2s_adi 模塊,以上節(jié)點(diǎn)描述了VIVADO工程中的具體配置;接下來的二級節(jié)點(diǎn)sound0 描述了構(gòu)造出來的具體聲卡功能,即一個(gè)簡易模式的聲卡節(jié)點(diǎn),包含了兩路信息流,一路連到axi_i2s_adi 模塊,一路連到sound0-codec。

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

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

      在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)用程序的運(yùn)行。

      配置并交叉編1.1.3 版本的ALSA 庫源碼,交叉編譯最終得到整個(gè)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)用程序驗(yàn)證聲卡是否正常工作,可以用ALSA 庫的生成文件夾提供的若干應(yīng)用程序,也可以自行編寫實(shí)用性更強(qiáng)更靈活的程序,基于ALSA 的PCM 編程有相對固定的操作步驟,關(guān)鍵函數(shù)如下。

      調(diào)用snd_pcm_open 函數(shù)分別打開兩個(gè)句柄,一個(gè)用于采音,一個(gè)用于放音。調(diào)用snd_pcm_hw_params_set_access函數(shù)為句柄設(shè)置語音樣點(diǎn)的模式,此處設(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è)置語音樣點(diǎn)的格式,此處設(shè)置為SND_PCM_FORMAT_S16_LE,即每個(gè)語音樣點(diǎn)用16 bit 表示。調(diào)用snd_pcm_hw_params_set_rate_near 函數(shù)為句柄設(shè)置采樣率,此處設(shè)置為8 000,即每秒采集或播放8 000 個(gè)樣點(diǎn)。調(diào)用snd_pcm_prepare 使句柄準(zhǔn)備工作。

      調(diào)用以上配置函數(shù)時(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ù)整個(gè)封裝后成為初始化函數(shù)。也可以通過應(yīng)用程序訪問AXI IIC 的驅(qū)動程序,將TLV320AIC23 的各寄存器的值配置為項(xiàng)目所需的值。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 即可實(shí)現(xiàn)對外語音回環(huán)的效果。

      調(diào)用snd_pcm_writei 函數(shù)時(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 時(shí)序,將發(fā)FIFO 里的語音樣點(diǎn)傳輸給TLV320AIC23,然后由TLV320AIC23 將數(shù)字量轉(zhuǎn)化為模擬量,這是放音方向。對于采音方向,TLV320AIC23 將模擬量轉(zhuǎn)化為數(shù)字量,然后將語言樣點(diǎn)傳輸給axi_i2s_adi 模塊的收FIFO,等到應(yīng)用程序調(diào)用snd_pcm_readi 函數(shù)時(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 測試

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

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

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

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

      圖3 語音采放功能測試

      6 結(jié)論

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

      猜你喜歡
      聲卡樣點(diǎn)調(diào)用
      小麥條銹病田間為害損失的初步分析
      湖北植保(2022年4期)2022-08-23 10:51:52
      基于空間模擬退火算法的最優(yōu)土壤采樣尺度選擇研究①
      土壤(2021年1期)2021-03-23 07:29:06
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      基于分融策略的土壤采樣設(shè)計(jì)方法*
      基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
      利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
      基準(zhǔn)地價(jià)評估中異常樣點(diǎn)剔除方法研究
      麻雀成鳳凰 本本聲卡變X—Fi
      用心聆聽,“高清”聲卡進(jìn)階技
      平武县| 攀枝花市| 乡宁县| 巩义市| 鄂温| 武清区| 龙岩市| 平谷区| 黄山市| 祁阳县| 龙胜| 凤山市| 江川县| 华亭县| 迭部县| 无棣县| 正宁县| 那曲县| 甘洛县| 建德市| 海安县| 长宁区| 赤城县| 西和县| 垦利县| 图们市| 沾益县| 乌恰县| 盐亭县| 法库县| 孝义市| 黄冈市| 绿春县| 长顺县| 循化| 金门县| 阿克| 宾阳县| 巴东县| 二连浩特市| 和田市|