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

📄 sub.asm

📁 实现语音信号AD转换的FIR滤波
💻 ASM
字号:

		.mmregs
		.include c54.inc
		.def timer0,hpisys,progflash
        .ref ss,class,add_h,add_l,end_flg,run_flg,add_start,buf,check
        .ref io_map,page,sec,progadd,flashadd,data_h,data_l
        .sect "progsys"
*************************** timer0 ***************************        
timer0:		
		PSHM AL
		PSHM AH
		PSHM AG
		PSHM AR2
		
		STM ss,AR2
		ADDM #1,*AR2
		LD *AR2,A
		BC 	timer0exit,ANEQ
				
		
		ST -1000,*AR2				;-3096
		

		LDM ST1,A
		XOR #0x2000,A
		STLM A,ST1
		
timer0exit:
		POPM AR2
		POPM AG
		POPM AH
		POPM AL
		RET
************************** hpisys ******************************
hpisys:
		PSHM AL
		PSHM AH
		PSHM AG
		PSHM AR2
		RSBX SXM
				
		STM class ,AR2
		
		CMPM *AR2,#0x55
		BC progwr,TC
		
		CMPM *AR2,#0xaa
		BC progrd,TC
		
		CMPM *AR2,#0x33
		BC datawr,TC
		
		CMPM *AR2,#0xcc
		BC datard,TC
		
		CMPM *AR2,#0x55aa
		BC runflash,TC
		
		CMPM *AR2,#0xaa55
		BC progflash,TC
		B exit
*	
progwr:
		LDM ST1,A
		AND #0xDFFF,A
		STLM A,ST1
		
		STM end_flg,AR2
		NOP
		NOP
		CMPM *AR2,#0x55AA
		NOP
		NOP
		BC progwr1,TC
		NOP
		NOP
		
		STM run_flg,AR2
		NOP
		NOP
		CMPM *AR2,#0x55AA
		NOP
		NOP
		BC progwr3,TC
		NOP
		NOP

		B progwr
		
progwr1:
;      ________________________ write ___________________		
		STM add_h,AR2
		LD *AR2+,16,A
		ADD *AR2+,A
				
		STM buf,AR2
		RPT #(256-1)
		WRITA *AR2+
;      _________________________ read ____________________
		STM add_h,AR2
		LD *AR2+,16,A
		ADD *AR2+,A
				
		STM buf,AR2
		RPT #(256-1)
		READA *AR2+
;      _______________________ check _____________________
		STM buf,AR2
		LD #0,A
		RPT #(256-1)
		XOR *AR2+,A
		STL A,*(check)
;      _______________________ set flg ____________________				
		ST #0,*(end_flg)
		STM run_flg,AR2
		CMPM *AR2,#0
		BC progwr,TC
;      _________________________ run ______________________
progwr3:		
		STM #0,XPC
		STM add_start,AR2
		NOP
		NOP
		LD *AR2,A
		NOP
		NOP
		BACC A					;goto progRAM
		nop
		nop
		B exit
*				
***************************** progrd **********************		
progrd:
		STM add_h,AR2
		LD *AR2+,16,A
		ADD *AR2,A
				
		STM #0x3030,AR2
		RPT #(256-1)
		READA *AR2+
		ST #0,*(class)
		STM #0xabc0,AR2
		LD *AR2,A
		B exit	
		
*
************************** datawr **************************
datawr:
		LDM ST1,A
		OR #0x2000,A
*		AND #0xDFFF,A
		STLM A,ST1
		
		STM end_flg,AR2
		NOP
		NOP
		CMPM *AR2,#0x55AA
		NOP
		NOP
		BC datawr1,TC
		NOP
		NOP
		
		STM run_flg,AR2
		NOP
		NOP
		CMPM *AR2,#0x55AA
		NOP
		NOP
		BC exit,TC
		NOP
		NOP

		B datawr
		
datawr1:
;write		
*		STM add_h,AR2
		MVDM add_l,AR2
		RPT #(256-1)
		MVKD buf,*AR2+
;read
		MVDM add_l,AR2
		RPT #(256-1)
		MVDK *AR2+,buf
;check
		STM buf,AR2
		LD #0,A
		RPT #(256-1)
		XOR *AR2+,A
		STL A,*(check)
;set flg			
		ST #0,*(end_flg)
		B datawr						;Goto datawr


*				
***************************** datard **********************		
datard:
		MVDM add_l,AR2
		RPT #(256-1)
		MVDK *AR2+,buf
		ST #0,*(class)
		B exit	

*
************************* Program Flash *******************
progflash:
	    RSBX XF
	    STM #0,CLKMD
clk40:	LDM CLKMD,A
		AND #0x01,A
		BC clk40,ANEQ
		STM #0x03ff,CLKMD			;PLL=1 MUL=2 40Mhz
;-------------------------- ChipErase ---------------------
		ST #0x100,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0xaa,*(io_map)
	    PORTW *(io_map),0xd555	;AAH--->5555H
	    
	    ST #0,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0x55,*(io_map)
	    PORTW *(io_map),0xeaaa	;55H--->2AAAH
	    
	    ST #0x100,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0x80,*(io_map)
	    PORTW *(io_map),0xd555	;80H--->5555H
	    
	    ST #0x100,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0xaa,*(io_map)
	    PORTW *(io_map),0xd555	;AAH--->5555H
	    
	    ST #0,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0x55,*(io_map)
	    PORTW *(io_map),0xeaaa	;55H--->2AAAH
	    
	    ST #0x100,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0x10,*(io_map)
	    PORTW *(io_map),0xd555	;10H--->5555H
	    
	    STM #200,AR1
