基於IIS匯流排的嵌入式音訊系統設計

2021-05-22 10:28:55 字數 3461 閱讀 2285

2007-01-29 13:26:02

電子技術應用

1硬體體系結構

iis匯流排只處理聲音資料。其他訊號(如控制訊號)必須單獨傳輸。為了使晶元的引出管腳盡可能少,iis只使用了三根序列匯流排。這三根線分別是:提供分時復用功能的資料線、字段選擇線(聲道選擇)、時鐘訊號線。

在三星公司的arm晶元中,為了實現全雙工模式,使用了兩條序列資料線,分別作為輸入和輸出。此外三星公司的iis介面提供三種資料傳輸模式:

· 正常傳輸模式。此模式基於fifo暫存器。該模式下cpu將通過輪詢方式訪問fifo暫存器,通過iiscon暫存器的第七位控制fifo。

· dma模式。此模式是一種外部裝置控制方式。它使用竊取匯流排控制權的方法使外部裝置與主存交換資料,從而提高系統的吞吐能力。

在三星公司的arm晶元中有4個通道dma控制器用於控制各種外部裝置,其中iis與其他序列外設共用兩個橋聯dma(bdma)型別的dma通道。通過設定cpu的iisfcon暫存器可以使iis介面工作在dma模式下。此模式下fifo暫存器組的控制權掌握在dma控制器上。當fifo滿時,由dma控制器對fifo中的資料進行處理。dma模式的選擇由iiscon暫存器的第四和第五位控制。

· 傳輸/接收模式。該模式下,iis資料線將通過雙通道dma同時接收和傳送音訊資料。本系統使用該資料傳輸模式。

圖1是44box晶元與菲利浦公司的udal341ts音訊晶元的連線示意圖。

在這個體系結構中,為了實現全雙工,資料傳輸使用兩個bdma通道。資料傳輸(以回放為例)先由內部匯流排送到記憶體,然後傳到bdma控制器通道0,再通過iis控制器寫入iis匯流排並傳輸給音訊晶元。通道1用來錄音。

三星公司的bdma控制器沒有內建的儲存區域,在驅動程式中必須為音訊裝置分配dma快取區。快取區的位址在通道dma控制器的位址暫存器中設定。

udal341ts晶元除了提供iis介面和麥克風揚聲器介面,還提供l3介面控制音量等。l3介面分別連到s3c44b0的3個通用資料輸出引腳上。

2音訊裝置底層軟體設計

2.3 裝置的初始化和解除安裝

/dev/dsp的驅動設計主要包含:裝置的初始化和解除安裝、記憶體與dma快取區的管理、裝置無關操作(例程)的實現以及中斷處理程式。

在裝置初始化中對音訊裝置的相關暫存器初始化,並在裝置註冊中使用了兩個裝置註冊函式register sound_dsp()和regiter_sound_mixer()註冊音訊裝置和混頻器裝置。這兩個函式在2.2以上版本的核心drivers/sound/sound_core.c檔案中實現。其作用是註冊裝置,得到裝置標識,並且實現裝置無關操作的繫結。在這些註冊函式裡使用的第乙個引數都是struct file_operations型別的引數。該引數定義了裝置無關介面的操作。

裝置解除安裝時使用登出函式。登出時用輸入註冊時得到的裝置號即可。在登出時還必須釋放驅動程式使用的各種系統資源包括dma、裝置中斷等。

2.4 dma快取區設計和記憶體管理

在音訊裝置的驅動程式設計中,dma快取區設計和記憶體管理部分最為複雜。由於音訊裝置有很高的實時性要求,所以合理地使用記憶體能加快對音訊資料的處理,並減少時延。

三星公司的bdma控制器沒有內建dma儲存區域,在驅動程式中必須為音訊裝置分配dma快取區。這樣就能通過dma直接將需要回放或是錄製的聲音資料存放在核心的dma快取區中。

為了方便各種物·理裝置使用dma資源,在程式中使用strcut s3c44b_dma資料結構管理系統各個dma通道的資源,如圖2。每個dma通道被多個外部裝置共用,為各個外設分配的dma快取區的大小和數目可能不·一致,所有分配的資料塊使用dma快取資料塊dma_buf管理。各個不同裝置申請的資料快取區形成乙個單向鍊錶,每個鍊錶節點包含乙個起點字段,存放實際dma快取起始位置的實體地址。在裝置第一次使用dma時,使用kmalloc函式為dm a_buf分配記憶體,並且使用consistent_alloc函式為dma分配實際的連續物理快取區,然後將節點插入佇列中。從第二次開始通過快取區的標示符對快取區進行操作。

