AVR32 MCU 上的 ABDAC 外設(shè)非常適合生成音頻播放。本文介紹了如何執(zhí)行此操作,并包含指向生成正弦波輸出的示例驅(qū)動程序的鏈接。
許多嵌入式應(yīng)用程序越來越多地具有音頻播放功能,無論是響應(yīng)用戶輸入的簡單音頻反饋還是全高速流音頻。通過使用通用時鐘接口,Atmel AVR32 MCU 上的 ABDAC 能夠支持廣泛的播放頻率。
功能說明
ABDAC 是一個非常簡單的外圍設(shè)備,它的使用很簡單。它需要通用時鐘系統(tǒng)提供的時鐘信號,以及通道的數(shù)據(jù)輸入。圖 1 中的框圖給出了該模塊的概述。有關(guān) ABDAC 外設(shè)的詳細說明,請參見器件的數(shù)據(jù)表。

圖 1:時鐘和數(shù)據(jù)路徑框圖。
通用時鐘
ABDAC 使用通用時鐘來提供采樣頻率。這個通用時鐘在設(shè)備內(nèi)部硬接線,必須是采樣頻率的 256 倍。
應(yīng)在啟用 ABDAC 之前配置和啟用通用時鐘。有關(guān)使用哪個通用時鐘的說明,請參見器件數(shù)據(jù)表中的時鐘部分。本節(jié)還介紹了通用時鐘的進一步配置。
通用時鐘輸出范圍可能受到其源時鐘頻率的限制。因此,設(shè)計一種振蕩器至關(guān)重要,它可以提供可被通用時鐘分頻器分頻的基本頻率,以達到所需的輸出采樣率。表 1 顯示了示例。
頻道
ABDAC啟用時;它期望采樣數(shù)據(jù)寄存器 (SDR) 以與輸出采樣率相同的間隔更新。兩個通道都可以通過一條書面指令進行更新,因為它們位于同一個 I/O 寄存器 (SDR) 中

表 1:輸出采樣率所需的基本頻率。
如果從通用時鐘輸入到 ABDAC 的 256 個時鐘周期內(nèi)樣本數(shù)據(jù)寄存器未更新,則中斷狀態(tài)寄存器 (ISR) 中的欠載位將被設(shè)置。欠載是 CPU 負載過多的標(biāo)志,因此應(yīng)用程序應(yīng)該通過使用中斷來實現(xiàn),或者更好的是,如果設(shè)備中存在直接內(nèi)存訪問 (DMA)。
中斷
有兩個中斷可用于卸載 CPU。TX_READY 中斷可用作觸發(fā)信號,表示可以寫入每個通道的下一個樣本。
應(yīng)用程序還應(yīng)啟用欠載中斷以在填充樣本數(shù)據(jù)寄存器 (SDR) 時處理欠載。欠載會導(dǎo)致輸出信號出現(xiàn)毛刺和噪聲。
如果觸發(fā)了欠載中斷,則表明 CPU 過載,因為應(yīng)用程序無法及時提供數(shù)據(jù)。
DMA
ABDAC 可以連接到設(shè)備上的 DMA 控制器。在將數(shù)據(jù)從 RAM 中的緩沖區(qū)傳輸?shù)?ABDAC 時,這將減輕 CPU 的負擔(dān)。應(yīng)用程序只需要填充緩沖區(qū)并將緩沖區(qū)地址傳遞給 DMA 控制器。
緩沖區(qū)完成時的觸發(fā)器將讓應(yīng)用程序知道何時將新緩沖區(qū)傳遞給 DMA 控制器。
欠載中斷對于 DMA 傳輸至關(guān)重要,因為它表明設(shè)備中的數(shù)據(jù)總線過載或到 ABDAC 的 DMA 傳輸沒有足夠的優(yōu)先級。
電氣連接
該設(shè)備的輸出不適用于驅(qū)動耳機或揚聲器。焊盤限制了最大電流量。在大多數(shù)實際情況下,這不足以驅(qū)動低阻抗源。
由于此限制,應(yīng)將外部放大器連接到輸出線以放大這些信號。這個放大器設(shè)備也可以用來控制音量。
出于測試目的,音響系統(tǒng)上的線路輸入或麥克風(fēng)輸入可用于評估輸出信號。
無源濾波器
為了將 ABDAC 連接到高阻抗設(shè)備,例如放大器上的線路輸入,應(yīng)添加無源濾波器。圖 2 顯示了一個示例示意圖。

圖 2:帶無源濾波器原理圖的線路輸出。
外部放大器
如果 ABDAC 直接驅(qū)動低阻抗耳機或揚聲器,則需要外部放大器。圖 3 顯示了使用 Texas Instruments 的 TPA152 立體聲音頻放大器的示例原理圖。
驅(qū)動程序?qū)崿F(xiàn)
文件
本文中討論的驅(qū)動程序的完整源代碼可在 www.atmel.com/dyn/resources/prod_documents/AVR32120.zip 中找到。
驅(qū)動程序包含兩個文件,“dac.c”和“dac.h”,其中“dac.h”聲明所有函數(shù),“dac.c”包含源代碼。驅(qū)動程序中唯一需要更改的是指定目標(biāo)設(shè)備。目標(biāo)設(shè)備在“dac.h”的頂部指定。
示例代碼
驅(qū)動程序的示例代碼在兩個 DAC 通道上輸出一個正弦波。該輸出由 GPIO 線上的用戶輸入啟用。接線信息包含在源代碼隨附的文檔中。
示例代碼針對 ATSTK1000,但通過一些調(diào)整,可以與任何帶有 ABDAC 的 AVR32 設(shè)備一起使用。

圖 3:具有外部放大器原理圖的高功率輸出。
圖 4 顯示了示例應(yīng)用程序的流程。該應(yīng)用程序通過輪詢函數(shù)調(diào)用來實現(xiàn),以減少對其他模塊的依賴。

圖 4:ABDAC 示例應(yīng)用流程圖。
進一步閱讀
中斷
ABDAC 接口有一條連接到中斷控制器 (IC) 的中斷線。處理 ABDAC 中斷需要在配置 ABDAC 之前對 IC 進行編程。有關(guān)中斷控制器的更多信息和詳細信息,請參閱應(yīng)用筆記 AVR32101:“AVR32 中斷控制器”。
評論