📄 qpsk modunation.asm
字号:
;---------------------------------------------------------------------
; Version: 1.0
; data: july-4-2006
; authors: ren guo chun
; comment: original created
; cpu type: ti_tms32054xx
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; compiler: tms320c54x assembler
; version: 1.02 (pc)
; include files: .mmregs
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; functional description:
; QPSK demod
; 2400 sym/s
; fc=1800Hz
; fs=14400 sample/s
; 51 order fir filter
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; activation
; activation example:
; call demod_psk
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; External Data
; .ref RV_ADB0
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; temporary data:
; dp=4
; CRAM0
; CRAM1
; CRAM2
; CRAM3
; CRAM4
; CRAM5
; CRAM6
; CRAM7
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; data structure
; RV_FILA .set 1000h ;buf_1=51h
; RV_FILB .set 1100h ;buf_1=51h
; RV_BUFA .set 1200h ;buf_1=51h
; RV_BUFB .set 1400h ;buf_1=51h
; RV_ADB0 .set 6000h ;rv_adb1=800h
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; ram define:
; RV_FBIP asRV_BUFAandRV_BUFB input point
; RV_FBOP asRV_BUFAandRV_BUFB output point
; RV_ADIP asRV_DAB0 input point
; RV_ADOP asRV_DAB0 output point
; DOP_PS1 asSIN_512_TAB read point
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; in data:
; RV_ADB0 buffer for A/D
; data format: 16bit data buffer
;---------------------------------------------------------------------
;---------------------------------------------------------------------
; output data:
; RV_BUFA as real data
; RV_BUFB as im data
; data format: 16bit data buffer
;---------------------------------------------------------------------
demod_psk
LD RV_ADIP, A ;A/D buffer in_pointer
SUB RV_ADOP, A ;A/D buffer out_pointer
NOP
NOP
XC 2, ALT
ADD #RV_ADBL, A ;circular buffer size
SUB #8, A
BC rv_dem_m00, ALT ;check if have sample demod
LD RV_FBOP, A ;rv fliter buffer out_pointer
SUB RV_FBIP, A ;rv fliter buffer in_pointer
NOP
NOP
XC 2, ALEQ
ADD #200H, A ;circular buffer size
SUB #24, A
BC rv_dem_m00, ALT ;check if can do demod
LD #RV_BUFA, A
ADD RV_FBIP, A
STLM A, AR1 ;re rv filter in_pointer
LD #RV_BUFB, A
ADD RV_FBIP, A
STLM A, AR2 ;im rv filter in_pointer
LD RV_ADOP, A
ADD #RV_ADB0, A
STLM A, AR3 ;A/D buffer out_pointer
STM #50, AR0
STM #8-1, BRC ;repeat 8 times
RPTBD rv_dem_m01-1
STM #RV_ADBL, BK ;circular buffer size
CALL cal_sin ;compute sin and cos
LD *AR3+%, T ;demod
MPY CRAM5, A ;sin data
STH A, *AR4+0 ;save to re fir filter
MPY CRAM6, A ;cos data
STH A, *AR5+0 ;save to im fir filter
RSBX FRCT ;frct=0
RPTZ A, #51-1
MACD *AR4-, ep_wavn, A ;re fir filtering
STH A, *AR1+
RPTZ A, #51-1
MACD *AR5-, ep_wavn, A ;im fir filtering
STH A, *AR2+
rv_dem_m01
SSBX FRCT ;frct=1
LD RV_FBIP, A ;change rv filter in_pointer
ADD #08H, A ;inc8
AND #1FFH, A
STL A, RV_FBIP
LD RV_ADOP, A ;change A/D out_pointer
ADD #08H, A ;inc8
AND #RV_ADBL-1, A
STL A, RV_ADOP
rv_dem_m00
RET
cal_sin
LD DOP_PS1, A ;calculate sin and cos in cram5 cram6
AND #3FH, A
STL A, CRAM0
LD CRAM0, 9, A
STL A, CRAM0 ;load low 6 bit
LD DOP_PS1, 10, A
STH A, CRAM1 ;load hight 9 bit
LD CRAM1, A
ADD #sin_512_tab, A ;read sin_table
READA CRAM2 ;first data d1
ADD #1, A
READA CRAM3 ;second data d2
LD CRAM3, A
SUB CRAM2, A
STL A, CRAM4 ;d1-d2
LD CRAM0, T
MPY CRAM4, A
ADD CRAM2, 16, A
STH A, CRAM5 ;sin=(d1-d2) *xxxxxxb
LD CRAM1, A
ADD #80, A
AND #1FFH, A
ADD #sin_512_tab, A
READA CRAM2 ;first data d3
ADD #1, A
READA CRAM3 ;second data d4
LD CRAM3, A
SUB CRAM2, A
STL A, CRAM4 ;d3=d4
MPY CRAM4, A
ADD CRAM2, 16, A
STH A, CRAM6 ;cos=(d3-d4) *xxxxxxb
LD DOP_DD1, A ;for sd and rv dopple data
ADD DOP_PS1, A ;change sin_table read pointer
ADD #DEG45K, A
NOP
NOP
XC 2, ALT
ADD #8000H, A
AND #7FFFH, A
STL A, DOP_PS1 ;save sin_table read pointer
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -