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

📄 ly3.asm

📁 实现了DSP2407芯片的A/D-D/A转换
💻 ASM
字号:
        	.title	    "A"
			.bss			GPR0,1 			 ;通用目的寄存器
			.copy       "240XAVECTOR.H"	;拷贝中断向量头文件     
			.include    "240XA.H"
			.def        _c_int0
DP_CAN		.set    0E2H
DP_CAN2      .set    0E4H
             .sect	".PVECS"			;定义子向量段
PVECTORS	B	PHANTOM				    ;保留向量地址偏移量0000H 
			B	PHANTOM				;保留向量地址偏移量0001H
			B	PHANTOM				;保留向量地址偏移量0002H
			B	PHANTOM				;保留向量地址偏移量0003H
			B	PHANTOM				;保留向量地址偏移量0004H			
			B	PHANTOM				;保留向量地址偏移量0005H
			B	SCI_RX_ISR			;保留向量地址偏移量0006H SCI接收中断
			B	PHANTOM				;保留向量地址偏移量0007H  				
			B	PHANTOM				;保留向量地址偏移量0041H	

			.data       
COEF        .word  0A3EH,0H,0999H,01460H,01CD0H,02000H
	        .word  01CD0H,01460H,0999H,0H,0A3EH  
SIN         .word  0000H,0F4H,0553H,05AFH,0386H,0432H,04BEH,0526H,044AH
            .word  0581H,0573H,0541H,04EFH,0480H,03F9H ,0363H,02C3H,03A8H
            .word  0484H,054FH,03CAH,0699H,070EH,075DH,0784H,0783H,05C8H
            .word  0709H,0698H,0609H,0562H, 04AAH,03E8H,04AAH,0562H,0609H
            .word  0698H,0709H,05C8H,0783H,0784H,075DH,070EH,0699H,03CAH
            .word  054FH,0484H,03A8H,02C3H ,0263H,03F9H,0480H,04EFH,0541H
            .word  0573H,0581H,044AH,0526H,04BEH,0432H,0386H,05AFH,0553H
            .word  0F4H            
SIC:        .word 03FFh,03FEh,03FBh,03F4h,03ECh,03E1h,03D3h,03C4h
            .word 03B2h,039Dh,0387h,036Eh,0353h,0336h,0317h,02F6h
            .word 02D4h,02AFh,0289h,0261h,0238h,020Eh,01E2h,01B5h
            .word 0187h,0158h,0129h,00F8h,00C7h,0096h,0064h,0032h
            .word 00h,0FFCEh,0FF9Ch,0FF6Ah,0FF39h,0FF08h,0fED7h,0FEA8h
            .word 0FE79h,0FE4Bh,0FE1Eh,0FDF2h,0FDC8h,0FD9Fh,0FD77h,0FD51h
            .word 0FD2Ch,0FD0Ah,0FCE9h,0FCCAh,0FCADh,0FC92h,0FC79h,0FC63h
            .word 0FC4Eh,0FC3Ch,0FC2dh,0FC1Fh,0FC14h,0FC0Ch,0FC05h,0FC02h
            .word 0FC00h,0FC02h,0FC05h,0FC0Ch,0FC14h,0FC1Fh,0FC2Dh,0FC3Ch
            .word 0FC4Eh,0FC63h,0FC79h,0FC92h,0FCADh,0FCCAh,0FCE9h,0FD0Ah
            .word 0FD2Ch,0FD51h,0FD77h,0FD9Fh,0FDC8h,0FDF2h,0FE1Eh,0FE4BH
            .word 0FE79h,0FEA8h,0FED7h,0FF08h,0FF39h,0FF6Ah,0FF9Ch,0FFCEh         
			.text
_c_int0:	 	
			LDP		#0H 					
			SETC 	INTM 				; 禁止中断
			SETC    CNF
			CLRC 	SXM
			SPLK 	#0000H,IMR 			; 屏蔽所有CPU中断
			LACC 	IFR 					; 读中断标志
			SACL		IFR 					; 清所有的中断标志
			LDP		#00E0H 				; 设置DP=E0H,则地址为7000H~707FH
			SPLK 	#006FH,WDCR 			; 使能看门狗
			SPLK 	#0080H,SCSR1 		; 使能ADC模块时钟
			KICK_DOG 		
			SPLK 	#0H,60H 				;设置等待状态发生器: 
			OUT 		60H,WSGR 			;程序区,0-7 等待状态
