⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qpsk modunation.asm

📁 TI tms320c54x上实现BPSK/QPSK调制解调仿真的汇编语言源代码
💻 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 + -