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

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

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

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

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

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




























評論