女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

第十五章 DAC (上篇)

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-05-28 15:07 ? 次閱讀

單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網單片機

W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。

在封裝規格上,W55MH32 提供了兩種選擇:QFN68和QFN100。

W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、3個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN以及1個USB2.0。在保持與同系列其他版本一致的核心性能基礎上,僅減少了部分GPIO以及SDIO接口,其他參數保持一致,性價比優勢顯著,尤其適合網關模組等對空間布局要求較高的場景。緊湊的尺寸和精簡化外設配置,使其能夠在有限空間內實現高效的網絡連接與數據交互,成為物聯網網關、邊緣計算節點等緊湊型設備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設資源,適用于需要多接口擴展的復雜工控場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網絡通信安全再添保障。

為助力開發者快速上手與深入開發,基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。

若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZO2gbOfaAVPzkACJSygzv-rI600.png

第十五章 DAC (上篇)

1 DAC簡介

數字/模擬轉換模塊(DAC)是 12 位數字輸入,電壓輸出的數字/模擬轉換器。DAC 可以配置為 8 位或 12 位模式,也可以與 DMA 控制器配合使用。DAC 工作在 12 位模式時,數據可以設置成左對齊或右對。DAC 模塊有 2 個輸出通道,每個通道都有單獨的轉換器。在雙 DAC 模式下,2 個通道可以獨立地進行轉換,也可以同時進行轉換并同步地更新 2 個通道的輸出。DAC 可以通過引腳輸入參考電壓 VREF+以獲得更精確的轉換結果。

2 DAC主要特征

?2 個 DAC 轉換器:每個轉換器對應 1 個輸出通道

?8 位或者 12 位單調輸出

?12 位模式下數據左對齊或者右對齊

?同步更新功能

?噪聲波形生成

?三角波形生成

?雙 DAC 通道同時或者分別轉換

?每個通道都有 DMA 功能

?外部觸發轉換

?輸入參考電壓 VREF+

DAC通道模塊框圖如下:

wKgZPGg2tLmAVSAVAAKCsGFXf4g888.png

DAC 通道模塊框圖

名稱 型號類型 注釋
VREF+ 輸入,正模擬參考電壓 DAC使用的高端/正極參考電壓,2.4V≤VREF+≤VDDA(3.3V)
VDDA 輸入,模擬電源 模擬電源
VSSA 輸入,模擬電源地 模擬電源的地線
DAC_OUTx 模擬輸出信號 DAC通道x的模擬輸出

注意: 一旦使能 DACx 通道,相應的 GPIO 引腳(PA4 或者 PA5)就會自動與 DAC 的模擬輸出相連(DAC_OUTx)。為了避免寄生的干擾和額外的功耗,引腳 PA4 或者 PA5 在之前應當設置成模擬輸入(AIN)。

3 DAC功能描述

3.1 使能DAC通道

將 DAC_CR 寄存器的 ENx 位置'1'即可打開對 DAC 通道 x 的供電。經過一段啟動時間 tWAKEUP,DAC 通道 x 即被使能。注意: ENx 位只會使能 DAC 通道 x 的模擬部分,即便該位被置'0',DAC 通道 x 的數字部分仍然工作

3.2 使能DAC輸出緩存

DAC 集成了 2 個輸出緩存,可以用來減少輸出阻抗,無需外部運放即可直接驅動外部負載。每個DAC 通道輸出緩存可以通過設置 DAC_CR 寄存器的 BOFFx 位來使能或者關閉。

3.3 DAC數據格式

根據選擇的配置模式,數據按照下文所述寫入指定的寄存器:

?單 DAC 通道 x,有 3 種情況:

······8 位數據右對齊:用戶須將數據寫入寄存器 DAC_DHR8Rx[7:0]位(實際是存入寄存器DHRx[11:4]位)

······12位數據左對齊:用戶須將數據寫入寄DAC_DHR12Lx[15:4]位(實際是存入寄存器DHRx[11:0]位)

······12 位數據右對齊:用戶須將數據寫入寄存器 DAC_DHR12Rx[11:0]位(實際是存入寄存器DHRx[11:0]位)

