OVM
PM
Repeat
Example
; Calculate FIR filter using 16-bit multiply:
; int16 X[N]
; int16 C[N]
; sum = X[N−1] * C[0];
; for(i=1; i < N; i++)
;
{
;
sum = sum + (X[N−1−i] * C[i]) >> 5;
;
X[N−i] = X[N−1−i];
;
}
; X[1] = X[0];
MOVL
SPM
ZAPA
XMAC
RPT
||XMACD
MOV
ADDL
MOVL
If overflow mode bit is set, the ACC value will saturate maximum positive
(0x7FFFFFFF) or maximum negative (0x80000000) if the operation
overflowed.
The value in the PM bits sets the shift mode for the output operation from the
product register. If the product shift value is positive (logical left shift
operation), then the low bits are zero filled. If the product shift value is
negative (arithmetic right shift operation), the upper bits are sign extended.
This instruction is repeatable. If the operation follows a RPT instruction,
then it will be executed N+1 times. The state of the Z, N, C and OVC flags
will reflect the final result. The V flag will be set if an intermediate overflow
occurs. When repeated, the program-memory address is incremented by
1 during each repetition.
; Data information
; Coefficient information, located in high 64K
XAR2,#X+N
−5
P,*−−XAR2,*(C)
#N−2
P,*−−XAR2,*(C+1) ; ACC = ACC + P >> 5,
*+XAR2[2],T
ACC,P << PM
@sum,ACC
; XAR2 = point to end of X array
; Set product shift to ">> 5"
; Zero ACC, P, OVC
; ACC = 0, P = X[N−1] * C[0]
; Repeat next instruction N−1 times
; P = X[N−1−i] * C[i],
; i++
; X[1] = X[0]
; Perform final accumulate
; Store final result into sum
XMACD P,loc16,*(pma)
6-381
Need help?
Do you have a question about the TMS320C28x and is the answer not in the manual?