📄 data_cache.asm
字号:
***************************************
****File name: data_cache.asm
***************************************
.include "F2407REGS.H"
.def DATA_CACHE,TEST
DATA_CACHE:
NOP
MAR *,AR2
BANZ DATA_S,*-,AR1
NOP
LAR AR2,#255
SBRK #255
SBRK #1
DATA_S:
SACL *+
RET
******************************************
**ia,ib
******************************************
.def IA,IB
.ref SINTAB_360
.ref N,D_THETA
I_H .usect "theta",1
I_L .usect "theta",1
IA .usect "theta",1
IB .usect "theta",1
INXT_ENTRY .usect "theta",1
TEST:
NOP
**************************************
**** THETA=N*D_THETA
**************************************
LDP #N
;SPM 1
LT D_THETA
MPY N ;Q13*Q0
PAC ;Q14
SACH I_H,2 ;Table pointer
AND #3FFFH ;Force THETA_L to a positive number
SACL I_L,1 ;Q15
******************************************
****Calculate the sin_theta
******************************************
LACC I_H
AND #0FFH
ADD #SINTAB_360
TBLR IA ;sin_theta = Sin(theta) in Q15
ADD #1H ;Inc Table pointer
TBLR INXT_ENTRY ;Get next entry i.e. (Entry + 1)
LACC INXT_ENTRY
SUB IA ;Find Delta of 2 points
SACL INXT_ENTRY
LT INXT_ENTRY
MPY I_L ;THETA_L = interpolation value
LACC IA,16
APAC
SFR
SFR
SFR
SFR
;add #8192,15 ;for test
SACH IA ;sin_theta = Final interpolated value
*******************************************
****Calculate the cos_theta
*******************************************
LACL I_H
ADD #0ABH ;COS_THETA=SIN_THETA+90,256/3=64->40H
AND #0FFH
ADD #SINTAB_360
TBLR IB
ADD #1H ;Inc Table pointer
TBLR INXT_ENTRY ;Get next entry i.e. (Entry + 1)
LACC INXT_ENTRY
SUB IB ;Find Delta of 2 points
SACL INXT_ENTRY
LT INXT_ENTRY
MPY I_L ;THETA_L = interpolation value
LACC IB,16
APAC
SFR
SFR
SFR
SFR
SACH IB ;sin_theta = Final interpolated value
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -