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

📄 ex6-1.asm

📁 使用汇编
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        subf3   *ar1,*ar0,r2
    	subf3   *ar3,*ar2,r1
        mpyf3   r2,r5,r0
||      addf3   *ar3,*ar2,r3
        mpyf3   *+ar4(ir1),r1,r3
||      stf     r3,*ar2++(ir0)
    	subf3   r0,r3,r4
        mpyf3   r1,r5,r0
||      addf3   *ar1,*ar0,r3
        mpyf3   *+ar4(ir1),r2,r3
||      stf     r3,*ar0++(ir0)
        addf    r0,r3
fft4:   stf     r4,*ar3++(ir0)
||      stf     r3,*ar1++(ir0)
    	cmpi    ar7,r6
        bnz     fft3
        lsh     1,ar5
    	brd     fft1
        lsh     1,ar6
        ldi     ar7,ir0
    	lsh     -1,ar7
fft5:   ldi     r7,rc
        subi    3,rc
        ldi     r7,ir0
        lsh     -1,ir0
        ldi     @INADDRD,ar0
        ldi     *ar0,ar0
        addi3   r7,ar0,ar1
        ldi     ar0,ar2
    	nop     *ar0++(1)
        nop     *ar2++(ir0)B
        ldi     ar1,ar3
    	rptb    fft6
        cmpi    ar2,ar0
    	bged    fft6
        nop     *ar1++(1)
    	nop     *ar3++(ir0)B
        ldf     *ar2,r2
||      ldf     *ar0++(1),r0
        ldf     *ar3,r3
||      ldf     *ar1,r1
        stf     r2,*-ar0(1)
||      stf     r0,*ar2
        stf     r3,*ar1
||      stf     r1,*ar3
fft6:   nop     *ar2++(ir0)B
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub9:ifft
ifft:   ldi     @LOGIFFT,ar0           ;ar0 save 08--256
        ldi     1,ar1
    	lsh3    *ar0,ar1,r7
        ldi     r7,ir0
        ldi     r7,ar7
    	lsh     -1,ar7
        ldi     2048,ir1
        ldi     13,ar4
    	subi    *ar0,ar4
    	lsh3    ar4,ar1,ar5
        ldi     1,ar6
        ldi     @INADDRD,ar0
        ldi     *ar0,ar0
        ldi     r7,r0
        addi3   r0,ar0,ar0
        ldi     r0,rc
    	subi    1,rc
    	rptb    ifft1
    	ldf     *ar0,r0
    	negf    r0,r0
ifft1:  stf     r0,*ar0++(1)
ifft2:  ldi     @INADDRD,ar1        
        ldi     *ar1,ar0
    	addi3   ar7,ar0,ar1        
        addi3   r7,ar0,ar2       
        addi3   ar7,ar2,ar3
        ldi     ar6,rc
        subi    1,rc
        rptb    ifft3
    	addf3   *ar1,*ar0,r0
    	subf3   *ar1,*ar0,r1
        addf3   *ar3,*ar2,r2
    	subf3   *ar3,*ar2,r3
        stf     r1,*ar1++(ir0)
||      stf     r0,*ar0++(ir0)
ifft3:  stf     r3,*ar3++(ir0)
||      stf     r2,*ar2++(ir0)
        cmpi    1,ar7
        bzd     ifft6
        ldi     1,r6
        ldi     @SINTAB,ar4
ifft4:  addi    ar5,ar4
        ldf     *ar4,r5
        ldi     r6,ar0
        ldi     @INADDRD,ar1
        ldi     *ar1,ar1
        addi    ar1,ar0
        addi3   ar7,ar0,ar1
        addi3   r7,ar0,ar2
     	addi3   ar7,ar2,ar3
        addi    1,r6
        ldi     ar6,rc
        subi    1,rc
        rptb    ifft5
        subf3   *ar1,*ar0,r2
        subf3   *ar3,*ar2,r1
        mpyf3   r2,r5,r0
||      addf3   *ar3,*ar2,r3
        mpyf3   *+ar4(ir1),r1,r3
||      stf     r3,*ar2++(ir0)
        subf3   r0,r3,r4
        mpyf3   r1,r5,r0
||      addf3   *ar1,*ar0,r3
    	mpyf3   *+ar4(ir1),r2,r3