根據對 DAC_DHRyyyx 寄存器的操作,經過相應的移位后,寫入的數據被轉存到 DHRx 寄存器中(DHRx 是內部的數據保存寄存器 x)。隨后,DHRx 寄存器的內容或被自動地傳送到 DORx 寄存器,或通過軟件觸發或外部事件觸發被傳送到 DORx 寄存器。

wKgZPGg2tLmALWLAAAB_JFfnnX8644.png

單 DAC 通道模式的數據寄存器

?雙 DAC 通道,有 3 種情況:

······8 位數據右對齊:用戶須將 DAC 通道 1 數據寫入寄存器 DAC_DHR8RD[7:0]位(實際是存入寄存器 DHR1[11:4]位),將 DAC 通道 2 數據寫入寄存器DAC_DHR8RD[15:8]位(實際是存入寄存器 DHR2[11:4]位)

·······12 位數據左對齊:用戶須將 DAC 通道 1 數據寫入寄存器 DAC_DHR12LD[15:4]位(實際是存入寄存器 DHR1[11:0]位),將 DAC 通道 2 數據寫入寄存器 DAC_DHR12LD[31:20]位(實際是存入寄存器 DHR2[11:0]位)

·······12 位數據右對齊:用戶須將 DAC 通道 1 數據寫入寄存器 DAC_DHR12RD[11:0]位(實際是存入寄存器 DHR1[11:0]位),將 DAC 通道 2 數據寫入寄存器 DAC_DHR12RD[27:16]位(實際是存入寄存器 DHR2[11:0]位)

根據對 DAC_DHRyyyD 寄存器的操作,經過相應的移位后,寫入的數據被轉存到 DHR1 和 DHR2 寄存器中(DHR1 和 DHR2 是內部的數據保存寄存器 x)。隨后,DHR1 和 DHR2 的內容或被自動地傳送到 DORx 寄存器,或通過軟件觸發或外部事件觸發被傳送到 DORx 寄存器。

wKgZO2g2tLmAPU5xAABwpOAf1mc362.png

雙 DAC 通道模式的數據寄存器

3.4 DAC轉換

不能直接對寄存器 DAC_DORx 寫入數據,任何輸出到 DAC 通道 x 的數據都必須寫入 DAC_DHRx 寄存器(數據實際寫入DAC_DHR8Rx、DAC_DHR12Lx、DAC_DHR12Rx、DAC_DHR8RD、DAC_DHR12LD、或者 DAC_DHR12RD 寄存器)。

如果沒有選中硬件觸發(寄存器 DAC_CR1 的 TENx 位置'0'),存入寄存器 DAC_DHRx 的數據會在一個 APB1 時鐘周期后自動傳至寄存器 DAC_DORx。如果選中硬件觸發(寄存器 DAC_CR1 的 TENx 位置'1'),數據傳輸在觸發發生以后 3 個 APB1 時鐘周期后完成。一旦數據從 DAC_DHRx 寄存器裝入 DAC_DORx 寄存器,在經過時間 tSETTLING 之后,輸出即有效,這段時間的長短依電源電壓和模擬輸出負載的不同會有所變化。

wKgZPGg2tLmAESOrAADSgnkVvDY153.png

TEN=0 觸發失能時轉換的時間框圖

3.5 DAC輸出電壓

數字輸入經過 DAC 被線性地轉換為模擬電壓輸出,其范圍為 0 到 VREF+。

任一 DAC 通道引腳上的輸出電壓滿足下面的關系:

?DAC 輸出=VREFx(DOR/4095)。

3.6 選擇DAC觸發

如果 TENx 位被置 1,DAC 轉換可以由某外部事件觸發(定時器計數器、外部中斷線)。配置控制TSELx[2:0]可以選擇 8 個觸發事件之一觸發 DAC 轉換。

觸發源 類型 TSELx[2:0]
定時器 6TRGO 事件 來自片上定時器的內部信號 000
定時器 8TRGO 事件 001
定時器 7TRGO 事件 010
定時器 5TRGO 事件 011
定時器 2TRGO 事件 100

