單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來前所未有的集成化體驗。這顆芯片將強(qiáng)大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨立的32KB以太網(wǎng)收發(fā)緩存,可供8個獨立硬件socket使用。如此配置,真正實現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN68和QFN100。
W55MH32Q采用QFN68封裝版本,尺寸為8x8mm,它擁有36個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、3個串口、2個SPI接口(其中1個帶I2S接口復(fù)用)、1個CAN以及1個USB2.0。在保持與同系列其他版本一致的核心性能基礎(chǔ)上,僅減少了部分GPIO以及SDIO接口,其他參數(shù)保持一致,性價比優(yōu)勢顯著,尤其適合網(wǎng)關(guān)模組等對空間布局要求較高的場景。緊湊的尺寸和精簡化外設(shè)配置,使其能夠在有限空間內(nèi)實現(xiàn)高效的網(wǎng)絡(luò)連接與數(shù)據(jù)交互,成為物聯(lián)網(wǎng)網(wǎng)關(guān)、邊緣計算節(jié)點等緊湊型設(shè)備的理想選擇。 同系列還有QFN100封裝的W55MH32L版本,該版本擁有更豐富的外設(shè)資源,適用于需要多接口擴(kuò)展的復(fù)雜工控場景,軟件使用方法一致。更多信息和資料請進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32Q這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評估芯片性能。
若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。
第十五章 DAC (上篇)
1 DAC簡介
數(shù)字/模擬轉(zhuǎn)換模塊(DAC)是 12 位數(shù)字輸入,電壓輸出的數(shù)字/模擬轉(zhuǎn)換器。DAC 可以配置為 8 位或 12 位模式,也可以與 DMA 控制器配合使用。DAC 工作在 12 位模式時,數(shù)據(jù)可以設(shè)置成左對齊或右對。DAC 模塊有 2 個輸出通道,每個通道都有單獨的轉(zhuǎn)換器。在雙 DAC 模式下,2 個通道可以獨立地進(jìn)行轉(zhuǎn)換,也可以同時進(jìn)行轉(zhuǎn)換并同步地更新 2 個通道的輸出。DAC 可以通過引腳輸入?yún)⒖茧妷?VREF+以獲得更精確的轉(zhuǎn)換結(jié)果。
2 DAC主要特征
?2 個 DAC 轉(zhuǎn)換器:每個轉(zhuǎn)換器對應(yīng) 1 個輸出通道
?8 位或者 12 位單調(diào)輸出
?12 位模式下數(shù)據(jù)左對齊或者右對齊
?同步更新功能
?噪聲波形生成
?三角波形生成
?雙 DAC 通道同時或者分別轉(zhuǎn)換
?每個通道都有 DMA 功能
?外部觸發(fā)轉(zhuǎn)換
?輸入?yún)⒖茧妷?VREF+
DAC通道模塊框圖如下:
DAC 通道模塊框圖
名稱 | 型號類型 | 注釋 |
VREF+ | 輸入,正模擬參考電壓 | DAC使用的高端/正極參考電壓,2.4V≤VREF+≤VDDA(3.3V) |
VDDA | 輸入,模擬電源 | 模擬電源 |
VSSA | 輸入,模擬電源地 | 模擬電源的地線 |
DAC_OUTx | 模擬輸出信號 | DAC通道x的模擬輸出 |
注意: 一旦使能 DACx 通道,相應(yīng)的 GPIO 引腳(PA4 或者 PA5)就會自動與 DAC 的模擬輸出相連(DAC_OUTx)。為了避免寄生的干擾和額外的功耗,引腳 PA4 或者 PA5 在之前應(yīng)當(dāng)設(shè)置成模擬輸入(AIN)。
3 DAC功能描述
3.1 使能DAC通道
將 DAC_CR 寄存器的 ENx 位置'1'即可打開對 DAC 通道 x 的供電。經(jīng)過一段啟動時間 tWAKEUP,DAC 通道 x 即被使能。注意: ENx 位只會使能 DAC 通道 x 的模擬部分,即便該位被置'0',DAC 通道 x 的數(shù)字部分仍然工作
3.2 使能DAC輸出緩存
DAC 集成了 2 個輸出緩存,可以用來減少輸出阻抗,無需外部運(yùn)放即可直接驅(qū)動外部負(fù)載。每個DAC 通道輸出緩存可以通過設(shè)置 DAC_CR 寄存器的 BOFFx 位來使能或者關(guān)閉。
3.3 DAC數(shù)據(jù)格式
根據(jù)選擇的配置模式,數(shù)據(jù)按照下文所述寫入指定的寄存器:
?單 DAC 通道 x,有 3 種情況:
······8 位數(shù)據(jù)右對齊:用戶須將數(shù)據(jù)寫入寄存器 DAC_DHR8Rx[7:0]位(實際是存入寄存器DHRx[11:4]位)
······12位數(shù)據(jù)左對齊:用戶須將數(shù)據(jù)寫入寄DAC_DHR12Lx[15:4]位(實際是存入寄存器DHRx[11:0]位)
······12 位數(shù)據(jù)右對齊:用戶須將數(shù)據(jù)寫入寄存器 DAC_DHR12Rx[11:0]位(實際是存入寄存器DHRx[11:0]位)
根據(jù)對 DAC_DHRyyyx 寄存器的操作,經(jīng)過相應(yīng)的移位后,寫入的數(shù)據(jù)被轉(zhuǎn)存到 DHRx 寄存器中(DHRx 是內(nèi)部的數(shù)據(jù)保存寄存器 x)。隨后,DHRx 寄存器的內(nèi)容或被自動地傳送到 DORx 寄存器,或通過軟件觸發(fā)或外部事件觸發(fā)被傳送到 DORx 寄存器。
單 DAC 通道模式的數(shù)據(jù)寄存器
?雙 DAC 通道,有 3 種情況:
······8 位數(shù)據(jù)右對齊:用戶須將 DAC 通道 1 數(shù)據(jù)寫入寄存器 DAC_DHR8RD[7:0]位(實際是存入寄存器 DHR1[11:4]位),將 DAC 通道 2 數(shù)據(jù)寫入寄存器DAC_DHR8RD[15:8]位(實際是存入寄存器 DHR2[11:4]位)
·······12 位數(shù)據(jù)左對齊:用戶須將 DAC 通道 1 數(shù)據(jù)寫入寄存器 DAC_DHR12LD[15:4]位(實際是存入寄存器 DHR1[11:0]位),將 DAC 通道 2 數(shù)據(jù)寫入寄存器 DAC_DHR12LD[31:20]位(實際是存入寄存器 DHR2[11:0]位)
·······12 位數(shù)據(jù)右對齊:用戶須將 DAC 通道 1 數(shù)據(jù)寫入寄存器 DAC_DHR12RD[11:0]位(實際是存入寄存器 DHR1[11:0]位),將 DAC 通道 2 數(shù)據(jù)寫入寄存器 DAC_DHR12RD[27:16]位(實際是存入寄存器 DHR2[11:0]位)
根據(jù)對 DAC_DHRyyyD 寄存器的操作,經(jīng)過相應(yīng)的移位后,寫入的數(shù)據(jù)被轉(zhuǎn)存到 DHR1 和 DHR2 寄存器中(DHR1 和 DHR2 是內(nèi)部的數(shù)據(jù)保存寄存器 x)。隨后,DHR1 和 DHR2 的內(nèi)容或被自動地傳送到 DORx 寄存器,或通過軟件觸發(fā)或外部事件觸發(fā)被傳送到 DORx 寄存器。
雙 DAC 通道模式的數(shù)據(jù)寄存器
3.4 DAC轉(zhuǎn)換
不能直接對寄存器 DAC_DORx 寫入數(shù)據(jù),任何輸出到 DAC 通道 x 的數(shù)據(jù)都必須寫入 DAC_DHRx 寄存器(數(shù)據(jù)實際寫入DAC_DHR8Rx、DAC_DHR12Lx、DAC_DHR12Rx、DAC_DHR8RD、DAC_DHR12LD、或者 DAC_DHR12RD 寄存器)。
如果沒有選中硬件觸發(fā)(寄存器 DAC_CR1 的 TENx 位置'0'),存入寄存器 DAC_DHRx 的數(shù)據(jù)會在一個 APB1 時鐘周期后自動傳至寄存器 DAC_DORx。如果選中硬件觸發(fā)(寄存器 DAC_CR1 的 TENx 位置'1'),數(shù)據(jù)傳輸在觸發(fā)發(fā)生以后 3 個 APB1 時鐘周期后完成。一旦數(shù)據(jù)從 DAC_DHRx 寄存器裝入 DAC_DORx 寄存器,在經(jīng)過時間 tSETTLING 之后,輸出即有效,這段時間的長短依電源電壓和模擬輸出負(fù)載的不同會有所變化。
TEN=0 觸發(fā)失能時轉(zhuǎn)換的時間框圖
3.5 DAC輸出電壓
數(shù)字輸入經(jīng)過 DAC 被線性地轉(zhuǎn)換為模擬電壓輸出,其范圍為 0 到 VREF+。
任一 DAC 通道引腳上的輸出電壓滿足下面的關(guān)系:
?DAC 輸出=VREFx(DOR/4095)。
3.6 選擇DAC觸發(fā)
如果 TENx 位被置 1,DAC 轉(zhuǎn)換可以由某外部事件觸發(fā)(定時器計數(shù)器、外部中斷線)。配置控制TSELx[2:0]可以選擇 8 個觸發(fā)事件之一觸發(fā) DAC 轉(zhuǎn)換。
觸發(fā)源 | 類型 | TSELx[2:0] |
定時器 6TRGO 事件 | 來自片上定時器的內(nèi)部信號 | 000 |
定時器 8TRGO 事件 | 001 | |
定時器 7TRGO 事件 | 010 | |
定時器 5TRGO 事件 | 011 | |
定時器 2TRGO 事件 | 100 |
每次 DAC 接口偵測到來自選中的定時器 TRGO 輸出,或者外部中斷線 9 的上升沿,最近存放在寄存器 DAC_DHRx 中的數(shù)據(jù)會被傳送到寄存器 DAC_DORx 中。在 3 個 APB1 時鐘周期后,寄存器DAC_DORx 更新為新值。
如果選擇軟件觸發(fā),一旦 SWTRIG 位置'1',轉(zhuǎn)換即開始。在數(shù)據(jù)從 DAC_DHRx 寄存器傳送到DAC_DORx 寄存器后,SWTRIG 位由硬件自動清'0'。
注意: 1.不能在 ENx 為'1'時改變 TSELx[2:0]位。2.如果選擇軟件觸發(fā),數(shù)據(jù)從寄存器 DAC_DHRx 傳送到寄存器 DAC_DORx 只需要一個 APB1 時鐘周期。
3.7 DMA請求
任一 DAC 通道都具有 DMA 功能。2 個 DMA 通道可分別用于 2 個 DAC 通道的 DMA 請求。如果DMAENx 位置'1',一旦有外部觸發(fā)(而不是軟件觸發(fā))發(fā)生,則產(chǎn)生一個 DMA 請求,然后DAC_DHRx 寄存器的數(shù)據(jù)被傳送到 DAC_DORx 寄存器。
在雙 DAC 模式下,如果 2 個通道的 DMAENx 位都為'1',則會產(chǎn)生 2 個 DMA 請求。如果實際只需要一個 DMA 傳輸,則應(yīng)只選擇其中一個 DMAENx 位置'1'。這樣,程序可以在只使用一個 DMA 請求,一個DMA 通道的情況下,處理工作在雙 DAC 模式的 2 個 DAC 通道。DAC 的 DMA 請求不會累計,因此如果第 2 個外部觸發(fā)發(fā)生在響應(yīng)第 1 個外部觸發(fā)之前,則不能處理第 2 個 DMA 請求,也不會報告錯誤。
3.8 噪聲生成
可以利用線性反饋移位寄存器(Linear Feedback Shift Register LFSR)產(chǎn)生幅度變化的偽噪聲。設(shè)置WAVE[1:0]位為'01'選擇DAC噪聲生成功能。寄存器LFSR的預(yù)裝入值為0xAAA。按照特定算法,在每次觸發(fā)事件后 3 個 APB1 時鐘周期之后更新該寄存器的值。
DACLFSR 寄存器算法
設(shè)置 DAC_CR 寄存器的 MAMPx[3:0]位可以屏蔽部分或者全部 LFSR 的數(shù)據(jù),這樣的得到的 LSFR 值與 DAC_DHRx 的數(shù)值相加,去掉溢出位之后即被寫入 DAC_DORx 寄存器。
如果寄存器 LFSR 值為 0x000,則會注入'1'(防鎖定機(jī)制)。將 WAVEx[1:0]位置'0'可以復(fù)位 LFSR 波形的生成算法。
帶 LFSR 波形生成的 DAC 轉(zhuǎn)換(使能軟件觸發(fā))
3.9 三角波生成
可以在 DC 或者緩慢變化的信號上加上一個小幅度的三角波。設(shè)置 WAVEx[1:0]位為'10'選擇 DAC 的三角波生成功能。設(shè)置 DAC_CR 寄存器的 MAMPx[3:0]位來選擇三角波的幅度。內(nèi)部的三角波計數(shù)器每次觸發(fā)事件之后 3 個 APB1 時鐘周期后累加 1。計數(shù)器的值與 DAC_DHRx 寄存器的數(shù)值相加并丟棄溢出位后寫入 DAC_DORx 寄存器。在傳入 DAC_DORx 寄存器的數(shù)值小于 MAMP[3:0]位定義的最大幅度時,三角波計數(shù)器逐步累加。一旦達(dá)到設(shè)置的最大幅度,則計數(shù)器開始遞減,達(dá)到 0 后再開始累加,周而復(fù)始。
將 WAVEx[1:0]位置'0'可以復(fù)位三角波的生成。
DAC 三角波生成
帶三角生成的 DAC 轉(zhuǎn)換(使能軟件觸發(fā))
注意: 1.為了產(chǎn)生三角波,必須使能 DAC 觸發(fā),即設(shè) DAC_CR 寄存器的 TENx 位為'1'。
MAMP[3:0]位必須在使能 DAC 之前設(shè)置,否則其值不能修改。
4 雙DAC通道轉(zhuǎn)換
在需要 2 個 DAC 同時工作的情況下,為了更有效地利用總線帶寬,DAC 集成了 3 個供雙 DAC 模式使用的寄存器:DHR8RD、DHR12RD 和 DHR12LD,只需要訪問一個寄存器即可完成同時驅(qū)動 2 個DAC 通道的操作。
對于雙 DAC 通道轉(zhuǎn)換和這些專用寄存器,共有 11 種轉(zhuǎn)換模式可用。這些轉(zhuǎn)換模式在只使用一個DAC 通道的情況下,仍然可通過獨立的 DHRx 寄存器操作。
4.1 不使用波形發(fā)生器的獨立觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1';
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發(fā)源;
?將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。
當(dāng)發(fā)生 DAC 通道 1 觸發(fā)事件時,(延遲 3 個 APB1 時鐘周期后)寄存器 DHR1 的值傳入寄存器DAC_DOR1。
當(dāng)發(fā)生 DAC 通道 2 觸發(fā)事件時,(延遲 3 個 APB1 時鐘周期后)寄存器 DHR2 的值傳入寄存器DAC_DOR2。
4.2 使用相同LFSR的獨立觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1';
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發(fā)源;
?設(shè)置 2 個 DAC 通道的 WAVEx[1:0]位為”01”,并設(shè)置 MAMPx[3:0]為相同的 LFSR 屏蔽值;
?將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。
當(dāng)發(fā)生 DAC 通道 1 觸發(fā)事件時,具有相同屏蔽的 LFSR1 計數(shù)器值與 DHR1 寄存器數(shù)值相加,(延遲3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數(shù)器。當(dāng)發(fā)生 DAC 通道 2 觸發(fā)事件時,具有相同屏蔽的 LFSR2 計數(shù)器值與 DHR2 寄存器數(shù)值相加,(延遲3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數(shù)器。
4.3 使用不同LFSR的獨立觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1';
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發(fā)源;
?設(shè)置 2 個 DAC 通道的 WAVEx[1:0]位為”01”,并設(shè) MAMPx[3:0]為不同的 LFSR 屏蔽值;
?將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或者 DHR8RD)。
當(dāng)發(fā)生 DAC 通道 1 觸發(fā)事件時,按照 MAMP1[3:0]所設(shè)屏蔽的 LFSR1 計數(shù)器值與 DHR1 寄存器數(shù)值相加,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數(shù)器。當(dāng)發(fā)生 DAC 通道 2 觸發(fā)事件時,按照 MAMP2[3:0]所設(shè)屏蔽的 LFSR2 計數(shù)器值與 DHR2 寄存器數(shù)值相加,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數(shù)器。
4.4 產(chǎn)生相同三角波的獨立觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1';
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發(fā)源;
?設(shè)置 2 個 DAC 通道的 WAVEx[1:0]位為”1x”,并設(shè) MAMPx[3:0]為相同的三角波幅值;
將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。
當(dāng)發(fā)生 DAC 通道 1 觸發(fā)事件時,相同的三角波幅值加上 DHR1 寄存器的值,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR1,然后更新 DAC 通道 1 三角波計數(shù)器。
當(dāng)發(fā)生 DAC 通道 2 觸發(fā)事件時,相同的三角波幅值加上 DHR2 寄存器的值,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR2,然后更新 DAC 通道 2 三角波計數(shù)器。
4.5 產(chǎn)生不同三角波的獨立觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1';
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為不同值,分別配置 2 個 DAC 通道的不同觸發(fā)源;
?設(shè)置 2 個 DAC 通道的 WAVEx[1:0]位為'1x',并設(shè) MAMPx[3:0]為不同的三角波幅值。
?將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。
當(dāng)發(fā)生 DAC 通道 1 觸發(fā)事件時,MAMP1[3:0]所設(shè)的三角波幅值加上 DHR1 寄存器數(shù)值,(延遲 3 個APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR1,然后更新 DAC 通道 1 三角波計數(shù)器。
當(dāng)發(fā)生 DAC 通道 2 觸發(fā)事件時,MAMP2[3:0]所設(shè)的三角波幅值加上 DHR2 寄存器數(shù)值,(延遲 3 個APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR2,然后更新 DAC 通道 2 三角波計數(shù)器。
4.6 同時軟件啟動
按照下列過程設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。在此配置下,一個 APB1 時鐘周期后,DHR1 和 DHR2 寄存器的數(shù)值即被分別傳入 DAC_DOR1 和DAC_DOR2 寄存器。
4.7 不使用波形發(fā)生器的同時觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1';
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發(fā)源;
?將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。
當(dāng)發(fā)生觸發(fā)事件時,(延遲 3 個 APB1 時鐘周期后)DHR1 和 DHR2 寄存器的數(shù)值分別傳入 DAC_DOR1和 DAC_DOR2 寄存器。
4.8 使用相同LFSR的同時觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1';
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發(fā)源;
?設(shè)置 2 個 DAC 通道的 WAVEx[1:0]位為”01”,并設(shè) MAMPx[3:0]為相同的 LFSR 屏蔽值;
?將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD);
當(dāng)發(fā)生觸發(fā)事件時,MAMP1[3:0]所設(shè)屏蔽的 LFSR1 計數(shù)器值與 DHR1 寄存器的數(shù)值相加,(延遲 3個 APB1 時鐘周期后)結(jié)果傳入 DAC_DOR1 寄存器,然后更新 LFSR1 計數(shù)器。同樣,MAMP1[3:0]所設(shè)屏蔽的 LFSR2 計數(shù)器值與 DHR2 寄存器的數(shù)值相加,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數(shù)器。
4.9 使用不同LFSR的同時觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1';
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發(fā)源;
?設(shè)置 2 個 DAC 通道的 WAVEx[1:0]位為'01',并設(shè) MAMPx[3:0]為不同的 LFSR 屏蔽值;
?將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。
當(dāng)發(fā)生觸發(fā)事件時,具有相同屏蔽的 LFSR1 計數(shù)器值與 DHR1 寄存器數(shù)值相加,(延遲 3 個 APB1時鐘周期后)結(jié)果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數(shù)器。同時,具有相同屏蔽的 LFSR2 計數(shù)器值與 DHR2 寄存器數(shù)值相加,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數(shù)器。
4.10 使用相同三角波發(fā)生器的同時觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1':
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發(fā)源。
?設(shè)置 2 個 DAC 通道的 WAVEx[1:0]位為'1x',并設(shè) MAMPx[3:0]為相同的三角波幅值。將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。
當(dāng)發(fā)生觸發(fā)事件時,相同的三角波幅值與 DHR1 寄存器數(shù)值相加,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數(shù)器。同時,相同的三角波幅值與 DHR2 寄存器數(shù)值相加,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器DAC_DOR2,然后更新 LFSR2 計數(shù)器。
4.11 使用不同三角波發(fā)生器的同時觸發(fā)
按照下列順序設(shè)置 DAC 工作在此轉(zhuǎn)換模式:
?分別設(shè)置 2 個 DAC 通道的觸發(fā)使能位 TEN1 和 TEN2 為'1':
?通過設(shè)置 TSEL1[2:0]和 TSEL2[2:0]位為相同值,分別配置 2 個 DAC 通道使用相同觸發(fā)源。
?設(shè)置 2 個 DAC 通道的 WAVEx[1:0]位為'1x',并設(shè) MAMPx[3:0]為不同的三角波幅值。
?將雙 DAC 通道轉(zhuǎn)換數(shù)據(jù)裝入所需的 DHR 寄存器(DHR12RD、DHR12LD 或 DHR8RD)。
當(dāng)發(fā)生觸發(fā)事件時,MAMP1[3:0]所設(shè)的三角波幅值與 DHR1 寄存器數(shù)值相加,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR1,然后更新 LFSR1 計數(shù)器。同時,MAMP2[3:0]所設(shè)的三角波幅值與 DHR2 寄存器數(shù)值相加,(延遲 3 個 APB1 時鐘周期后)結(jié)果傳入寄存器 DAC_DOR2,然后更新 LFSR2 計數(shù)器。
5 例程設(shè)計
5.1 DAC_OutAudio例程
1.UART 模塊:配置 USART1,波特率為 115200,將printf輸出重定向到該串口,用于輸出系統(tǒng)時鐘信息與測試提示。
// UART初始化函數(shù) 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)為復(fù)用推挽輸出 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); // 配置串口參數(shù):115200bps,8位數(shù)據(jù),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函數(shù)到USART1 int SER_PutChar(int ch) { while (!USART_GetFlagStatus(USART_TEST, USART_FLAG_TC)); // 等待發(fā)送完成 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 輸出做準(zhǔn)備。
3.DAC 模塊:使能 DAC 時鐘,對 DAC 通道 1 和通道 2 進(jìn)行初始化,設(shè)置初始輸出值,將觸發(fā)源設(shè)為定時器 2 的觸發(fā)輸出,同時使能 DMA 請求。
4.定時器模塊:使能定時器 2 時鐘,配置其參數(shù)以產(chǎn)生 8kHz 的更新事件,將更新事件選為觸發(fā)輸出。
5.DMA 模塊:使能 DMA2 時鐘,配置通道 4 和通道 3,將Sine12bit數(shù)組的數(shù)據(jù)循環(huán)傳輸?shù)?DAC2 和 DAC1 的數(shù)據(jù)寄存器。
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數(shù)據(jù)寄存器地址 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&Sine12bit; // 數(shù)據(jù)源:正弦波數(shù)組 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; // 內(nèi)存到外設(shè) DMA_InitStructure.DMA_BufferSize = DATA_LEN; // 傳輸長度 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; // 內(nèi)存地址遞增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // 16位數(shù)據(jù) DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; // 循環(huán)模式 DMA_Init(DMA2_Channel4, &DMA_InitStructure); DMA_Cmd(DMA2_Channel4, ENABLE); // 配置DMA2通道3(DAC1,參數(shù)與通道4相同) DMA_InitStructure.DMA_PeripheralBaseAddr = DAC1_DHR12RD_ADDRESS; DMA_Init(DMA2_Channel3, &DMA_InitStructure); DMA_Cmd(DMA2_Channel3, ENABLE); }
數(shù)據(jù)轉(zhuǎn)換模塊:把 8 位數(shù)據(jù)轉(zhuǎn)換為 12 位數(shù)據(jù),存于Sine12bit數(shù)組。
6 下載驗證
6.2 DAC_OutAudio例程
初始輸出
在 DAC 配置過程中,代碼會先將 DAC 通道 1 和通道 2 的輸出設(shè)置為一個初始值(代碼中設(shè)置為 3102)。因此,在程序啟動的瞬間,DAC 的兩個通道會輸出對應(yīng)于該初始值的電壓信號。
在完成所有配置后,DMA 會將Sine12bit數(shù)組中的數(shù)據(jù)循環(huán)傳輸?shù)?DAC 的數(shù)據(jù)寄存器,同時定時器 TIM2 會以 8kHz 的頻率產(chǎn)生觸發(fā)信號,觸發(fā) DAC 進(jìn)行數(shù)模轉(zhuǎn)換。因此,DAC 的兩個通道會持續(xù)輸出軟件生成的正弦波信號。
?頻率:由于定時器 TIM2 的周期設(shè)置為 8999,預(yù)分頻器設(shè)置為 0,所以定時器的更新頻率為 8kHz,這意味著 DAC 輸出的正弦波信號的頻率也為 8kHz。
?幅度:正弦波的幅度取決于Sine12bit數(shù)組中的數(shù)據(jù),該數(shù)組中的數(shù)據(jù)是通過uint8_uint16函數(shù)將data數(shù)組中的 8 位數(shù)據(jù)轉(zhuǎn)換為 12 位數(shù)據(jù)得到的。
WIZnet 是一家無晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44992瀏覽量
650591 -
dac
+關(guān)注
關(guān)注
44文章
2411瀏覽量
193760 -
dma
+關(guān)注
關(guān)注
3文章
576瀏覽量
103275
發(fā)布評論請先 登錄
《DNK210使用指南 -CanMV版 V1.0》第十五章 按鍵中斷實驗
至芯科技之a(chǎn)ltera 系列FPGA教程 第十五篇 安裝驅(qū)動
視頻詳解:上海尤老師verilog入門到實戰(zhàn)第十五課
基于RFID和MySQL實現(xiàn)小區(qū)門禁系統(tǒng)
「正點原子Linux連載」第十五章按鍵輸入試驗
第十五屆智能車入門淺談 精選資料分享
第十五講 組合邏輯電路的分析方法和設(shè)計方法

模擬電路網(wǎng)絡(luò)課件 第十五節(jié):單級放大電路的瞬態(tài)響應(yīng)

第十五屆全國大學(xué)生機(jī)器人大賽ROBOCON比賽規(guī)則
第十五屆智能車入門淺談

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

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

評論