0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)字信號處理:實(shí)時I/O的編程注意事項(xiàng)

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:Noam Levine 和 David ? 2023-06-17 11:52 ? 次閱讀

David SkolnickNoam Levine

現(xiàn)在,我們更仔細(xì)地關(guān)注實(shí)時系統(tǒng)特有的DSP編程問題。本文重點(diǎn)介紹如何為具有各種I/O接口的DSP系統(tǒng)開發(fā)算法。

“實(shí)時”是什么意思?模擬系統(tǒng)中,每項(xiàng)任務(wù)都是通過連續(xù)的信號和處理“實(shí)時”執(zhí)行的。在數(shù)字信號處理(DSP)系統(tǒng)中,信號用一組樣本表示,即離散時間點(diǎn)的值。因此,根據(jù)采樣率,在DSP系統(tǒng)中處理給定數(shù)量的樣本的時間可以“實(shí)時”進(jìn)行任意解釋。本系列的第一篇文章介紹了采樣的概念和奈奎斯特準(zhǔn)則,即在實(shí)時應(yīng)用中,采樣頻率必須至少是(模擬)信號中感興趣的最高頻率分量(奈奎斯特速率)頻率的兩倍。樣本之間的時間稱為采樣間隔。要將系統(tǒng)視為“實(shí)時”運(yùn)行,必須在新數(shù)據(jù)到達(dá)之前完成對給定數(shù)據(jù)集(一個或多個樣本,取決于算法)的所有處理。

實(shí)時的這種定義意味著,對于以給定時鐘速率運(yùn)行的處理器,輸入數(shù)據(jù)的速度和數(shù)量決定了可以在不落后于數(shù)據(jù)流的情況下對數(shù)據(jù)進(jìn)行多少處理。對于模擬設(shè)計(jì)人員來說,處理數(shù)據(jù)的時間有限的想法可能看起來很奇怪,因?yàn)檫@個概念在模擬系統(tǒng)中沒有并行。在模擬系統(tǒng)中,信號被連續(xù)處理。慢速系統(tǒng)中唯一的懲罰是有限的頻率響應(yīng)。相比之下,數(shù)字系統(tǒng)處理部分信號,足以進(jìn)行非常精確的近似,但只能在有限的時間內(nèi)。圖 1 顯示了一個比較。實(shí)時DSP可以受到在算法時間預(yù)算內(nèi)可以完成的數(shù)據(jù)量或處理類型的限制。例如,處理以 48 kHz(音頻信號)采樣的數(shù)據(jù)值的給定 DSP 處理器處理這些數(shù)據(jù)值的時間比一個采樣 8 kHz 語音頻段數(shù)據(jù)的時間更少。

在本系列前面描述的濾波器示例中,輸入采樣率為8 kHz。為了使示例中的DSP跟上實(shí)時數(shù)據(jù),所有處理都必須在1/(8 kHz)或125 μs的時間預(yù)算內(nèi)完成。在 33MHz 數(shù)字信號處理器(每周期 30ens)上,時間預(yù)算提供 125 μs/30 ns 或 4166 個指令周期,以完成處理和任何其他必需的任務(wù)。

由于執(zhí)行任何給定算法可以預(yù)算的時間有限,因此管理時間是DSP系統(tǒng)軟件設(shè)計(jì)的核心部分。時間管理策略確定處理器如何獲得有關(guān)事件的通知、影響數(shù)據(jù)處理以及塑造處理器通信。

wKgZomSNLq2AeRz_AABY9OLb3Vo927.png

圖1.模擬和數(shù)字信號處理的比較。a. 模擬:響應(yīng)值對應(yīng)于所有時刻的每個數(shù)據(jù)值。b. 數(shù)字:對于每個樣品,必須傳輸和處理數(shù)據(jù),事件標(biāo)志著處理(控制)的結(jié)束,并且在指定過程發(fā)生后,周期內(nèi)的其他任務(wù)可能需要額外的時間。

