循環定址

循環定址

循環定址是DSP三種數據定址方式中的暫存器定址的一種(另一種為線性定址)。其一般使用通用暫存器A4~A7和B4~B7,在卷積、濾波運算中經常用到。

循環定址在卷積、相關、FIR濾波算法中,要求在存儲器中設定一個緩衝區作為滑動窗,保存最新一批數據。循環定址過程中,不斷有新的數據覆蓋舊的數據,從而實現循環緩衝區定址。

循環定址通過設定狀態暫存器ST2_55中相應的狀態位(ARnLC或CDPLC)獨立地將每個輔助暫存器(AR0-AR7)和係數數據指針(CDP)配置成線性定址或循環定址方式.當ARnLC或CDPLC=0時,線性定址,當ARnLC或CDPLC=1時,循環定址.循環緩衝的位元組數由(BK03,BK47或BKC)定義,這些暫存器與輔助暫存器和係數數據指針之間存在著對應關係.建立一個循環定址方式的步驟為:(1)對使用的指針,將狀態暫存器ST2_55中相應的狀態位設定成循環模式.(2)用AMOV指令初始化擴展暫存器(XARy 或 XCDP).例如,若將AR3作為循環指針,則對擴展輔助暫存器2進行初始化.根據DSP原理在移動通信中的套用P31。

簡介

循環定址通常是指定一個輔助暫存器ARx指向循環緩衝區;

循環緩衝區的有效基地址(EFB)就是用戶指定的輔助暫存器(ARx)的低N位置0後所得到的值;

循環緩衝區的尾基地址(EOB)是通過用BK的低N代替ARx的低N位得到;

循環緩衝區的偏移量(index)就是ARx的低N位;

循環定址的步長(step)就是加到輔助暫存器ARx或從輔助暫存器ARx中減去的值。

循環定址的算法:

If 0 £偏移量+步長<BK;

偏移量=偏移量+步長;

Elseif 偏移量+步長3BK;

偏移量=偏移量+步長-BK;

Elseif 偏移量+步長<0;

偏移量=偏移量+步長+BK;

若BK=0,則為不作修正的輔助暫存器間接定址。

若BK=0,則為不作修正的輔助暫存器間接定址。

循環定址操作過程

①首先要指定一個ARx指向循環緩衝區,根據ARx的低N位作為循環緩衝區的偏移量進行規定的定址操作。

②定址完成後,再根據循環定址算法修正偏移量,並返回ARx的低N位。

暫存器位定址;直接定址和間接定址都可以用於暫存器位定址,而絕對定址方式不支持暫存器位定址.只有暫存器位的"測試/置位/清零/取反"指令支持該定址方式.

I/O空間定址:絕對定址,直接定址和間接定址都可以用於I/O空間外設暫存器的存取.1,I/O空間的絕對定址:該模式將16位無符號常數指定為1個I/O地址,訪問I/O空間的任何一個單元.在代數指令中,使用*port(#k16)運算元,在助記符指令中,使用port(#k16),運算元前不加*2,PDP直接定址

算法

if 0 ≤ index+step <BK: index = index+step;

else if

index+step ≥ BK: index = index+step- BK;

else

if index+step <0: index = index+step+ BK;

其中,index是ARx的低N位(緩衝區偏移地址)

編程舉例

256點16階FIR濾波器:

.sect “fir-prog”

STM #255, BRC Block Repeat Counter

Repeat 256 times RPTBD fir_filter_loop

STM #16, BK ;

FIR circular buffer size LD *AR7+, A ;

load the input value STL A, *AR4+% ;

replace oldest sample with ;

newest sample RPTZ A, #16

MAC *AR4+0%, *AR3+0%, A ;

filtering

STH A, *AR5+ ;

replace the oldest buffer value fir_filter_loop

相關詞條

熱門詞條

聯絡我們