每次 DAC 接口偵測到來自選中的定時器 TRGO 輸出,或者外部中斷線 9 的上升沿,最近存放在寄存器 DAC_DHRx 中的數據會被傳送到寄存器 DAC_DORx 中。在 3 個 APB1 時鐘周期后,寄存器DAC_DORx 更新為新值。

如果選擇軟件觸發,一旦 SWTRIG 位置'1',轉換即開始。在數據從 DAC_DHRx 寄存器傳送到DAC_DORx 寄存器后,SWTRIG 位由硬件自動清'0'。

注意: 1.不能在 ENx 為'1'時改變 TSELx[2:0]位。2.如果選擇軟件觸發,數據從寄存器 DAC_DHRx 傳送到寄存器 DAC_DORx 只需要一個 APB1 時鐘周期。

3.7 DMA請求

任一 DAC 通道都具有 DMA 功能。2 個 DMA 通道可分別用于 2 個 DAC 通道的 DMA 請求。如果DMAENx 位置'1',一旦有外部觸發(而不是軟件觸發)發生,則產生一個 DMA 請求,然后DAC_DHRx 寄存器的數據被傳送到 DAC_DORx 寄存器。

在雙 DAC 模式下,如果 2 個通道的 DMAENx 位都為'1',則會產生 2 個 DMA 請求。如果實際只需要一個 DMA 傳輸,則應只選擇其中一個 DMAENx 位置'1'。這樣,程序可以在只使用一個 DMA 請求,一個DMA 通道的情況下,處理工作在雙 DAC 模式的 2 個 DAC 通道。DAC 的 DMA 請求不會累計,因此如果第 2 個外部觸發發生在響應第 1 個外部觸發之前,則不能處理第 2 個 DMA 請求,也不會報告錯誤。

3.8 噪聲生成

可以利用線性反饋移位寄存器(Linear Feedback Shift Register LFSR)產生幅度變化的偽噪聲。設置WAVE[1:0]位為'01'選擇DAC噪聲生成功能。寄存器LFSR的預裝入值為0xAAA。按照特定算法,在每次觸發事件后 3 個 APB1 時鐘周期之后更新該寄存器的值。

DACLFSR 寄存器算法

設置 DAC_CR 寄存器的 MAMPx[3:0]位可以屏蔽部分或者全部 LFSR 的數據,這樣的得到的 LSFR 值與 DAC_DHRx 的數值相加,去掉溢出位之后即被寫入 DAC_DORx 寄存器。

如果寄存器 LFSR 值為 0x000,則會注入'1'(防鎖定機制)。將 WAVEx[1:0]位置'0'可以復位 LFSR 波形的生成算法。

wKgZPGg2tLmAN4S2AAGEQZTDqPY885.png

帶 LFSR 波形生成的 DAC 轉換(使能軟件觸發)

3.9 三角波生成

可以在 DC 或者緩慢變化的信號上加上一個小幅度的三角波。設置 WAVEx[1:0]位為'10'選擇 DAC 的三角波生成功能。設置 DAC_CR 寄存器的 MAMPx[3:0]位來選擇三角波的幅度。內部的三角波計數器每次觸發事件之后 3 個 APB1 時鐘周期后累加 1。計數器的值與 DAC_DHRx 寄存器的數值相加并丟棄溢出位后寫入 DAC_DORx 寄存器。在傳入 DAC_DORx 寄存器的數值小于 MAMP[3:0]位定義的最大幅度時,三角波計數器逐步累加。一旦達到設置的最大幅度,則計數器開始遞減,達到 0 后再開始累加,周而復始。

將 WAVEx[1:0]位置'0'可以復位三角波的生成。

wKgZO2g2tLmAa3yyAADVSI1IJ4I507.png

DAC 三角波生成

wKgZPGg3sjKAB-cZAAEUobgNocA709.png

帶三角生成的 DAC 轉換(使能軟件觸發)

注意: 1.為了產生三角波,必須使能 DAC 觸發,即設 DAC_CR 寄存器的 TENx 位為'1'。