事件通知: 中斷:人們可以對DSP進(jìn)行編程,以使用處理“事件”(數(shù)據(jù)到達(dá))的幾種策略之一來處理數(shù)據(jù)??梢远ㄆ谧x取狀態(tài)位或標(biāo)志引腳,以確定新數(shù)據(jù)是否可用。但是,“輪詢”會浪費(fèi)處理器周期。數(shù)據(jù)可能會在上次民意調(diào)查后到達(dá),但直到下一次民意調(diào)查才能知道它的存在。這使得開發(fā)實(shí)時系統(tǒng)變得困難。

第二種策略是讓數(shù)據(jù)在到達(dá)時中斷處理器。使用中斷通知處理器是有效的,盡管編程不那么容易;在等待中斷期間可能會浪費(fèi)時鐘周期。然而,事件驅(qū)動的中斷編程非常適合快速處理真實(shí)世界的信號,大多數(shù)DSP都旨在有效地處理它們。事實(shí)上,它們旨在非常快速地響應(yīng)中斷。ADSP-2181對中斷的響應(yīng)時間約為三個處理器周期;即,在75 ns內(nèi),DSP已停止執(zhí)行其正在執(zhí)行的操作,并正在處理中斷事件(矢量)。

在許多基于DSP的系統(tǒng)中,基于輸入數(shù)據(jù)采樣速率的中斷速率通常與DSP的時鐘速率完全無關(guān)。在本系列前面的 FIR 示例中,處理器以 125 μs 的間隔中斷以接收新數(shù)據(jù)。

中斷處理和中斷向量:由于中斷處理是DSP系統(tǒng)中至關(guān)重要的元素,因此處理器通常具有內(nèi)置的硬件機(jī)制來有效地處理中斷。硬連線機(jī)制比單獨(dú)的軟件更有效,因?yàn)?DSP 的中斷服務(wù)例程 (ISR) 可能必須滿足以下所有需求:

快速上下文切換 – 從一個任務(wù)及其數(shù)據(jù)(上下文)切換到另一個上下文,而不會因編寫程序以保存寄存器內(nèi)容和芯片狀態(tài)信息而浪費(fèi)時間和復(fù)雜性。

嵌套中斷處理 – “同時”處理不同優(yōu)先級的多個中斷。DSP 一次處理一個中斷,但優(yōu)先級較高的中斷可能優(yōu)先于優(yōu)先級較低的中斷的處理。

繼續(xù)接受數(shù)據(jù)/記錄狀態(tài) - 當(dāng) DSP 服務(wù)中斷時,現(xiàn)實(shí)世界中不斷發(fā)生事件,數(shù)據(jù)不斷到達(dá)。為了跟上“現(xiàn)實(shí)世界”的步伐,DSP必須記錄這些事件并接受數(shù)據(jù),然后在完成中斷服務(wù)后處理它們。

ADI公司的DSP上,使用兩組數(shù)據(jù)寄存器實(shí)現(xiàn)快速上下文切換。一次只有一個集處于活動狀態(tài),其中包含該上下文期間處理的所有數(shù)據(jù)。處理中斷時,計(jì)算機(jī)可以從活動集切換到備用集,而無需將數(shù)據(jù)臨時保存在內(nèi)存中。這有助于在任務(wù)之間快速切換。

為了處理多個中斷,ADI公司的DSP記錄每個中斷的狀態(tài)。處理器狀態(tài)信息保存在位于 DSP 程序序列器中的一組狀態(tài)“堆棧”上?!岸褩!庇梢唤M硬件寄存器組成。事件發(fā)生時,當(dāng)前狀態(tài)信息被“推送”到堆棧上。這種堆棧機(jī)制還允許嵌套中斷;優(yōu)先級較高的一個可以中斷優(yōu)先級較低的一個。

中斷鎖存器和自動I/O兩種硬件特性使ADI公司的DSP在處理中斷時能夠及時了解“現(xiàn)實(shí)世界”。鎖存器可防止 DSP 在處理中斷時錯過重要事件。另一個功能包括各種形式的自動I/O(包括串行端口、DMA、自動緩沖等),允許外部設(shè)備將數(shù)據(jù)泵入DSP的存儲器,而無需DSP的干預(yù)。因此,當(dāng)DSP“繁忙”時,不會丟失任何數(shù)據(jù)。