ADC
* 初始化 ADC 寄存器:
			LDP		#00E1H				;设置DP=E1H,则地址为7080H~70FFH
			SPLK		#4000H,ADCCTRL1 		;复位ADC模块
			NOP
			SPLK		#3000H,ADCCTRL1	 	;设置ADC控制寄存器,定义为级联模式,排
;序器为SEQ,工作模式为启动/停止。
			SPLK 	#0,MAXCONV 			;设定一次自动转换为16个通道(最大值)
* 设定转换顺序: 
			SPLK 	#03210H,CHSELSEQ1   ;转换通道 0,1,2,3
			SPLK 	#07654H,CHSELSEQ2   ;转换通道4,5,6,7
			SPLK	#0BA98H,CHSELSEQ3   ;转换通道8,9,10,11
			SPLK 	#0FEDCH,CHSELSEQ4   ;转换通道12,13,14,15
			SPLK 	#04000H,ADCCTRL2 	;复位排序器使排序器指针指向CONV00
			SPLK 	#02000H,ADCCTRL2 	;启动转换
			


			

LOOP: 		LAR AR4,RESULT0
            B 		ADC
            B       LOOP				
            CALL        LMS
            CALL        FFT
;************自适应滤波**********************
LMS:
N	    	.set        10				;存放系数的起始地址
WN			.set        0220H         
DPTRO		.set        2000H			;输出起始地址
ONE		    .set        08100H
U			.set        08102H			;存放收敛因子U的地址
EN			.set        08104H          
DN			.set        08106H			;存放理想信号的地址
YN			.set        08108H			;当前输出的地址
I			.set        127
            .sect       ".VECTORS"
           .bss        BUFF, N
           .bss        TEMP, 1
           .text
_C_INT1:
         LDP		#00E0H
         SPLK	    #006FH,WDCR    		;关看门狗
         LDP		#04H
         LAR		AR0,#WN
         MAR		*,AR0
         RPT		#10
         BLDD	    #COEF,*+        		;把系数置入以220H开始的单元中 
         LAR		AR0,#WN
         LDP 	    #6
         LAR		AR1,#BUFF			;AR1指向缓冲区
         MAR		* ,AR1
         ZAC
         RPT		#10
         SACL   	*+              		;缓冲器清零
         LDP		#04H
         LAR		AR2,#300H
         RPT		#63
         BLDD	    #SIN,*+				;SIN值依次放入DPTRI输入起始地址
         RPT		#63
         BLDD	    #SIN,*+		
         LAR		AR2,#300H
         LAR		AR3,#DPTRO
         SPLK   	#0147H,U       		;(U)=0.01
         SPLK   	#01H,ONE
         SPLK	    #0999H,DN      		;置入理想信号
         LAR		AR6,#I 
DONE:        
         MAR		*,AR2
         LACL   	*+
         LDP		#6
         SACL	    BUFF          		;采样信号放入缓冲器
         CALL   	FIR
         MAR		*,AR3
         SACH	    *+,1            		;输出信号
         LDP		#04H
         SACH	    YN,1
         LACL	    DN
         SUB		YN            		;(ACC)=(DN)-(YN)
         SACL	    EN
         LT		    EN
         MPY		U
         ZAC
         APAC                      	;计算的(ACC)=U*E(N)
         ADD		ONE,15
         SACH	    EN             		;修正(EN)=U*E(N)
         LAR		AR0,#WN
         LDP		#06H
         LAR		AR1,#BUFF+N
         LDP		#04H
         LT		    EN
         LAR		AR5,#10
         MAR		*,AR1
         MPY		*,AR0           		;U*E(N)*X(N-10)
ALTER:
         LACC	*,0,AR1
         MPYA	*-,AR0          		;(ACC)=W(I)+U*E(N)*X(N-I)
         SACL	*+,0,AR5
         BANZ	ALTER,*-,AR0
         MAR	*,AR6
         BANZ	DONE,*-        		;改变系数W(N)
FIR:
         LAR		AR1,#BUFF+N
         MPY		#0H            		;PREG清零
         ZAC                       ;累加器清零
         LAR		AR4, #10
