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

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

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

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

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

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