當(dāng)外部源或內(nèi)部資源生成中斷請求時,DSP 處理器會自動存儲其當(dāng)前操作狀態(tài),并準(zhǔn)備執(zhí)行中斷例程。中斷例程是從中斷向量表調(diào)度的。中斷向量表是程序存儲器中的一個區(qū)域,其中的指令地址分配給特定的DSP中斷功能。例如,在下表中,ADSP-1處理器串行端口1(SPORT2181)上的發(fā)送(Tx)中斷將導(dǎo)致下一條指令在程序存儲器(PM)位置0x0020執(zhí)行,然后通過0x0023(中斷例程)執(zhí)行接下來三個位置的內(nèi)容。如表中的12項(xiàng)所示,ADSP-2181可以處理來自11個位置(外部硬件、DMA端口和串行端口)和處理器復(fù)位的中斷。該表列出了分配給存儲器位置中每個中斷向量源的編程指令,0x0000 FIR濾波器程序0x002F。

Jump start; nop; nop; nop; /* PM(0x0000-03): Reset vector */
rti; nop; nop; nop; /* PM(0x0004-07): IRQ2 vector */
rti; nop; nop; nop; /* PM(0x0008-0B): IRQL1 vector */
rti; nop; nop; nop; /* PM(0x000C-0F): IRQL0 vector */
ar = dm(stat_flag); ar = pass ar; if eq_rti; jump next_cmd;
/* PM(0x0010-13): SPORT0 Tx vector */
jump input_samples; nop; nop; nop;
/* PM(0x0014-17): SPORT0 Rx vector */
jump irqe; nop; nop; nop; /* PM(0x0018-1B): IRQE vector */
rti; nop; nop; nop; /* PM(0x001C-1F): BDMA vector */
rti; nop; nop; nop; /* PM(0x0020-23): SPORT1 Tx vector */
rti; nop; nop; nop; /* PM(0x0024-27): SPORT1 Rx vector */
rti; nop; nop; nop; /* PM(0x0028-2B): Timer vector */
rti; nop; nop; nop; /* PM(0x002C-2F): Powerdown vector */

每個中斷向量有四個指令位置。通常,這些指令將導(dǎo)致處理器跳轉(zhuǎn)到另一個內(nèi)存區(qū)域以處理數(shù)據(jù),如重置(0x0000時)、SPORT0 Rx (0x0014) 和 IRQE (0x0018) 中斷向量所示。如果只有幾個步驟(例如讀取值、檢查狀態(tài)或加載內(nèi)存)可以在四個可用指令位置內(nèi)完成,則直接對其進(jìn)行編程,如 SPORT0 Tx 矢量 (0x0010-13) 所示。任何未使用的中斷向量都要求從中斷返回 (rti),并帶有三個 nop(無操作)指令。

nop 指令用作占位符 – 指令空間,用于確保正確的中斷操作與硬件指定的中斷向量對齊。每個未使用的矢量位置開頭的 rti 指令既是占位符又是安全閥。如果未使用的中斷被錯誤地取消屏蔽或無意中觸發(fā),“rti”會導(dǎo)致恢復(fù)正常執(zhí)行。

數(shù)據(jù) I/O

在DSP系統(tǒng)中,中斷通常是由數(shù)據(jù)的到達(dá)或提供新輸出數(shù)據(jù)的要求產(chǎn)生的。每個樣本都可能發(fā)生中斷,也可能在收集一幀數(shù)據(jù)后發(fā)生中斷。這些差異極大地影響了DSP算法處理數(shù)據(jù)的方式。

對于逐個樣本運(yùn)行的算法,可能需要DSP軟件來處理每個傳入和傳出的數(shù)據(jù)值。每個 DSP 串行端口包含兩個數(shù)據(jù) I/O 寄存器,一個接收寄存器 (Rx) 和一個發(fā)送寄存器 (Tx)。收到串行字時,端口通常會生成接收中斷。處理器停止它正在執(zhí)行的操作,開始在中斷向量位置執(zhí)行代碼,將來自 Rx 寄存器的傳入值讀取到處理器數(shù)據(jù)寄存器中,然后對該數(shù)據(jù)值進(jìn)行操作或返回到其后臺任務(wù)。在上表中,計(jì)算機(jī)跳轉(zhuǎn)到程序段“input_samples”,執(zhí)行在該段中編程的任何指令,并直接從中斷或通過返回中斷向量返回。