SUM:
         MAR		*,AR1
         LT		*-,AR0
      	 MPY		*+,AR4
         BANZ	SUM,*-
         APAC
         RET 
;***********************FFT************************************
FFT:
I0             .EQU       98
J              .EQU       99            ;循环计数器
L              .EQU       101           
M              .EQU       102           
B              .EQU       103
TTTB           .EQU       104
R1             .EQU       105
R2             .EQU       106
I1             .EQU       107
I2             .EQU       108 
I128           .EQU       109
I512           .EQU       110
I768           .EQU       111
I800           .EQU       112
S1             .EQU       114
XT             .equ       115
C1             .EQU       116
YT             .equ       117
T              .EQU       118
TABLE          .EQU       2000h         ;128个样值存放单元的首址
               .text
START:    LALK    128
          SACL    I128
          LALK    512
          SACL    I512
          LALK    768
          SACL    I768
          LALK    800
          SACL    I800
REAL:     LRLK    AR0,64
          LRLK    AR1,512
          LRLK    AR2,127
          LAR     AR3,#TABLE
REPR:     LARP    AR3
          LACC    *+,0,AR1
          SACL    *BR0+
          LARP    AR2
          BANZ    REPR
          LACK    0
          LRLK    AR1,640
          LRLK    AR2,127
REPI:     LARP    AR1
          SACL    *+
          LARP    AR2
          BANZ    REPI
W:        LRLK    AR1,768
          LRLK    AR2,95
          LAR     AR3,#SIC
LL:       LARP    AR3
          LACC    *+,0,AR1
          SACL    *+
          LARP    AR2
          BANZ    LL
          LACK    0
          SACL    B
LOOP1:    LAC     B
          ADDK    1
          SACL    B
          LARK    AR0,7
          LAR     AR1,B
          LARP    AR1
          CMPR    2
          BBNZ    GLP
          LAR     AR7,B
          LARP    AR7
          LACK    1
          SACL    TTTB
B1:       LT      TTTB
          MPYK    #2
          PAC
          SACL    TTTB
          BANZ    B1
          LAC     TTTB
          CLRC    C
          ROR
          SACL    TTTB
          CLRC    C
          ROR
          SACL    L
          LACK    7
          SUB     B
          SACL    T
          LAR     AR7,T
          LACK    1
          SACL    M
B2:       LT      M
          MPYK    #2
          PAC
          SACL    M
          BANZ    B2
          LAC     M
          CLRC    C
          ROR
          SACL    M
          LACK    0
          SACL    I0
LOOP2:    LARK    AR0,127
          LAR     AR7,I0
          LARP    AR7
          CMPR    2
          BBNZ    LOOP1
          LACK    0
          SACL    J
LOOP3:    LAC     L
          SUBK    1
          SACL    T
          LAR     AR0,T
          LAR     AR7,J
          LARP    AR7
          CMPR    2
          BBNZ    INCRI
          B       MAIN
INCRI:    LAC     I0
          ADD     TTTB
          SACL    I0
          B       LOOP2
MAIN:     SPM     0
          SOVM
          SSXM
          LARP    AR5 
          LAC     I0
          ADD     J
          ADD     I512
          SACL    T
          LAR     AR5,T
          LAC     *
          SACL    R1
          LAC     T
          ADD     I128
          SACL    T
          LAR     AR5,T
          LAC     *
          SACL    I1
          LAC     T
          SUB     I128
          ADD     L
          SACL    T
          LAR     AR5,T
          LAC     *
          SACL    R2
          LAC     T
          ADD     I128
          SACL    T
          LAR     AR5,T
          LAC     *   
          SACL    I2
          LARP    AR5
          LT      J
          MPY     M
          PAC
          ADD     I768
          SACL    T
          LAR     AR5,T
          LAC     *
          SACL    C1
          LAC     T
          ADDK    32
          SACL    T
          LAR     AR5,T
          LAC     *
          SACL    S1
          LARP    AR5
          LAC     I0
          ADD     J      
          ADD     I512
          SACL    T
          LAR     AR5,T
          LT      R2
          MPY     C1
          PAC
          LT      I2
          MPY     S1
          SPAC
          SACH    XT,6
          LACC    R1
          ADD     XT
          ROR
          SACL    *  ;
          LAC     T
          ADD     I128
          SACL    T
          LAR     AR5,T
          LT      R2
          MPY     S1
          PAC
          LT      I2
          MPY     C1
          APAC  
          SACH    YT,6
          LACC    I1
          ADD     YT
          ROR
          SACL    *
          LAC     T
          SUB     I128
          ADD     L
          SACL    T
          LAR     AR5,T
          LACC    R1
          SUB     XT
          ROR
          SACL    *
          LAC     T
          ADD     I128
          SACL    T
          LAR     AR5,T
          LACC    I1
          SUB     YT
          ROR
          SACL    *
          LAC     J
          ADDK    I0
          SACL    J
          B       LOOP3
