複製鏈接
請複製以下鏈接發送給好友

循環尋址

鎖定
循環尋址是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。
中文名
循環尋址
外文名
ST2_55
模式.
ARnLC
原    理
狀態寄存器

目錄

循環尋址簡介

循環尋址通常是指定一個輔助寄存器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