為了傳輸數(shù)據(jù),串行端口可以產(chǎn)生傳輸中斷,表示可以將新數(shù)據(jù)寫入SPORT Tx寄存器。然后,DSP 可以在 SPORT Tx 中斷向量處開始執(zhí)行代碼,并且通常將值從數(shù)據(jù)寄存器傳輸?shù)?SPORT Tx 寄存器。如果數(shù)據(jù)輸入和輸出由同一采樣時鐘控制,則只需要一個中斷。例如,如果程序段由接收中斷計(jì)時啟動,則會在中斷例程期間讀取新數(shù)據(jù);然后,要么傳輸先前計(jì)算的結(jié)果(保存在寄存器中),要么計(jì)算新結(jié)果并立即傳輸 - 作為中斷例程的最后一步。

所有這些機(jī)制都有助于DSP能夠模擬模擬系統(tǒng)的自然功能——實(shí)時連續(xù)處理數(shù)據(jù)——但具有數(shù)字精度和靈活性。此外,在高效編程的數(shù)字系統(tǒng)中,處理數(shù)據(jù)集之間剩余的備用處理器周期可用于處理其他任務(wù)。

編程注意事項(xiàng)

在“實(shí)時”系統(tǒng)中,處理速度至關(guān)重要。通過使用 SPORT 自動緩沖,數(shù)據(jù) I/O 不會浪費(fèi)任何時間。相反,數(shù)據(jù)管理目標(biāo)是確保所選地址指向新數(shù)據(jù)。

在FIR濾波器示例中(模擬對話31-3,第15頁),當(dāng)輸入自動緩沖器已滿時,會生成SPORT接收中斷請求,這意味著DSP已收到三個數(shù)據(jù)字:狀態(tài)、左通道數(shù)據(jù)和右通道數(shù)據(jù)。由于此簡化應(yīng)用程序使用單通道數(shù)據(jù),因此算法僅使用駐留在位置 rx_buf+1 的數(shù)據(jù)值。

過濾器算法擴(kuò)展在其他應(yīng)用程序中,數(shù)據(jù)處理可能更加復(fù)雜。例如,如果將示例的FIR濾波器擴(kuò)展到雙通道實(shí)現(xiàn),則無需更改核心DSP算法代碼。但是,必須修改與數(shù)據(jù)處理相關(guān)的代碼,以考慮第二個數(shù)據(jù)流和第二組系數(shù)。

在篩選器代碼中,內(nèi)存中需要兩個新緩沖區(qū)來處理額外的數(shù)據(jù)流和額外的系數(shù)集。核心濾波器環(huán)路可以作為單獨(dú)的“可調(diào)用”函數(shù)進(jìn)行隔離。無論輸入數(shù)據(jù)值如何,此技術(shù)都允許使用相同的代碼。這種編程風(fēng)格的優(yōu)點(diǎn)包括可讀代碼、可重用算法和減小代碼大小。如果不采用模塊化方法,則必須使用額外的DSP存儲器空間重復(fù)濾波器環(huán)路。

然后,SPORT 接收中斷例程將包括指針設(shè)置和調(diào)用過濾器。修訂后的篩選器例程顯示在以下清單中:

Filter: cntr = taps - 1;
mr = 0, mx0 = dm(i2,m1), my0 = pm(i5,m5);
/* clear accumulator, get first data
and coefficient value */
do filt_loop until ce; /* set-up zero-overhead loop */
filt_loop: mr = mr + mx0*my0(ss), mx0 = dm(i2,m1),
my0 = pm(i5,m5); /* MAC and two data fetches */
mr = mr + mx0 * my0 (rnd); /* final multiply, round to 16-bit
result */
if mv sat mr; / * check for overflow*/
rts; /* return */

需要注意的是,對核心過濾器循環(huán)的唯一修改是在例程的開頭添加了一個標(biāo)簽“Filter:”,并在最后添加了“rts”(從子例程返回)指令。這些新增功能將篩選器代碼從獨(dú)立例程更改為可從其他例程調(diào)用的子例程。它不再是一個單一用途的例程,而是一個可重用、可調(diào)用的子例程。