||      stf     r3,*ar0++(ir0)
        addf    r0,r3
ifft5:  stf     r4,*ar3++(ir0)
||      stf     r3,*ar1++(ir0)
        cmpi    ar7,r6
        bnz     ifft4
        lsh     1,ar5
     	brd     ifft2
    	lsh     1,ar6
        ldi     ar7,ir0
        lsh     -1,ar7
ifft6:  ldi     r7,rc
        subi    3,rc
        ldi     r7,ir0
        lsh     -1,ir0
        ldi     @INADDRD,ar1
        ldi     *ar1,ar0
        addi3   r7,ar0,ar1
        ldi     ar0,ar2
        nop     *ar0++(1)
        nop     *ar2++(ir0)B
        ldi     ar1,ar3
        rptb    ifft7
        cmpi    ar2,ar0
        bged    ifft7
        nop     *ar1++(1)
        nop     *ar3++(ir0)B
        ldf     *ar2,r2
||      ldf     *ar0++(1),r0
        ldf     *ar3,r3
||      ldf     *ar1,r1
        stf     r2,*-ar0(1)
||      stf     r0,*ar2
        stf     r3,*ar1
||      stf     r1,*ar3
ifft7:  nop     *ar2++(ir0)B
        ldi     @INADDRD,ar0
        ldi     *ar0,ar0
        ldi     r7,r0
    	addi3   r0,ar0,ar0
        ldi     r0,rc
    	subi    1,rc
    	rptb    ifft8
    	ldf     *ar0,r0
    	negf    r0,r0
ifft8:  stf     r0,*ar0++(1)
    	rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub12: sort
sort:	ldi	    ar0,ar2
	    ldf	    *ar2,r0	                  ;第一个值读出,逐地址比较
	    ldf	    r0,r2
	    subi	ar0,ar1                   ;末地址-首地址,得出比较(循环)次数
	    ldi	    ar1,rc
	    rptb	sort1
	    ldf	    *++ar0,r0
	    cmpf	r0,r2	                  ;浮点数的比较
    	bgt	    sort1		              ;若大于,则不执行操作
    	ldf	    r0,r2		              ;若小于,则大值覆盖小值
    	ldi	    ar0,ar2
sort1:	nop
	    ldi	    ar2,ar0    	              ;数据放到出口参数里
	    ldf	    r2,r0 
    	call	sqrt		              ;进行衰减
		
	    subi	CLSLENTH,ar2
    	ldi	    CLSLENTH,r1
	    mpyi	2,r1
	    ldf	    0.0,r2
	    rpts	r1
	    stf	    r2,*ar2++                 ;谱线的周边10个进行清零
	    rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;信号频谱细化32倍
zfft:   ldi     @INADDR,ar0               ;输入输出数据的实部首地址       
        ldi     ar0,ar1                   ;ar0为搬移后的实部存储地址,ar1为虚部
        addi    256,ar1                   ;存储地址,实部与虚部距离256点
        ldi     ar0,ar2 
        addi    1700,ar2                  ;ar2和ar3分别为需要搬移的频段的实部和虚部地址
        subi    40,ar2                    ;载频1700,区段为1660-1740
        ldi     ar2,ar3                   ;ar3=ar2=实部首地址+1660
        addi    8192,ar3                  ;实部与虚部的距离8192Hz,ar3=虚部首地址+1660
        
        ldi     80,rc                     ;rc=80
        rptb    zrest0                    ;频谱搬移
        ldf     *ar2++,r0
        ldf     *ar3++,r1
        stf     r0,*ar0++
zrest0: stf     r1,*ar1++                 ;搬移后,ar0指向实部第81个点,ar1指向虚部第81个点

        ldf     0,r2                      ;(80-127)点清零
        ldi     46,rc                
        rptb    zfft1
zfft1:  stf     r2,*ar0++
||      stf     r2,*ar1++
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ldi     ar0,ar2                   ;镜象赋值
        ldi     ar1,ar3                   ;把上述获得的0-127点的值赋给128-255
        nop     *ar0--                    ;数据关于第128点中心对称
        nop     *ar1--
        ldi     127,rc
        rptb    same         
        ldf     *ar0--,r0