WR_loop:
	    RPT #(50000-1)
	    NOP
	    BANZ WR_loop,*AR1-

;-------------------------- ChipProg ---------------------	    
		ST #0,*(page)
		ST #0,*(sec)
	    
	    STM #(4-1),AR3
WR_page:  
		STM #(4-1),AR4
		ST #0x8000,*(progadd)

WR_sec:  
		STM #(8192-1),AR7
		ST #0xc000,*(flashadd)
	  
WR_byte:
	    LD *(page),16,A
	    ADD *(progadd),A
	    READA *(data_l)
	    LD *(data_l),A
	    ANDM #0xff,*(data_l)
	    STL A,-8,*(data_h)
		

	    ST #0x100,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0xaa,*(io_map)
	    PORTW *(io_map),0xd555	;AAH--->5555H
	    
	   	    
	    ST #0,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0x55,*(io_map)
	    PORTW *(io_map),0xeaaa	;55H--->2AAAH
	    
	    ST #0x100,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0xa0,*(io_map)
	    PORTW *(io_map),0xd555	;A0H--->5555H

	    PORTW *(sec),0xbfff	
	    nop
	    nop	
	    MVDP *(flashadd),#(WR_hw+2)
	    MVDP *(flashadd),#(WR_hr+2)
	    LD *(flashadd),A
		ADD #1,A
		STL A,*(flashadd)
WR_hw:  
		PORTW *(data_h),0xc000
				
	    RPT #(1000-1)
	    NOP
WR_hr:    
		PORTR 0xc000,*(io_map)
	    LD *(io_map),A
	    XOR *(data_h),A
	    AND #0x80,A
	    BC WR_hr,ANEQ

	    ST #0x100,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0xaa,*(io_map)
	    PORTW *(io_map),0xd555	;AAH--->5555H
	    
	    ST #0,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0x55,*(io_map)
	    PORTW *(io_map),0xeaaa	;55H--->2AAAH
	    
	    ST #0x100,*(io_map)
	    PORTW *(io_map),0xbfff
	    nop
	    nop
	    ST #0xa0,*(io_map)
	    PORTW *(io_map),0xd555	;A0H--->5555H

	    PORTW *(sec),0xbfff
	    nop
	    nop
	    MVDP *(flashadd),#(WR_lw+2)
	    MVDP *(flashadd),#(WR_lr+2)
	    LD *(flashadd),A
		ADD #1,A
		STL A,*(flashadd)
	   
WR_lw:    
		PORTW *(data_l),0xc000
	    RPT #(1000-1)
	    NOP
WR_lr:    
		PORTR 0xc000,*(io_map)
	    LD *(io_map),A
	    XOR *(data_l),A
	    AND #0x80,A
	    BC WR_lr,ANEQ

	    LD *(progadd),A
	    ADD #1,A
	    STL A,*(progadd)
	    
	    BANZ WR_byte,*AR7-
	    ADDM #0x100,*(sec)
	    BANZ WR_sec,*AR4-
	    ADDM #1,*(page)
	    BANZ WR_page,*AR3-
		
		STM #0,CLKMD
clk100:	LDM CLKMD,A
		AND #0x01,A
		BC clk100,ANEQ
		STM #0x43ff,CLKMD			;PLL=4 MUL=5 100Mhz
		B exit
*
************************* From Flash Run *******************
runflash:	
		
		RSBX XF
	    STM #0,CLKMD
fclk40:	LDM CLKMD,A
		AND #0x01,A
		BC fclk40,ANEQ
		STM #0x03ff,CLKMD			;PLL=1 MUL=2 40Mhz
		
		ST #0,*(page)
		ST #0,*(sec)
	    STM #(4-1),AR3
	    
RD_page:
		ST #0x8000,*(progadd)  
		STM #(4-1),AR4

RD_sec:  
		ST #0xc000,*(flashadd)
		STM #(8192-1),AR7
	    PORTW *(sec),0xbfff	
	    nop
	    nop
	    
RD_byte:  
	    	
	    MVDP *(flashadd),#(RD_h+2)
RD_h:  
		PORTR 0xc000,*(data_h)
		ANDM #0xff,*(data_h)
		
		LD *(flashadd),A
		ADD #1,A
		STL A,*(flashadd)
	    
	    
	    MVDP *(flashadd),#(RD_l+2)
RD_l:    
		PORTR 0xc000,*(data_l)
		ANDM #0xff,*(data_l)
	    LD *(flashadd),A
		ADD #1,A
		STL A,*(flashadd)
		
	    
	    LD *(data_h),8,A
	    ADD *(data_l),A
	    STL A,*(data_l)

		LD *(page),16,A
	    ADD *(progadd),A
	    WRITA *(data_l)
	    
	    LD *(progadd),A
	    ADD #1,A
	    STL A,*(progadd)
	    
	    BANZ RD_byte,*AR7-
	    ADDM #0x100,*(sec)
	    BANZ RD_sec,*AR4-
	    ADDM #1,*(page)
	    BANZ RD_page,*AR3-
	    
	    STM #0,CLKMD
fclk100:
		LDM CLKMD,A
		AND #0x01,A
		BC fclk100,ANEQ
		STM #0x43ff,CLKMD			;PLL=4 MUL=5 100Mhz
	
		B 0xa000
				
exit:	SSBX SXM
		POPM AR2
		POPM AG
		POPM AH
		POPM AL
		
		RET
		.end
		

⌨️ 快捷键说明

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