通過將核心過濾器設(shè)置為可調(diào)用的子例程,現(xiàn)在可以滿足雙通道數(shù)據(jù)處理要求。為了簡化一些編程問題,此示例假定左通道和右通道使用相同的濾波器系數(shù)。

在本系列的第三部分中,顯示了整個篩選器應(yīng)用程序程序集代碼。在代碼清單的頂部,聲明了所有必需的內(nèi)存緩沖區(qū)。若要擴(kuò)展篩選器應(yīng)用程序以處理兩個數(shù)據(jù)通道,需要聲明所需的新變量和緩沖區(qū)。對于傳入的數(shù)據(jù),緩沖區(qū)聲明,

.var/dm/circ_filt_data[taps];/* 輸入數(shù)據(jù)緩沖區(qū) */

需要替換為兩個緩沖區(qū),聲明為

.var/dm/circ_filt1_data[taps];/* 左通道輸入數(shù)據(jù)緩沖區(qū) */ .var/dm/
circ_filt2_data[taps];/* 右通道輸入數(shù)據(jù)緩沖器 */

由于兩個通道將應(yīng)用相同的濾波器系數(shù),因此數(shù)據(jù)緩沖區(qū)的長度相等。

過濾器循環(huán)子例程期望使用特定的地址寄存器訪問某些數(shù)據(jù)和系數(shù)值。具體而言,地址寄存器 I2 必須指向最早的數(shù)據(jù)樣本,I5 必須指向調(diào)用篩選器例程之前的正確系數(shù)值。

由于左通道和右通道的過濾器將共享相同的內(nèi)存指針,因此必須有一種機(jī)制來區(qū)分兩個數(shù)據(jù)流。對于數(shù)據(jù)指針,I2,需要定義兩個新變量,“filter1_ptr”和“filter2_ptr”。

內(nèi)存中的這些位置將用于存儲適用于每個數(shù)據(jù)流的地址值。ADSP-2181的循環(huán)緩沖功能用于確保每當(dāng)執(zhí)行濾波器時,數(shù)據(jù)指針始終位于緩沖器中的正確位置。由于子例程現(xiàn)在處理兩個緩沖區(qū),因此在完成每個通道的處理時需要保存指針位置。

要設(shè)置指針,需要在數(shù)據(jù)存儲器中聲明兩個變量,如下所示:

.var/dm filter1_ptr;/* 左通道數(shù)據(jù)的數(shù)據(jù)指針 */ .var/
dm filter2_ptr;/* 右通道數(shù)據(jù)的數(shù)據(jù)指針 */

然后需要用每個數(shù)據(jù)緩沖區(qū)的起始地址初始化這些變量;

.init filter1_ptr: ^filt1_data;/* 初始化起點(diǎn),
左通道 */
.init filter2_ptr: ^filt2_data;/* 初始化起點(diǎn),
右通道 */

DSP 匯編軟件將符號“^”識別為表示“地址”。DSP 鏈接器軟件填寫相應(yīng)的地址值。這樣,可執(zhí)行程序中的指針變量就使用相應(yīng)內(nèi)存緩沖區(qū)的起始地址進(jìn)行初始化。

以下清單顯示了 FIR 過濾器中斷例程如何使用這些新的內(nèi)存元素。第 3 部分中的原始 Filter 子例程已修改為提供兩個單獨(dú)的篩選通道。例程必須首先加載相應(yīng)的數(shù)據(jù)指針,而不是直接啟動到篩選器計(jì)算中。然后調(diào)用篩選器例程,并將生成的輸出放置在正確的位置進(jìn)行傳輸。

/*--------------------FIR Filter--------------------*/
input_samples:
ena sec_reg; /* use shadow register bank */

/* set up for filter 1 */
i2 = dm(filter1_ptr); /* set data pointer for filter 1 */
ax0 = dm(rx_buf + 1); /* read left channel data */
dm(i2,m1) = ax0; /* write new data into delay line,
pointer now pointing to oldest data */

call filter; /* perform the first filter for left
channel data */

dm(tx_buf+1) = mr1; /* write left-channel output data */
dm(filter1_ptr) = i2; /* save updated filter1 data pointer */