||      ldf     *ar1--,r1
same:   stf     r0,*ar2++
||      stf     r1,*ar3++  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;256 point ifft
        ldi     @INADDRD,ar0
        ldi     @INADDR,r0     
        sti     r0,*ar0                                                                      
        ldi     @LOGFFT,ar0
        ldi     8,r0
        sti     r0,*ar0
        call    ifft 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
        ldi     @INADDR,ar0                ;256点搬移
        addi    256,ar0
        ldi     @INADDR,ar1
        addi    8192,ar1
        ldi     254,rc                     ;256-2
        ldf     *ar0++,r1               
        rptb    zfft2
zfft2:  ldf     *ar0++,r1
||      stf     r1,*ar1++
        stf     r1,*ar1++                  ;实部不动,只移动虚部
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ldf     0,r2
        ldi     @INADDR,ar0
        addi    256,ar0
        ldi     8192,rc
        subi    257,rc                     ;8192-256-1
        rptb    zfft3
zfft3:  stf     r2,*ar0++                  ;除了实部和虚部外的地方清零
||      stf     r2,*ar1++   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ldi     @INADDRD,ar0               ;在调用fft函数之前进行入口参数设置
        ldi     @INADDR,r0      
        sti     r0,*ar0                    ;fft数据起始地址指针INADDRD
        ldi     @LOGFFT,ar0                ;0d就是13,2的13次幂          
        ldi     SULOG,r0               
        sti     r0,*ar0
        call    fft                        ;进行2的13次幂8192点的fft
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
output: ldi     @MCTL,ar3        ;INIT MAIN BUS
        ldi     MBUS3,ar1
        sti     ar1,*ar3
        ldi     @MCTLS,ar3
        sti     ar1,*ar3
         
        ldi     @PORT232,ar0     ;双口RAM
        addi    1,ar0            ;指向标志位下一位,数据长度
        ldi     21,r0
        sti     r0,*ar0++        ;第1个数据传输数据长度
                
        ldi     @FM,ar1 
        ldf     *ar1,r1
        mpyf    0.03125,r1
        mpyf	10.0,r1          ;精确到0.1
     	addf	0.5,r1
	    fix  	r1               ;浮点->整型
        ldi     0ffh,ar4
        and3    ar4,r1,r0        ;low 8 bit
        and     0ff00h,r1        ;high 8 bit
        lsh     -8,r1         
        sti     r1,*ar0++
        sti     r0,*ar0++
                
        ldi     @FC,ar1 
        ldf     *ar1,r1
        mpyf    0.03125,r1
        addf    @A,r1
        mpyf	10.0,r1          ;精确到0.1
     	addf	0.5,r1
	    fix  	r1               ;浮点->整型
        ldi     0ffh,ar4
        and3    ar4,r1,r0        ;low 8 bit
        and     0ff00h,r1        ;high 8 bit
        lsh     -8,r1         
        sti     r1,*ar0++
        sti     r0,*ar0++
        
        ldi     @F2,ar1 
        ldf     *ar1,r1
        mpyf    0.03125,r1
        addf    @A,r1
        mpyf	10.0,r1          ;精确到0.1
     	addf	0.5,r1
	    fix  	r1               ;浮点->整型
        ldi     0ffh,ar4
        and3    ar4,r1,r0        ;low 8 bit
        and     0ff00h,r1        ;high 8 bit
        lsh     -8,r1         
        sti     r1,*ar0++
        sti     r0,*ar0++
        
        ldi     @F3,ar1 
        ldf     *ar1,r1
        mpyf    0.03125,r1
        addf    @A,r1
        mpyf	10.0,r1          ;精确到0.1
     	addf	0.5,r1
	    fix  	r1               ;浮点->整型
        ldi     0ffh,ar4
        and3    ar4,r1,r0        ;low 8 bit
        and     0ff00h,r1        ;high 8 bit
        lsh     -8,r1         
        sti     r1,*ar0++
        sti     r0,*ar0++
        
        ldi     @FCAMP,ar1 
        ldf     *ar1,r1

	    fix  	r1               ;浮点->整型
	    ldi     0ffh,ar4
        lsh	    24,ar4           ;ar4=ff000000
        and3    ar4,r1,r0
        lsh     -24,r0	
        sti     r0,*ar0++
        lsh	    -8,ar4
	    and3    ar4,r1,r0
        lsh     -16,r0
        sti     r0,*ar0++
        lsh	    -8,ar4
	    and3    ar4,r1,r0
        lsh     -8,r0
        sti     r0,*ar0++
        lsh	    -8,ar4
	    and3    ar4,r1,r0
        sti     r0,*ar0++
        
        
        ldi     @F2AMP,ar1 
        ldf     *ar1,r1

	    fix  	r1               ;浮点->整型
	    ldi     0ffh,ar4
        lsh	    24,ar4
        and3    ar4,r1,r0
        lsh     -24,r0	
        sti     r0,*ar0++
        lsh	    -8,ar4
	    and3    ar4,r1,r0
        lsh     -16,r0
        sti     r0,*ar0++
        lsh	    -8,ar4
	    and3    ar4,r1,r0
        lsh     -8,r0
        sti     r0,*ar0++
        lsh	    -8,ar4
	    and3    ar4,r1,r0
        sti     r0,*ar0++
        
        
        ldi     @F3AMP,ar1 
        ldf     *ar1,r1

	    fix  	r1               ;浮点->整型
        ldi     0ffh,ar4
        lsh	    24,ar4
        and3    ar4,r1,r0
        lsh     -24,r0	
        sti     r0,*ar0++
        lsh	    -8,ar4
	    and3    ar4,r1,r0
        lsh     -16,r0
        sti     r0,*ar0++
        lsh	    -8,ar4
	    and3    ar4,r1,r0
        lsh     -8,r0
        sti     r0,*ar0++
        lsh	    -8,ar4
	    and3    ar4,r1,r0
        sti     r0,*ar0
