|
.title "PRODUCE_PN.asm"
.mmregs
.bss PN,8
.bss SEQUENCE,255*2
STACK .usect "STACK",80
INIT_ST0 .set 1800h ;st0的初值
INIT_ST1 .set 2800h ;st1的初值
order .set 8 ;本原多项式的阶数
pn_len .set 255 ;产生的PN码的码长
.global _c_int00
.data
coefficient:
.word 0001h ,0000h, 0000h, 0000h
.word 0001h, 0001h, 0001h, 0000h
.sect "vector"
;--------------------------------------------------------------------
; interrupte vector table !
;--------------------------------------------------------------------
int_reset: b _c_int00
nop
nop
.space 72*16
int_tint: b main
nop
nop
.space 48*16
.text
_c_int00:
STM #0,IMR
STM #0x1020,PMST
STM #0x0010,TCR
STM #2499,PRD
STM #0x0008,IMR
STM #0x0030,TCR ;以上为对定时器的设置,以确定码速
STM #INIT_ST0,ST0
STM #INIT_ST1,ST1 ;初始化st0,st1,其中CMPT=0,FRCT=0
STM #STACK+20,SP
.asg AR2,PN_POINTER
.asg AR3,COEFF_TABLE
.asg AR4,FA
.asg AR5,SEQUENCE_POINTER
STM PN,PN_POINTER
STM SEQUENCE,SEQUENCE_POINTER
ST #1,*PN_POINTER+
ST #(order-2),FA
MVMD FA,BRC
RPTB INIT_PN-1
ST #0,*PN_POINTER+
nop
INIT_PN: ;将PN码的初值设为00000001
ST #(pn_len-1),FA
MVMD FA,BRC
RPTB INIT_SEQUENCE-1
ST #0,*SEQUENCE_POINTER+ ;将所得的PN码序列SEQUENCE的存储区初始化为0
NOP
INIT_SEQUENCE:
STM SEQUENCE,SEQUENCE_POINTER
STM PN,PN_POINTER
STM coefficient,COEFF_TABLE
STM #order,BK
STM #1,AR0
RSBX INTM
STM #0x0000,TCR ;启动定时器
WAIT: NOP
NOP
B WAIT
main: MVDD *PN_POINTER,*SEQUENCE_POINTER+
RPTZ A,#(order-1)
MAC *PN_POINTER+0%,*COEFF_TABLE+0%,A
AND #1,A
STL A,*PN_POINTER+0%
RETE
|
|