/* set up for filter 2 */
i2 = dm(filter2_ptr); /* set data pointer for filter 2 */
ax0 = dm(rx_buf + 2); /* read right channel data */
dm(i2,m1) = ax0; /* write new data into delay line,
pointer now pointing to oldest data */

call filter; /* perform the filter again for the
right channel data */

dm(tx_buf+2) = mr1; /* write right channel output data */
dm(filter2_ptr) = i2; /* save updated filter2 data pointer */

rti; /* return from interrupt */

由于核心過濾器算法不再處理數(shù)據(jù) I/O,因此只需添加更多指針變量并聲明更多緩沖區(qū)空間(只要存在足夠的內(nèi)存!同樣,通過設(shè)置包含系數(shù)緩沖區(qū)指針信息的變量,可以對兩個篩選器使用不同的系數(shù)。無論哪種情況,都不需要更改過濾器算法。通過使用這種模塊化編程風(fēng)格,用戶可以構(gòu)建一個可調(diào)用的DSP函數(shù)庫。因此,特定系統(tǒng)的差異可以簡化為數(shù)據(jù)處理問題,而不是新算法的開發(fā)。雖然這種編程風(fēng)格不一定允許算法更快地執(zhí)行其任務(wù),但系統(tǒng)設(shè)計(jì)人員在確定數(shù)據(jù)如何流經(jīng)系統(tǒng)方面具有更大的靈活性。

實(shí)時接口問題:到目前為止,我們已經(jīng)研究了嵌入式系統(tǒng)中的實(shí)時編程如何依賴于快速中斷響應(yīng)、高效的數(shù)據(jù)處理和快速的程序執(zhí)行。此外,進(jìn)出處理器的數(shù)據(jù)流也會影響系統(tǒng)在實(shí)時嵌入式環(huán)境中的工作情況。

流入和流出數(shù)字信號處理器的主數(shù)據(jù)可以是并行的,也可以是串行的。并行傳輸通常至少與處理器架構(gòu)的本機(jī)數(shù)據(jù)字一樣寬(ADSP-16系列處理器為2100位,SHARC為32位)。并行傳輸通過處理器的外部內(nèi)存總線或外部主機(jī)接口總線進(jìn)行。串行數(shù)據(jù)傳輸需要的互連要少得多;它們經(jīng)常用于與數(shù)據(jù)轉(zhuǎn)換器通信。?

串行接口:硬件接口的便利性是高效實(shí)現(xiàn)DSP系統(tǒng)的重要因素。ADSP-2181 EZ-Kit Lite系統(tǒng)使用AD1847串行編解碼器(COder/DECoder)。串行編解碼器允許通過 DSP 上的串行端口 (SPORT) 進(jìn)行數(shù)據(jù)傳輸。此串口不是RS-232 PC式異步串口;它是一個 5 線同步接口,可傳遞位時鐘、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)和幀同步信號。串行接口的主要優(yōu)點(diǎn)是引腳數(shù)少,易于硬件連接。AD1847僅需4個信號即可與DSP接口:串行時鐘、接收數(shù)據(jù)、發(fā)送數(shù)據(jù)和接收幀同步信號。串行數(shù)據(jù)流是時分復(fù)用(TDM),這意味著同一物理線路可以按串行順序傳輸多種類型的信息。在上一期啟動的EZ-Kit Lite上的AD1847應(yīng)用中,串行線路同時包含左聲道和右聲道音頻信息,以及編解碼器控制和狀態(tài)信息。

如前所述,處理器具有處理此數(shù)據(jù)的各種方法。SPORT 中斷由串行端口硬件自動生成,用于接收或傳輸數(shù)據(jù)以及單個字或字塊(圖 2)。數(shù)字信號處理器和I/O設(shè)備之間的串行接口

wKgaomSNLsKAVpp8AAAvRrzMjjs829.png

圖2.數(shù)字信號處理器和 I/O 設(shè)備之間的串行接口。

并行接口:即使串行位時鐘的運(yùn)行速度與DSP處理器一樣快,串行接口也會犧牲數(shù)據(jù)傳輸速度以簡化布線,以DSP處理器速度的一小部分傳輸數(shù)據(jù)字。對于需要更高數(shù)據(jù)速率的系統(tǒng)性能,可以使用并行接口。并行接口時,DSP使用其外部數(shù)據(jù)和地址總線,以讀取或?qū)懭胪庠O(shè)的數(shù)據(jù)。在ADSP-2181上,總線最多可連接16位數(shù)據(jù)。