記憶體管理中的重要問題是快取區塊設計。常見的設計思路是使用乙個快取區,cpu先對快取區處理,然後掛起,音訊裝置對快取區操作,音訊裝置處理完後喚醒cpu,如此迴圈。需要處理大量音訊資料的音訊裝置驅動程式,可以使用雙緩衝。以錄音為例,系統使用快取2存放音訊裝置量化好的聲音,cpu(應用程式)則處理快取1中的聲音資料;當codec裝置填充完快取2,它移向快取1填充資料,而cpu轉向處理快取2裡的資料;不斷交替迴圈,如圖3(a)、(b)所示。

使用這種方法處理音訊資料,能夠提高系統的並行能力。應用程式可以在音訊工作的同時處理傳輸進來的音訊資料。 由於實際系統被設計成支援全雙工的音訊系統,所以必須為輸入和輸出同時分配記憶體,對應的資料結構設計如圖4所示。

圖4中音訊裝置快取控制塊管理音訊裝置的快取區。在控制塊中輸入/輸出快取指標分別指向輸入和輸出快取結構audio_buf,輸入輸出控制塊指標分別指向對應的dma控制塊。因為輸人輸出使用了不同dma通道,所以音訊裝置快取控制塊有兩個dma控制塊控制指標。在audio_buf中分別有兩個dma起點字段分別指向雙快取區的起始實體地址。快取區狀態字段包含快取.區是否被對映、是否啟用、是否暫停等資訊。 應用程式處理快取中資料的速度依賴於快取的大小和資料傳輸速度。例如使用"8khz/8位/單工" 的採洋方式錄音,音訊晶元產生64kbps的資料流量。如果是兩個4k位元組的快取,那麼應用程式就只有0.5s處理快取中的資料並把它存到flash晶元中(或者傳輸到其它裝置中)。若0.5s內不能處理這些資料,快取就會溢位。若採用高品質的取樣,例如使用cd音質的取樣,那麼codec產生資料的速度將達1376kbps,cpu處理音訊資料的時間就只有23ms。在cpu負載較大的情況下,將可能出現資料丟失的問題。

為了解決音訊應用i/o資料量大的問題,最簡單易行的方法是使用比較大的快取區域。但實際上大的快取區需要更長的填充時間,在使用時會出現延時,並可能占用過多cpu資源。為了解決延時的問題,使用多段快取機制。在這種機制下,將可用的快取區分割成若干個相同大小的塊。對較大的快取區的操作轉變成對較小的緩衝區塊的操作,在不增加快取區操作時間的情況下提供較大的快取。不同的音訊應用,精度不一樣,需要的快取大小也不一樣。所以在應用程式層上,驅動程式還必須提供介面讓應用程式改變塊的大小和個數。這個介面可以在ioctl中實現。對快取區塊的大小控制通過對audio_buf中的對應字段設定實現。

使用記憶體對映(mmap)技術是另一種提高系統效能的途徑。linux系統的記憶體空間分為核心。空間和使用者空間,驅動程式工作在核心空間,並負責在核心空間和使用者空間傳輸資料。音訊應用一般資料量比較大,而且有較高的質量要求,在驅動程式中還可以使用記憶體對映進一步提高cpu的利用率。記憶體對映通過remap page_range將分配給dma快取區的核心空間的記憶體對映到使用者空間,使用者不需使用copy_to_user和copy_from_user將資料在核心空間與使用者空間中拷貝。圖4中快取區狀態和快取區起點兩個欄位也用於記憶體對映服務。在實現時由於dma的快取結構複雜,需要將每個快取塊分別對映。

25裝置無關操作

嵌入式學習(三)嵌入式系統匯流排

pci peripheral component interconnect 1 支援 10 臺外設 2 匯流排時鐘頻率 33.3mhz 66mhz 3 最大資料傳輸速率 133mb s 4 時鐘同步方式 5 與 cpu 及時鐘頻率無關 6 匯流排寬度 32 位 5v 64 位 3.3v 7 能自動識...

基於ARM CLinux嵌入式系統

32位arm嵌入式處理器具有高效能 低軾耗的特性,已被廣泛應用於消費電子產品 無線通訊和網路通訊等領域。clinux是專門為無mmu處理器設計的嵌入式作業系統,支援arm motorola等微處理器。目前國內外採用arm clinux作為嵌入式系統非常普遍。而嵌入式系統的啟動引導技術是嵌入式系統開發...

基於DSP的Bluetooth嵌入式系統應用

藍芽 bluetooth 協議標準是由藍芽特別興趣小組 bluetooth sig 發布的,1999年發布了bluetooth 1.0版,2001年2月發布了bluetooth1.1版。目前sig成員已經發展到3000家左右。藍芽協議規定的無線通訊標準,基於免申請的2.4ghz的 ism頻段,採用g...