MAMP[3:0]位必須在使能 DAC 之前設置,否則其值不能修改。

4 雙DAC通道轉換

在需要 2 個 DAC 同時工作的情況下,為了更有效地利用總線帶寬,DAC 集成了 3 個供雙 DAC 模式使用的寄存器:DHR8RD、DHR12RD 和 DHR12LD,只需要訪問一個寄存器即可完成同時驅動 2 個DAC 通道的操作。

對于雙 DAC 通道轉換和這些專用寄存器,共有 11 種轉換模式可用。這些轉換模式在只使用一個DAC 通道的情況下,仍然可通過獨立的 DHRx 寄存器操作。

4.1 不使用波形發生器的獨立觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1';

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發源;

?將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。

當發生 DAC 通道 1 觸發事件時,(延遲 3 個 APB1 時鐘周期后)寄存器 DHR1 的值傳入寄存器DAC_DOR1。

當發生 DAC 通道 2 觸發事件時,(延遲 3 個 APB1 時鐘周期后)寄存器 DHR2 的值傳入寄存器DAC_DOR2。

4.2 使用相同LFSR的獨立觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1';

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發源;

?設置 2 個 DAC 通道的 WAVEx[1:0]位為”01”,并設置 MAMPx[3:0]為相同的 LFSR 屏蔽值;

?將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。

當發生 DAC 通道 1 觸發事件時,具有相同屏蔽的 LFSR1 計數器值與 DHR1 寄存器數值相加,(延遲3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數器。當發生 DAC 通道 2 觸發事件時,具有相同屏蔽的 LFSR2 計數器值與 DHR2 寄存器數值相加,(延遲3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數器。

4.3 使用不同LFSR的獨立觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1';

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發源;

?設置 2 個 DAC 通道的 WAVEx[1:0]位為”01”,并設 MAMPx[3:0]為不同的 LFSR 屏蔽值;

?將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或者 DHR8RD)。

當發生 DAC 通道 1 觸發事件時,按照 MAMP1[3:0]所設屏蔽的 LFSR1 計數器值與 DHR1 寄存器數值相加,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數器。當發生 DAC 通道 2 觸發事件時,按照 MAMP2[3:0]所設屏蔽的 LFSR2 計數器值與 DHR2 寄存器數值相加,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數器。

4.4 產生相同三角波的獨立觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1';

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發源;

?設置 2 個 DAC 通道的 WAVEx[1:0]位為”1x”,并設 MAMPx[3:0]為相同的三角波幅值;

將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。

當發生 DAC 通道 1 觸發事件時,相同的三角波幅值加上 DHR1 寄存器的值,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR1,然后更新 DAC 通道 1 三角波計數器。

當發生 DAC 通道 2 觸發事件時,相同的三角波幅值加上 DHR2 寄存器的值,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR2,然后更新 DAC 通道 2 三角波計數器。

4.5 產生不同三角波的獨立觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1';

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發源;

?設置 2 個 DAC 通道的 WAVEx[1:0]位為'1x',并設 MAMPx[3:0]為不同的三角波幅值。

?將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。

當發生 DAC 通道 1 觸發事件時,MAMP1[3:0]所設的三角波幅值加上 DHR1 寄存器數值,(延遲 3 個APB1 時鐘周期后)結果傳入寄存器 DAC_DOR1,然后更新 DAC 通道 1 三角波計數器。

當發生 DAC 通道 2 觸發事件時,MAMP2[3:0]所設的三角波幅值加上 DHR2 寄存器數值,(延遲 3 個APB1 時鐘周期后)結果傳入寄存器 DAC_DOR2,然后更新 DAC 通道 2 三角波計數器。

4.6 同時軟件啟動

按照下列過程設置 DAC 工作在此轉換模式:

?將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。在此配置下,一個 APB1 時鐘周期后,DHR1 和 DHR2 寄存器的數值即被分別傳入 DAC_DOR1 和DAC_DOR2 寄存器。

4.7 不使用波形發生器的同時觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1';

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發源;

?將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。

當發生觸發事件時,(延遲 3 個 APB1 時鐘周期后)DHR1 和 DHR2 寄存器的數值分別傳入 DAC_DOR1和 DAC_DOR2 寄存器。

4.8 使用相同LFSR的同時觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1';

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發源;

?設置 2 個 DAC 通道的 WAVEx[1:0]位為”01”,并設 MAMPx[3:0]為相同的 LFSR 屏蔽值;

?將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD);