并行數(shù)據(jù)傳輸始終比串行傳輸更快。DSP可以在每個處理器周期執(zhí)行外部訪問,但這需要能夠跟上它的非??焖俚牟⑿型庠O(shè),例如快速SRAM芯片。與其他實(shí)體的并行數(shù)據(jù)傳輸通常在每個處理器周期不到一個的情況下發(fā)生。

串行接口和并行接口的中斷處理是不同的。由于DSP處理器的外部數(shù)據(jù)總線是處理各種數(shù)據(jù)的通用實(shí)體,因此它沒有用于中斷生成和控制的專用信號線;但是,其他 DSP 資源也可用。在ADSP-2181上,多個外部硬件中斷線(例如用于I/O存儲器選擇的中斷線)可用于由外部器件(如A/D轉(zhuǎn)換器或編解碼器)觸發(fā)。這種接口如圖3所示,涉及一個并行器件和ADSP-2181 DSP。用于 DSP 的并行 I/O 接口

wKgZomSNLgSAVm5kAAATdgz-ssM815.gif

圖3.用于 DSP 的并行 I/O 接口。

當(dāng)響應(yīng)并行數(shù)據(jù)的中斷時,處理器讀取適當(dāng)?shù)脑?,并通常通過執(zhí)行類似于此處所示的指令將該數(shù)據(jù)值放在內(nèi)存中:

irq2_svc: ax0 = IO(ad_converter);dm(i2,m1) = ax0;RTI;
“ad_converter”是 I/O 空間中先前定義的地址。

本文旨在詳細(xì)介紹DSP開發(fā)人員在處理實(shí)時系統(tǒng)中的I/O和其他事件時面臨的編程問題。引入的問題包括實(shí)時數(shù)據(jù)(樣本和幀)、中斷和中斷處理、自動 I/O 以及通用化例程以創(chuàng)建可調(diào)用的子例程。這篇簡短的文章無法公正地描述與每個主題相關(guān)的許多細(xì)節(jié)層次。更多信息可在以下參考資料中找到。本系列中的后續(xù)主題將繼續(xù)基于此應(yīng)用程序進(jìn)行構(gòu)建。下一篇文章將為我們不斷增長的示例程序添加更多功能,并描述軟件驗(yàn)證(即調(diào)試)技術(shù)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19404

    瀏覽量

    230914
  • dsp
    dsp
    +關(guān)注

    關(guān)注

    554

    文章

    8059

    瀏覽量

    350009
  • 濾波器
    +關(guān)注

    關(guān)注

    161

    文章

    7859

    瀏覽量

    178763