GLP:      LRLK    AR1,127
          LRLK    AR2,512
          LRLK    AR3,640
          LRLK    AR4,896
PS:       ZAC 
          MPYK    0
          LARP    AR2
          SQRA    *+,AR3
          SQRA    *+,AR4
          APAC
          SACH    *+
          LARP    AR1
          BANZ    PS


WAIT:  
      B       WAIT 
              RET
;*********************CAN邮箱***************************
;CAN寄存器配置
        SPLK     #1000H,CANMCR		;改变配置寄存器
W_CCE    
        BIT      CANGSR,#0BH		;等待改变配置使能,检测GSR的CCE位
        BCND     W_CCE,NTC			;CCE=1允许对配置寄存器进行配置
        SPLK     #0027H,CANBCR2		;波特率预定标
        SPLK     #001AH,CANBCR1		;采样点设置
        SPLK     #0000H,CANMCR		;改变配置寄存器
W_NCCE  
        BIT      CANGSR,#0BH			;等待禁止改变配置寄存器
        BCND     W_NCCE,TC	
;在写之前配置CAN
        SPLK      #0040H,CANMDER		;D5~D0为0,禁止任何信箱
        SPLK      #0103H,CANMCR		;CDR位(D8)为1,改变数据区请求
;写CAN邮箱
        LDP       #DP_CAN2         
        SPLK      #0FFFFH,CANMSGID0H
        SPLK      #0FFFEH,CANMSGID0L
        SPLK      #0008H,CANMSGCTRL0         
        SPLK      #2447H,CANMSGID3H 			;设置邮箱3的标识符
	    SPLK 	  #0FFFFH,CANMSGID3L
	    SPLK 	  #08H,CANMSGCTRL3			    ;RTR=0,DCL=8
	    SPLK 	  #01H,	CANMBX3A			    ;邮箱3信息初始化,设置初始值
		SPLK 	  #05H,	CANMBX3B
		SPLK 	  #0AH,	CANMBX3C
		SPLK 	  #0EH,	CANMBX3D
;写之后设置参数
        LDP       #DP_CAN
        SPLK      #04C0H,CANMCR		;CDR位(D8)为0,正常工作模式
        SPLK      #004CH,CANMDER	;使能邮箱3
        SPLK      #0F7FFH, CANIMR	;使能中断
        SPLK      #0FFFFH,CANIFR
;CAN发送报文
	    LDP      #0E1H
		LACL     RESULT0
		LDP      #0E4H     
		
		SACL     CANMBX3A			;把要发送的数据放入邮箱3
        LDP      #0E0H
        SPLK     #0020H,CANTCR		;启动发送
W_TA    BIT      CANTCR,2			;等待MBX3的传送确认
        BCND     W_TA,NTC
        SPLK     #2000H,CANTCR      	;复位发送确认位TA
		B        LOOP		
		RET        
;中断程序		
GISR1:						   		;优先级INT1中断人口            
	    LDP      #0E0H
		LACC     PIVR,1				;读取外设中断向量寄存器(PIVR),并左移一位
		ADD		 #PVECTORS			;加上外设中断人口地址
		BACC							;跳到相应的中断服务子程序
SCI_RX_ISR:	                        
		LDP		 #4H					;设置页面
		SPLK     #1H, SCI_FLAG      	;清发送软件标志位 
		CLRC     INTM				;中断清0
		RET
;假中断程序
PHANTOM 	
KICK_DOG								;复位看门狗
		RET

GISR2: 		RET
GISR3: 		RET
GISR4: 		RET
GISR5: 		RET
GISR6: 		RET
;PHANTOM: 	RET
            .END

⌨️ 快捷键说明

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