當發生觸發事件時,MAMP1[3:0]所設屏蔽的 LFSR1 計數器值與 DHR1 寄存器的數值相加,(延遲 3個 APB1 時鐘周期后)結果傳入 DAC_DOR1 寄存器,然后更新 LFSR1 計數器。同樣,MAMP1[3:0]所設屏蔽的 LFSR2 計數器值與 DHR2 寄存器的數值相加,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數器。

4.9 使用不同LFSR的同時觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1';

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發源;

?設置 2 個 DAC 通道的 WAVEx[1:0]位為'01',并設 MAMPx[3:0]為不同的 LFSR 屏蔽值;

?將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。

當發生觸發事件時,具有相同屏蔽的 LFSR1 計數器值與 DHR1 寄存器數值相加,(延遲 3 個 APB1時鐘周期后)結果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數器。同時,具有相同屏蔽的 LFSR2 計數器值與 DHR2 寄存器數值相加,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數器。

4.10 使用相同三角波發生器的同時觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1':

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發源。

?設置 2 個 DAC 通道的 WAVEx[1:0]位為'1x',并設 MAMPx[3:0]為相同的三角波幅值。將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。

當發生觸發事件時,相同的三角波幅值與 DHR1 寄存器數值相加,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數器。同時,相同的三角波幅值與 DHR2 寄存器數值相加,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器DAC_DOR2,然后更新 LFSR2 計數器。

4.11 使用不同三角波發生器的同時觸發

按照下列順序設置 DAC 工作在此轉換模式:

?分別設置 2 個 DAC 通道的觸發使能位 TEN1 和 TEN2 為'1':

?通過設置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發源。

?設置 2 個 DAC 通道的 WAVEx[1:0]位為'1x',并設 MAMPx[3:0]為不同的三角波幅值。

?將雙 DAC 通道轉換數據裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。

當發生觸發事件時,MAMP1[3:0]所設的三角波幅值與 DHR1 寄存器數值相加,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數器。同時,MAMP2[3:0]所設的三角波幅值與 DHR2 寄存器數值相加,(延遲 3 個 APB1 時鐘周期后)結果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數器。

5 例程設計

5.1 DAC_OutAudio例程

1.UART 模塊:配置 USART1,波特率為 115200,將printf輸出重定向到該串口,用于輸出系統時鐘信息與測試提示。

// UART初始化函數
void UART_Configuration(uint32_t bound)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

    // 使能USART1和GPIOA時鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

    // 配置TX引腳(PA9)為復用推挽輸出
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置RX引腳(PA10)為浮空輸入
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置串口參數:115200bps,8位數據,1位停止位
    USART_InitStructure.USART_BaudRate = bound;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    USART_Init(USART1, &USART_InitStructure);
    USART_Cmd(USART1, ENABLE);
}

// 重定向printf函數到USART1
int SER_PutChar(int ch)
{
    while (!USART_GetFlagStatus(USART_TEST, USART_FLAG_TC)); // 等待發送完成
    USART_SendData(USART_TEST, (uint8_t)ch);
    return ch;
}

int fputc(int c, FILE *f)
{
    if (c == 'n') SER_PutChar('r'); // 自動添加回車符
    return SER_PutChar(c);
}

2.GPIO 模塊:使能 GPIOA 時鐘,把引腳 4 和 5 配置成模擬輸入模式,為 DAC 輸出做準備。

3.DAC 模塊:使能 DAC 時鐘,對 DAC 通道 1 和通道 2 進行初始化,設置初始輸出值,將觸發源設為定時器 2 的觸發輸出,同時使能 DMA 請求。

4.定時器模塊:使能定時器 2 時鐘,配置其參數以產生 8kHz 的更新事件,將更新事件選為觸發輸出。