;-------------------------------------
        ldi     @PORT232,ar0
        ldi     55h,r0
        sti     r0,*ar0
        ldi     @MCTL,ar3
        ldi     MBUS1,ar1
        sti     ar1,*ar3
        ldi     @MCTLS,ar3
        sti     ar1,*ar3
        rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
		        .data
;--------------------------------------common data
SINTAB          .word    SINP
FS              .set     727H
DLENTH          .set     8192
SULOG           .set     0dH
SULOG1          .set     08H
SAMNUM          .set     2000H              
CLSLENTH    	.set	 320
;--------------------------------------
XNUM            .float   0.00048828    ;1/2048    
FREQXS	    	.float	 1.0		   ;8192/8192
A				.float	 1660	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADRR
SADDR           .word    7000H
TNUM            .word    7001H
INADDRD         .word    7002H
LOGFFT          .word    7003H
LOGIFFT         .word    7011H
;--------------------------------------
MCTLS           .word    7004H
LEDS            .word    7005H
FL              .word    7006H
FH              .word    7007H
F1              .word    7008H                   
;--------------------------------------
FC		        .word	 7009H      
FCAMP		    .word	 700AH
FM		        .word	 700BH
F2	        	.word	 700CH
F2AMP	     	.word	 700DH
F3	        	.word	 700EH
F3AMP		    .word	 700FH
;---------------------------------------------------------------FLASH
TSDATA          .word    10000H    
TSDATAM         .word    12000H 
;------------------------------------------------------------inter ram
MCTL            .word    808064H
STCK            .word    809E00H  
INADDR          .word    800000H
PWADDR          .word    804000H
;--------------------------------------------------------------------------
ADADER          .word    810000H      ;read
ADADERM         .word    810001H      ;write
LED             .word    810003H

DDS_FREQ0L      .word    810008H
DDS_FREQ0H      .word    810009H
DDS_FREQ1L      .word    81000AH
DDS_FREQ1H      .word    81000BH
DDS_PHASE0      .word    81000CH
DDS_PHASE1      .word    81000DH
DDS_PHASE2      .word    81000EH
DDS_PHASE3      .word    81000FH
;--------------------------------------------------------------------------
PORT232         .word    0C00000H
PORT2           .word    0C00200H
;--------------------------------------------------------------------------
MBUS1           .set     0001038H      ;001x  wait level 3--1 wait
MBUS3           .set     0001078H      ;011x  wait level 7--3 wait dual port
MBUS7           .set     00010F8H      ;111x  wait level F--7 wait DDS & D/A
;-----------------------------------------------------------T_DATA
SINGFXS         .float   178.95697     ;2^32/24000000
FT15M           .float   15000000.0    ;FT15M=F0/FS/8=120000000/8/FS=15000000/FS
;-----------------------------------------------------------------------------
             	.end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -