新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 采用ARM9處理器S3C2410的數字多路語音記錄器設計

        采用ARM9處理器S3C2410的數字多路語音記錄器設計

        作者: 時間:2012-07-23 來源:網絡 收藏

        AC48304是一種專用的處理DSP芯片,需要運行相應的DSP程序。正常運行前, AC48304有兩個程序需要下載:kernel(內核)程序和application(應用)程序。kernel程序是個只有幾百字節的小程序,完成DSP的初始化工作,為下載應用程序做準備。application程序則完成AC48304的所有功能,在kernel程序程序下載完成后,才可以下載application程序。AC48304有4個工作模式:內核下載模式、程序下載模式、初始化模式、運行模式。其中運行模式有兩個狀態:空閑狀態和激活狀態,用戶只能在空閑狀態改變芯片的工作參數。

        4. 軟件

        4.1Linux中的驅動程序

        操作系統的是嵌入式Linux操作系統。Linux具有效率高、內核小的優點,且開放源代碼,完全免費。在Linux操作系統下,應用程序不能直接訪問硬件,盡管Linux在ARM平臺上有較完整的板級支持包,但在該系統的開發工作中仍然要完成部分設備的驅動程序,包括AC48304驅動程序、LE58QL021驅動程序、S-EEPROM驅動程序等。

        設備驅動程序要為應用軟件提供設備打開、關閉、設備控制及數據讀/寫等接口, 即一些類似于open、close、read和write的函數,在主程序中直接文件讀寫的方式實現數據的收發。LE58QL021與ARM之間MPI串行控制總線,MPI驅動接口結構定義如下:

        static file_operations mpi_ctl_fops = {

        ioctl:mpi_ctl_ioctl, //設備控制

        open:mpi_open, //打開設備

        close:mpi

        _ close, //關閉設備

        }

        linux提供ioremap函數將I/O內存資源的物理地址映射到核心虛地址空間,然后可像操作寄存器那樣進行數據讀寫。編寫驅動程序的時候,必須提供兩個函數,一個是module_init(),insmod在加載此模塊的時候自動調用,負責進行設備驅動程序的初始化工作,一個函數是module_exit,在模塊被卸載時調用,負責進行設備驅動程序的清除工作。

        4.2 AC48304的數據讀寫實現

        每個AC48304可同時進行4個通道的編/解碼,片內有數據緩存區,編碼后的數據先存儲在各通道的緩存區,然后依次拷貝到輸出緩沖區。表1為本系統支持的幾種主要語音編碼格式的相關參數。其中G.711的A/u律數據量最大為64kbps,每個通道每秒有8000字節的數據,而AC48304的數據讀取區的有效量為80字節,即每秒鐘要進行100次的讀取操作,對每個AC48304而言每秒鐘要進行400次讀取操作才能保證數據及時讀取。由于語音編碼包是以恒定的速率產生的,因此每2.5毫秒必須對DSP進行一次讀取操作。本平臺的Linux內核中,進
        程調度算法的時間單位為10毫秒,在進程中執行數據的讀取操作很難保證數據及時讀取,如果某個服務進程或者是本進程中的某個控制操作執行時間過長,就會造成語音數據的丟失。

        表1:語音數據特性


        Linux中程序運行的環境分為內核空間和用戶空間,內核空間的程序優先級高于用戶空間。為保證編碼數據被及時讀取,需在內核級別的進程中定時讀取AC48304產生的數據。有兩種方式可將用戶程序加入到內核空間中運行:修改Linux內核源代碼,直接將用戶程序代碼編譯到內核中;利用Linux的模塊機制,動態的將用戶程序代碼添加到內核空間中運行。第一種方法實現難度比較大,而且容易出錯。第二種方法實現難度小,效果與第一種相同,本系統中采用的是第二種方法。

        將AC48304的讀取操作作為驅動程序進行設計,使用insmod命令動態加載到內核中去,在定時中斷的服務函數中讀取AC48304的數據。中有5個用戶可編程的時鐘中斷,中斷優先級別高,中斷的頻率可編程控制,其中時鐘中斷Timer3已用于DMA控制,Tmer4用于進程調度。本系統的程序設計中使用Timer2,通過配置相關控制寄存器將Timer2的中斷頻率設為500HZ,適當的增加讀取查詢操作頻率,保證數據及時讀取。中斷服務函數是由內核來執行的,優先級高于用戶程序,可保證讀取操作的實時性。為AC48304的每個通道分配一個數據緩沖區,定時中斷函數中讀取的數據先保存在緩沖區中,用戶程序通過讀取該緩沖區獲得語音數據,這樣對外部用戶而言,語音數據沒有丟失,語音延遲在毫秒級別,完全可以滿足需求。


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 徐汇区| 邯郸市| 科技| 眉山市| 临猗县| 襄汾县| 公主岭市| 华安县| 阳曲县| 密云县| 万荣县| 山丹县| 尼木县| 余干县| 广南县| 怀宁县| 古蔺县| 辽阳县| 色达县| 手游| 福州市| 阿瓦提县| 越西县| 玛多县| 通州区| 太仆寺旗| 辽宁省| 吉安县| 南丰县| 兰考县| 洛南县| 青铜峡市| 晋中市| 东辽县| 临洮县| 武鸣县| 无锡市| 镶黄旗| 资阳市| 农安县| 同德县|