5.DMA 模塊:使能 DMA2 時鐘,配置通道 4 和通道 3,將Sine12bit數組的數據循環傳輸到 DAC2 和 DAC1 的數據寄存器。

void DMA_Configuration(void)
{
    DMA_InitTypeDef DMA_InitStructure;

    // 使能DMA2時鐘
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

    // 配置DMA2通道4(DAC2)
    DMA_InitStructure.DMA_PeripheralBaseAddr = DAC2_DHR12RD_ADDRESS; // DAC2數據寄存器地址
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&Sine12bit;      // 數據源:正弦波數組
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;                // 內存到外設
    DMA_InitStructure.DMA_BufferSize = DATA_LEN;                      // 傳輸長度
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;           // 內存地址遞增
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // 16位數據
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                   // 循環模式
    DMA_Init(DMA2_Channel4, &DMA_InitStructure);
    DMA_Cmd(DMA2_Channel4, ENABLE);

    // 配置DMA2通道3(DAC1,參數與通道4相同)
    DMA_InitStructure.DMA_PeripheralBaseAddr = DAC1_DHR12RD_ADDRESS;
    DMA_Init(DMA2_Channel3, &DMA_InitStructure);
    DMA_Cmd(DMA2_Channel3, ENABLE);
}

數據轉換模塊:把 8 位數據轉換為 12 位數據,存于Sine12bit數組。

6 下載驗證

6.2 DAC_OutAudio例程

初始輸出

在 DAC 配置過程中,代碼會先將 DAC 通道 1 和通道 2 的輸出設置為一個初始值(代碼中設置為 3102)。因此,在程序啟動的瞬間,DAC 的兩個通道會輸出對應于該初始值的電壓信號。

在完成所有配置后,DMA 會將Sine12bit數組中的數據循環傳輸到 DAC 的數據寄存器,同時定時器 TIM2 會以 8kHz 的頻率產生觸發信號,觸發 DAC 進行數模轉換。因此,DAC 的兩個通道會持續輸出軟件生成的正弦波信號。

?頻率:由于定時器 TIM2 的周期設置為 8999,預分頻器設置為 0,所以定時器的更新頻率為 8kHz,這意味著 DAC 輸出的正弦波信號的頻率也為 8kHz。

?幅度:正弦波的幅度取決于Sine12bit數組中的數據,該數組中的數據是通過uint8_uint16函數將data數組中的 8 位數據轉換為 12 位數據得到的。

WIZnet 是一家無晶圓廠半導體公司,成立于 1998 年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應用中的嵌入式互聯網設備。

WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。