收藏 人收藏

    評論

    相關(guān)推薦

    AVR單片機(jī)設(shè)計(jì)I/O口使用注意事項(xiàng)

    重點(diǎn)記錄了AVR單片機(jī)設(shè)計(jì)I/O口使用注意事項(xiàng)。
    發(fā)表于 01-21 15:33 ?1653次閱讀

    AVR ISP編程注意事項(xiàng)

    AVR ISP編程注意事項(xiàng)
    發(fā)表于 04-06 11:47

    測試系統(tǒng)開發(fā)指南:計(jì)算機(jī)I/O注意事項(xiàng)

    測試系統(tǒng)開發(fā)指南:計(jì)算機(jī)I/O注意事項(xiàng)
    發(fā)表于 08-06 14:26

    AT89S51單片機(jī)的I/O端口的特點(diǎn)及使用注意事項(xiàng)有哪些

    AT89S51單片機(jī)的I/O端口的特點(diǎn)及使用注意事項(xiàng)有哪些?AT89S51單片機(jī)的中斷系統(tǒng)的中斷源是什么?AT89S51單片機(jī)中斷系統(tǒng)的結(jié)構(gòu)是如何構(gòu)成的?AT89S51單片機(jī)中斷系統(tǒng)的中斷設(shè)置過程是怎樣的?
    發(fā)表于 08-04 07:09

    設(shè)計(jì)AVR單片機(jī)通用I/O口有哪些注意事項(xiàng)

    集電極開路輸出的結(jié)構(gòu)是由哪些部分組成的?AVR單片機(jī)IO口的結(jié)構(gòu)是由哪些部分組成的?設(shè)計(jì)AVR單片機(jī)通用I/O口有哪些注意事項(xiàng)呢?
    發(fā)表于 11-02 07:16

    UART編程套路及注意事項(xiàng)是什么?

    常見串口有哪些?串口通信有哪些分類?UART編程套路及注意事項(xiàng)是什么?
    發(fā)表于 12-06 06:37

    數(shù)字信號處理器(DSP)

    數(shù)字信號處理器(DSP) 數(shù)字信號處理器(digital signal processor, 簡寫 DSP)是一種專用于(通常為實(shí)時的)
    發(fā)表于 01-04 10:54 ?3509次閱讀

    基于雙數(shù)字信號處理器(DSP)的實(shí)時相關(guān)圖像處理系統(tǒng)的設(shè)計(jì)

    摘 要:以兩片由TI公司生產(chǎn)的數(shù)字信號處理器TMS320C6203B為核心,用可編程邏輯陣列CPLD進(jìn)行邏輯控制,采用現(xiàn)場可編程門陣列FPGA作圖像的預(yù)
    發(fā)表于 02-24 22:51 ?60次下載

    基于FPGA數(shù)字信號處理

    基于FPGA數(shù)字信號處理,本文主要探討了基于FPGA數(shù)字信號處理的實(shí)現(xiàn)
    發(fā)表于 10-30 10:39 ?34次下載

    TN:選擇數(shù)字信號處理器ADSP-21161與TMS360C6711/12的注意事項(xiàng)

    TN:選擇數(shù)字信號處理器ADSP-21161與TMS360C6711/12的注意事項(xiàng)
    發(fā)表于 04-26 19:27 ?7次下載
    TN:選擇<b class='flag-5'>數(shù)字信號</b><b class='flag-5'>處理</b>器ADSP-21161與TMS360C6711/12的<b class='flag-5'>注意事項(xiàng)</b>

    編程USB轉(zhuǎn) UART/I2C Wire常見問題及注意事項(xiàng)

    編程USB轉(zhuǎn) UART/I2C /SMBusS/SPI/CAN/1 -Wire適配器USB2S 常見問題及注意事項(xiàng)
    的頭像 發(fā)表于 08-23 14:38 ?1498次閱讀

    超聲系統(tǒng)的信號鏈設(shè)計(jì)注意事項(xiàng)

    超聲系統(tǒng)的信號鏈設(shè)計(jì)注意事項(xiàng)
    發(fā)表于 10-31 08:24 ?0次下載
    超聲系統(tǒng)的<b class='flag-5'>信號</b>鏈設(shè)計(jì)<b class='flag-5'>注意事項(xiàng)</b>

    數(shù)字信號處理器概論

    作為數(shù)字信號處理的一個實(shí)際任務(wù)就是要求能夠快速、高效、實(shí)時完成處理任務(wù),這就要通過通用或?qū)S玫?b class='flag-5'>數(shù)字信號
    的頭像 發(fā)表于 08-07 16:58 ?4514次閱讀

    數(shù)字編程變頻電源使用有哪些注意事項(xiàng)?

    數(shù)字編程變頻電源使用有哪些注意事項(xiàng)? 數(shù)字編程變頻電源是一種能夠根據(jù)用戶需求調(diào)整輸出電壓和頻率的電源設(shè)備。它在工業(yè)生產(chǎn)和實(shí)驗(yàn)室研究等領(lǐng)域
    的頭像 發(fā)表于 11-13 16:09 ?782次閱讀

    STM32ADC中斷的使用注意事項(xiàng)和優(yōu)化建議

    STM32ADC中斷的使用注意事項(xiàng)和優(yōu)化建議 STM32ADC(模擬數(shù)字轉(zhuǎn)換器)是STMicroelectronics開發(fā)的一款用于外部模擬信號轉(zhuǎn)換為數(shù)字信號的器件。在使用STM32A
    的頭像 發(fā)表于 01-12 15:17 ?3629次閱讀