香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6063

    文章

    44921

    瀏覽量

    646962
  • dac
    dac
    +關注

    關注

    43

    文章

    2379

    瀏覽量

    193034
  • dma
    dma
    +關注

    關注

    3

    文章

    572

    瀏覽量

    102323
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    第十五章 DAC (下篇)

    本篇文章為第十五章DAC(下篇),介紹三個例程:DAC_OutDMASineWave用DMA輸出正弦波,DAC_OutNoiseWave輸出噪聲波,
    的頭像 發表于 05-28 15:39 ?343次閱讀
    <b class='flag-5'>第十五章</b> <b class='flag-5'>DAC</b> (下篇)

    《DNK210使用指南 -CanMV版 V1.0》第十五章 按鍵中斷實驗

    第十五章 按鍵中斷實驗 本章實驗將介紹如何使用CanMV讓Kendryte K210通過中斷的方式獲取板載按鍵的狀態。通過本章的學習,讀者將學習到在CanMV下Kendryte K210的GPIO
    發表于 10-12 09:20

    至芯科技之altera 系列FPGA教程 第十五篇 安裝驅動

    至芯科技之altera 系列FPGA教程 第十五篇 安裝驅動
    發表于 08-11 03:34

    視頻詳解:上海尤老師verilog入門到實戰第十五

    本帖最后由 春哥哥 于 2016-10-10 17:48 編輯 上海尤老師verilog入門到實戰第十五課——無線通信中的升采樣過程中的頻譜搬遷過程;百度云網盤鏈接后綴:/s/1i5kCpXb,加群討論252520964,307510678
    發表于 10-10 10:42

    基于RFID和MySQL實現小區門禁系統

    第十五章 用RFID+MySQL實現小區門禁系統(RFID522+ESP8266-12N+1602LCD)(Arduino邊做邊學:從點亮Led到物聯網)
    發表于 06-24 08:26

    「正點原子Linux連載」第十五章按鍵輸入試驗

    1)實驗平臺:正點原子Linux開發板2)摘自《正點原子I.MX6U嵌入式Linux驅動開發指南》關注官方微信號公眾號,獲取更多資料:正點原子第十五章按鍵輸入試驗 前面幾章試驗都是講解
    發表于 12-21 12:11

    第十五屆智能車入門淺談 精選資料分享

    @TOC第十五屆智能車入門淺談寫博客原因這次第十五屆全國智能車大賽已經結束了,對于我而言,確實是我大學中一個不可多得的經歷,我希望我的這段經歷可以保存下來通過博客的形式,同時可以對于其他人有幫助
    發表于 07-28 06:02

    第十五講 組合邏輯電路的分析方法和設計方法

    第十五講 組合邏輯電路的分析方法和設計方法 6.1概述組合邏輯電路:定義構成電路特點6.2.1組合邏輯電路的分析方法
    發表于 03-30 16:21 ?4942次閱讀
    <b class='flag-5'>第十五</b>講 組合邏輯電路的分析方法和設計方法

    模擬電路網絡課件 第十五節:單級放大電路的瞬態響應

    模擬電路網絡課件 第十五節:單級放大電路的瞬態響應 3.8 單級放大電路的瞬態響應
    發表于 09-17 10:18 ?880次閱讀
    模擬電路網絡課件 <b class='flag-5'>第十五</b>節:單級放大電路的瞬態響應

    【正點原子FPGA連載】第二十五章HDMI方塊移動實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

    【正點原子FPGA連載】第二十五章HDMI方塊移動實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1
    發表于 11-24 14:36 ?13次下載
    【正點原子FPGA連載】第二<b class='flag-5'>十五章</b>HDMI方塊移動實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

    第十五屆智能車入門淺談

    @TOC第十五屆智能車入門淺談寫博客原因這次第十五屆全國智能車大賽已經結束了,對于我而言,確實是我大學中一個不可多得的經歷,我希望我的這段經歷可以保存下來通過博客的形式,同時可以對于其他人有幫助
    發表于 11-26 12:36 ?16次下載
    <b class='flag-5'>第十五</b>屆智能車入門淺談

    【正點原子FPGA連載】第三十五章高速AD/DA實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

    【正點原子FPGA連載】第三十五章高速AD/DA實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1
    發表于 12-04 15:06 ?12次下載
    【正點原子FPGA連載】第三<b class='flag-5'>十五章</b>高速AD/DA實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

    【正點原子FPGA連載】第十五章 窗口門狗(WWDG)實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

    【正點原子FPGA連載】第十五章 窗口門狗(WWDG)實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1
    發表于 12-05 11:21 ?12次下載
    【正點原子FPGA連載】<b class='flag-5'>第十五章</b> 窗口門狗(WWDG)實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

    深度參與,共話未來 —— 吹田電氣亮相第十五屆亞洲電源技術發展論壇

    在這個金秋時節,吹田電氣帶著對電源技術的無限熱愛與追求,我們啟程前往第十五屆亞洲電源技術發展論壇的盛會。在這場匯聚了行業精英、學者與前沿技術的盛會中,我們不僅僅見證了電源技術的最新進展,更與眾多同行
    的頭像 發表于 12-09 16:58 ?675次閱讀
    深度參與,共話未來 —— 吹田電氣亮相<b class='flag-5'>第十五</b>屆亞洲電源技術發展論壇

    銳馳智光亮相第十五屆交博會

    2025年4月23日,第十五屆中國國際道路交通安全博覽會(以下簡稱“交博會”)在武漢國際博覽中心盛大啟幕。
    的頭像 發表于 04-24 17:12 ?359次閱讀